From 1072c56a57518ae83cf48ceb343b48493ac7faf2 Mon Sep 17 00:00:00 2001 From: Benni Mack Date: Tue, 7 Sep 2021 20:29:34 +0200 Subject: [PATCH] [BUGFIX] Keep last opened folder in file link handler This change uses the existing session information (moduleData[browse_links.php][expandFolder]) to read and write the last opened folder not just for the File Browser (as currently used) but also the file link handler. Resolves: #73195 Releases: master Change-Id: I7957325599407333486898d5538247d452c7af18 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/70959 Tested-by: core-ci Tested-by: Oliver Bartsch Tested-by: Georg Ringer Reviewed-by: Oliver Bartsch Reviewed-by: Wouter Wolters Reviewed-by: Susanne Moog Reviewed-by: Rick Septer Reviewed-by: Georg Ringer --- .../Classes/LinkHandler/FileLinkHandler.php | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/typo3/sysext/recordlist/Classes/LinkHandler/FileLinkHandler.php b/typo3/sysext/recordlist/Classes/LinkHandler/FileLinkHandler.php index 077b454dc712..0525863f117e 100644 --- a/typo3/sysext/recordlist/Classes/LinkHandler/FileLinkHandler.php +++ b/typo3/sysext/recordlist/Classes/LinkHandler/FileLinkHandler.php @@ -105,13 +105,19 @@ public function render(ServerRequestInterface $request) $this->view->assign('treeActions', ($this->mode === 'folder') ? ['link'] : []); $this->expandFolder = $request->getQueryParams()['expandFolder'] ?? null; - if (!empty($this->linkParts) && !isset($this->expandFolder)) { - $fileOrFolder = $this->linkParts['url'][$this->mode]; - if ($fileOrFolder instanceof File) { - $fileOrFolder = $fileOrFolder->getParentFolder(); - } - if ($fileOrFolder instanceof Folder) { - $this->expandFolder = $fileOrFolder->getCombinedIdentifier(); + if (!isset($this->expandFolder)) { + if (!empty($this->linkParts)) { + $fileOrFolder = $this->linkParts['url'][$this->mode]; + if ($fileOrFolder instanceof File) { + $fileOrFolder = $fileOrFolder->getParentFolder(); + } + if ($fileOrFolder instanceof Folder) { + $this->expandFolder = $fileOrFolder->getCombinedIdentifier(); + } + } else { + // Look up in the user's session which folder was opened the last time + $moduleSessionData = $this->getBackendUser()->getModuleData('browse_links.php', 'ses'); + $this->expandFolder = $moduleSessionData['expandFolder'] ?? null; } } @@ -120,6 +126,14 @@ public function render(ServerRequestInterface $request) // Build the file upload and folder creation form if ($selectedFolder) { + + // If a folder is found, store it in the session to continue where the editor left off the last time + if ($selectedFolder->checkActionPermission('read')) { + $moduleSessionData = $this->getBackendUser()->getModuleData('browse_links.php', 'ses') ?: []; + $moduleSessionData['expandFolder'] = $selectedFolder->getCombinedIdentifier(); + $this->getBackendUser()->pushModuleData('browse_links.php', $moduleSessionData); + } + $folderUtilityRenderer = GeneralUtility::makeInstance(FolderUtilityRenderer::class, $this); $uploadForm = $this->mode === 'file' ? $folderUtilityRenderer->uploadForm($selectedFolder, []) : ''; $createFolder = $folderUtilityRenderer->createFolder($selectedFolder);