From 9e7fef12a1d7fe1b13eb713f208aca77ddbfa724 Mon Sep 17 00:00:00 2001 From: Oliver Bartsch <bo@cedev.de> Date: Mon, 4 Mar 2024 12:46:48 +0100 Subject: [PATCH] [BUGFIX] Add missing file search to file link handler The FileLinkHandler, used to select a file in the link wizard does now also allow to search for files, like it's also possible in the FileBrowser already. Resolves: #103241 Releases: main, 12.4 Change-Id: Icf3ded3d317e5fbdbd4bc17db0e5969f7b2a055f Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/83191 Reviewed-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Andreas Nedbal <andy@pixelde.su> Tested-by: Andreas Nedbal <andy@pixelde.su> Tested-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Susi Moog <look@susi.dev> Tested-by: core-ci <typo3@b13.com> Tested-by: Andreas Kienast <a.fernandez@scripting-base.de> Tested-by: Susi Moog <look@susi.dev> Reviewed-by: Andreas Kienast <a.fernandez@scripting-base.de> --- .../Classes/LinkHandler/FileLinkHandler.php | 37 +++++++++++++------ .../Private/Templates/LinkHandler/File.html | 2 +- .../Private/Templates/LinkHandler/Folder.html | 2 +- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/typo3/sysext/filelist/Classes/LinkHandler/FileLinkHandler.php b/typo3/sysext/filelist/Classes/LinkHandler/FileLinkHandler.php index b6ae2d4e957c..165bc08a8cc6 100644 --- a/typo3/sysext/filelist/Classes/LinkHandler/FileLinkHandler.php +++ b/typo3/sysext/filelist/Classes/LinkHandler/FileLinkHandler.php @@ -17,7 +17,9 @@ namespace TYPO3\CMS\Filelist\LinkHandler; use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Backend\View\FolderUtilityRenderer; +use TYPO3\CMS\Backend\View\RecordSearchBoxComponent; use TYPO3\CMS\Core\Resource\ResourceInterface; +use TYPO3\CMS\Core\Resource\Search\FileSearchDemand; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\MathUtility; use TYPO3\CMS\Filelist\Matcher\Matcher; @@ -60,16 +62,6 @@ class FileLinkHandler extends AbstractResourceLinkHandler { $contentHtml = ''; if ($this->selectedFolder !== null) { - $markup = []; - - // Create the filelist header bar - $markup[] = '<div class="row justify-content-between mb-2">'; - $markup[] = ' <div class="col-auto"></div>'; - $markup[] = ' <div class="col-auto">'; - $markup[] = ' ' . $this->getViewModeButton($request); - $markup[] = ' </div>'; - $markup[] = '</div>'; - // Create the filelist $this->filelist->start( $this->selectedFolder, @@ -81,6 +73,9 @@ class FileLinkHandler extends AbstractResourceLinkHandler $this->filelist->setResourceDisplayMatcher($this->resourceDisplayMatcher); $this->filelist->setResourceSelectableMatcher($this->resourceSelectableMatcher); + $searchWord = trim((string)($request->getParsedBody()['searchTerm'] ?? $request->getQueryParams()['searchTerm'] ?? '')); + $searchDemand = $searchWord !== '' ? FileSearchDemand::createForSearchTerm($searchWord)->withFolder($this->selectedFolder)->withRecursive() : null; + $resource = $this->linkParts['url']['file'] ?? null; if ($resource instanceof ResourceInterface) { $resourceSelectedMatcher = GeneralUtility::makeInstance(Matcher::class); @@ -90,9 +85,27 @@ class FileLinkHandler extends AbstractResourceLinkHandler $this->filelist->setResourceSelectedMatcher($resourceSelectedMatcher); } - $markup[] = $this->filelist->render(null, $this->view); + $markup = []; + + // Render the filelist search box + $markup[] = '<div class="mb-4">'; + $markup[] = GeneralUtility::makeInstance(RecordSearchBoxComponent::class) + ->setSearchWord($searchWord) + ->render($request, $this->filelist->createModuleUri($this->getUrlParameters([]))); + $markup[] = '</div>'; + + // Render the filelist header bar + $markup[] = '<div class="row justify-content-between mb-2">'; + $markup[] = ' <div class="col-auto"></div>'; + $markup[] = ' <div class="col-auto">'; + $markup[] = ' ' . $this->getViewModeButton($request); + $markup[] = ' </div>'; + $markup[] = '</div>'; + + // Render the filelist + $markup[] = $this->filelist->render($searchDemand, $this->view); - // Build the file upload and folder creation form + // Render the file upload and folder creation form $folderUtilityRenderer = GeneralUtility::makeInstance(FolderUtilityRenderer::class, $this); $markup[] = $folderUtilityRenderer->uploadForm($request, $this->selectedFolder); $markup[] = $folderUtilityRenderer->createFolder($request, $this->selectedFolder); diff --git a/typo3/sysext/filelist/Resources/Private/Templates/LinkHandler/File.html b/typo3/sysext/filelist/Resources/Private/Templates/LinkHandler/File.html index abd7e3bfa412..8b380fdf76e2 100644 --- a/typo3/sysext/filelist/Resources/Private/Templates/LinkHandler/File.html +++ b/typo3/sysext/filelist/Resources/Private/Templates/LinkHandler/File.html @@ -15,7 +15,7 @@ <f:section name="Content"> <f:if condition="{selectedFolder}"> - <h4 class="text-truncate"> + <h4 class="text-truncate mb-4"> <core:iconForResource resource="{selectedFolder}" /> {selectedFolder.storage.name}: {selectedFolder.identifier} </h4> diff --git a/typo3/sysext/filelist/Resources/Private/Templates/LinkHandler/Folder.html b/typo3/sysext/filelist/Resources/Private/Templates/LinkHandler/Folder.html index 3ec41c67a8a0..41bb13960af8 100644 --- a/typo3/sysext/filelist/Resources/Private/Templates/LinkHandler/Folder.html +++ b/typo3/sysext/filelist/Resources/Private/Templates/LinkHandler/Folder.html @@ -16,7 +16,7 @@ <f:section name="Content"> <f:if condition="{selectedFolder}"> - <h4 class="text-truncate"> + <h4 class="text-truncate mb-4"> <core:iconForResource resource="{selectedFolder}" /> <f:render section="LinkWrap" contentAs="linkText" arguments="{_all}"> {selectedFolder.storage.name}: {selectedFolder.identifier} -- GitLab