From df0fb93219ce24a11b44ddf7256e4c2886362bf7 Mon Sep 17 00:00:00 2001 From: Oliver Bartsch <bo@cedev.de> Date: Tue, 6 Feb 2024 17:12:34 +0100 Subject: [PATCH] [BUGFIX] Fix list view functionality in FileList This fixes several bugs in FileList: 1. Properly initializing the `searchTerm` ensures it is kept while sorting. 2. Sorting for "filesize" is now working properly, using corresponding collator attribute. 3. Pagination is properly reset on searching. 4. Correct search term is kept on paginating. Resolves: #103053 Releases: main, 12.4 Change-Id: Ibf7dd278d13aed6142286d7408b9380588485801 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/82850 Tested-by: core-ci <typo3@b13.com> Tested-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Oliver Bartsch <bo@cedev.de> --- typo3/sysext/filelist/Classes/FileList.php | 7 +++++++ .../filelist/Resources/Private/Templates/File/List.html | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/typo3/sysext/filelist/Classes/FileList.php b/typo3/sysext/filelist/Classes/FileList.php index b36c705878d5..aacd49d887ce 100644 --- a/typo3/sysext/filelist/Classes/FileList.php +++ b/typo3/sysext/filelist/Classes/FileList.php @@ -291,6 +291,7 @@ class FileList } if ($searchDemand !== null) { + $this->searchDemand = $searchDemand; if ($searchDemand->getSearchTerm() && $searchDemand->getSearchTerm() !== '') { $folders = []; // Add special "Path" field for the search result @@ -1429,6 +1430,9 @@ class FileList parse_str($uri->getQuery(), $queryParameters); unset($queryParameters['contentOnly']); $queryParameters = array_merge($queryParameters, ['currentPage' => $targetPage]); + if ($this->searchDemand) { + $queryParameters['searchTerm'] = $this->searchDemand->getSearchTerm() ?? ''; + } $uri = $uri->withQuery(HttpUtility::buildQueryString($queryParameters, '&')); return new PaginationLink( @@ -1556,6 +1560,9 @@ class FileList protected function sortResources(array $resources, string $sortField): array { $collator = new \Collator((string)($this->getLanguageService()->getLocale() ?? 'en')); + if ($sortField === 'size') { + $collator->setAttribute(\Collator::NUMERIC_COLLATION, \Collator::ON); + } uksort($resources, function (int $index1, int $index2) use ($sortField, $resources, $collator) { $resource1 = $resources[$index1]; $resource2 = $resources[$index2]; diff --git a/typo3/sysext/filelist/Resources/Private/Templates/File/List.html b/typo3/sysext/filelist/Resources/Private/Templates/File/List.html index 4372580730f1..a8f4948480cc 100644 --- a/typo3/sysext/filelist/Resources/Private/Templates/File/List.html +++ b/typo3/sysext/filelist/Resources/Private/Templates/File/List.html @@ -50,7 +50,7 @@ <label for="filelist-searchterm" class="visually-hidden"> <f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.label.searchString"/> </label> - <input type="hidden" name="pointer" value="0" /> + <input type="hidden" name="currentPage" value="0" /> <button type="submit" class="btn btn-default" name="search"><core:icon identifier="actions-search" /></button> </div> </div> -- GitLab