‪TYPO3CMS  ‪main
AbstractResourceBrowser.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\Http\Message\ServerRequestInterface;
37 
42 {
43  protected ?string ‪$expandFolder = null;
44  protected int ‪$currentPage = 1;
45  protected string ‪$moduleStorageIdentifier = 'file_list';
46 
47  protected ?‪FileList ‪$filelist = null;
48  protected ?string ‪$viewMode = null;
49  protected bool ‪$displayThumbs = true;
50 
51  protected ?‪Folder ‪$selectedFolder = null;
54 
58  protected function ‪initialize(ServerRequestInterface ‪$request): void
59  {
60  parent::initialize(‪$request);
61  $this->view = $this->backendViewFactory->create($this->‪getRequest(), ['typo3/cms-filelist']);
62  $this->view->assign('initialNavigationWidth', $this->‪getBackendUser()->uc['selector']['navigation']['width'] ?? 250);
63 
64  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/tree/file-storage-browser.js');
65  $this->pageRenderer->loadJavaScriptModule('@typo3/filelist/file-list-actions.js');
66  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/multi-record-selection.js');
67  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/global-event-handler.js');
68  }
69 
70  protected function ‪initVariables(ServerRequestInterface ‪$request): void
71  {
72  parent::initVariables(‪$request);
73 
74  $this->currentPage = (int)(‪$request->getParsedBody()['currentPage'] ?? ‪$request->getQueryParams()['currentPage'] ?? 1);
75  $this->‪expandFolder = $request->getParsedBody()['expandFolder'] ?? ‪$request->getQueryParams()['expandFolder'] ?? null;
76 
77  $this->viewMode = ‪$request->getParsedBody()['viewMode'] ?? ‪$request->getQueryParams()['viewMode'] ?? null;
78  if ($this->viewMode !== null) {
79  $this->‪getBackendUser()->pushModuleData(
80  $this->moduleStorageIdentifier,
81  array_merge($this->‪getBackendUser()->getModuleData($this->moduleStorageIdentifier) ?? [], ['viewMode' => $this->viewMode])
82  );
83  } else {
84  $this->viewMode = $this->‪getBackendUser()->getModuleData($this->moduleStorageIdentifier)['viewMode'] ?? ‪ViewMode::TILES->value;
85  }
86 
87  ‪$displayThumbs = ‪$request->getParsedBody()['displayThumbs'] ?? ‪$request->getQueryParams()['displayThumbs'] ?? null;
88  if (‪$displayThumbs !== null) {
89  $this->displayThumbs = (bool)‪$displayThumbs;
90  $this->‪getBackendUser()->pushModuleData(
91  $this->moduleStorageIdentifier,
92  array_merge($this->‪getBackendUser()->getModuleData($this->moduleStorageIdentifier) ?? [], ['displayThumbs' => $this->displayThumbs])
93  );
94  } else {
95  $this->displayThumbs = (bool)($this->‪getBackendUser()->getModuleData($this->moduleStorageIdentifier)['displayThumbs'] ?? true);
96  }
97 
98  $this->filelist = GeneralUtility::makeInstance(FileList::class, $this->‪getRequest());
99  $this->filelist->viewMode = ViewMode::tryFrom($this->viewMode) ?? ‪ViewMode::TILES;
100  $this->filelist->thumbs = (‪$GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails'] ?? false) && $this->displayThumbs;
101  }
102 
103  protected function ‪initSelectedFolder(): void
104  {
105  $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
106 
107  // Select folder
108  if ($this->‪expandFolder) {
109  try {
110  $this->selectedFolder = $resourceFactory->getFolderObjectFromCombinedIdentifier($this->‪expandFolder);
111  } catch (‪FolderDoesNotExistException $e) {
112  }
113  }
114 
115  if (!$this->selectedFolder) {
116  $this->selectedFolder = $resourceFactory->getDefaultStorage()?->getRootLevelFolder();
117  }
118  }
119 
121  {
122  $viewModeItems = [];
123  $viewModeItems[] = GeneralUtility::makeInstance(DropDownRadio::class)
124  ->setActive($this->viewMode === ‪ViewMode::TILES->value)
125  ->setHref($this->‪createUri(['viewMode' => ‪ViewMode::TILES->value]))
126  ->setLabel($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.view.tiles'))
127  ->setIcon($this->iconFactory->getIcon('actions-viewmode-tiles'));
128  $viewModeItems[] = GeneralUtility::makeInstance(DropDownRadio::class)
129  ->setActive($this->viewMode === ‪ViewMode::LIST->value)
130  ->setHref($this->‪createUri(['viewMode' => ‪ViewMode::LIST->value]))
131  ->setLabel($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.view.list'))
132  ->setIcon($this->iconFactory->getIcon('actions-viewmode-list'));
133  if (!($this->‪getBackendUser()->getTSConfig()['options.']['noThumbsInEB'] ?? false)) {
134  $viewModeItems[] = GeneralUtility::makeInstance(DropDownDivider::class);
135  $viewModeItems[] = GeneralUtility::makeInstance(DropDownToggle::class)
136  ->setActive($this->displayThumbs)
137  ->setHref($this->‪createUri(['displayThumbs' => $this->displayThumbs ? 0 : 1]))
138  ->setLabel($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.view.showThumbnails'))
139  ->setIcon($this->iconFactory->getIcon('actions-image'));
140  }
141 
142  $viewModeButton = GeneralUtility::makeInstance(DropDownButton::class)
143  ->setLabel($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.view'));
144  foreach ($viewModeItems as $viewModeItem) {
146  $viewModeButton->addItem($viewModeItem);
147  }
148 
149  return $viewModeButton;
150  }
151 
156  public function ‪getUrlParameters(array $values): array
157  {
158  $values = array_replace_recursive([
159  'mode' => $this->identifier,
160  'expandFolder' => $values['identifier'] ?? $this->‪expandFolder,
161  'bparams' => $this->bparams,
162  ], $values);
163 
164  return array_filter($values, static function ($value) {
165  return $value !== null && trim((string)$value) !== '';
166  });
167  }
168 
169  protected function ‪createUri(array $parameters = []): string
170  {
171  $parameters = $this->‪getUrlParameters($parameters);
172  return (string)$this->uriBuilder->buildUriFromRequest($this->‪getRequest(), $parameters);
173  }
174 
181  public function ‪processSessionData($data): array
182  {
183  if ($this->‪expandFolder !== null) {
184  $data['expandFolder'] = ‪$this->expandFolder;
185  ‪$store = true;
186  } else {
187  $this->‪expandFolder = $data['expandFolder'] ?? null;
188  ‪$store = false;
189  }
190  return [$data, ‪$store];
191  }
192 }
‪TYPO3\CMS\Backend\ElementBrowser\ElementBrowserInterface
Definition: ElementBrowserInterface.php:28
‪TYPO3\CMS\Scheduler\LIST
‪@ LIST
Definition: SchedulerManagementAction.php:28
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$viewMode
‪string $viewMode
Definition: AbstractResourceBrowser.php:48
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\initSelectedFolder
‪initSelectedFolder()
Definition: AbstractResourceBrowser.php:103
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\expandFolder
‪array< int, function processSessionData( $data):array { if( $this->expandFolder !==null) { $data[ 'expandFolder']=$this-> expandFolder
Definition: AbstractResourceBrowser.php:184
‪TYPO3\CMS\Backend\Template\Components\Buttons\DropDownButton
Definition: DropDownButton.php:48
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\initialize
‪initialize(ServerRequestInterface $request)
Definition: AbstractResourceBrowser.php:58
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$moduleStorageIdentifier
‪string $moduleStorageIdentifier
Definition: AbstractResourceBrowser.php:45
‪TYPO3\CMS\Filelist\ElementBrowser
Definition: AbstractResourceBrowser.php:18
‪TYPO3\CMS\Filelist\Matcher\Matcher
Definition: Matcher.php:24
‪TYPO3\CMS\Backend\ElementBrowser\AbstractElementBrowser
Definition: AbstractElementBrowser.php:39
‪TYPO3\CMS\Backend\Template\Components\Buttons\DropDown\DropDownToggle
Definition: DropDownToggle.php:39
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\createUri
‪createUri(array $parameters=[])
Definition: AbstractResourceBrowser.php:169
‪TYPO3\CMS\Backend\Template\Components\Buttons\DropDown\DropDownDivider
Definition: DropDownDivider.php:27
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$expandFolder
‪string $expandFolder
Definition: AbstractResourceBrowser.php:43
‪TYPO3\CMS\Filelist\FileList
Definition: FileList.php:74
‪TYPO3\CMS\Backend\Template\Components\Buttons\DropDown\DropDownRadio
Definition: DropDownRadio.php:54
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$displayThumbs
‪bool $displayThumbs
Definition: AbstractResourceBrowser.php:49
‪TYPO3\CMS\Backend\Template\Components\Buttons\DropDown\DropDownItemInterface
Definition: DropDownItemInterface.php:19
‪TYPO3\CMS\Core\Resource\Folder
Definition: Folder.php:38
‪TYPO3\CMS\Core\Resource\ResourceFactory
Definition: ResourceFactory.php:42
‪TYPO3\CMS\Core\Resource\Exception\FolderDoesNotExistException
Definition: FolderDoesNotExistException.php:21
‪TYPO3\CMS\Backend\ElementBrowser\AbstractElementBrowser\getLanguageService
‪getLanguageService()
Definition: AbstractElementBrowser.php:156
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\initVariables
‪initVariables(ServerRequestInterface $request)
Definition: AbstractResourceBrowser.php:70
‪TYPO3\CMS\Backend\ElementBrowser\ElementBrowserInterface\processSessionData
‪array[] processSessionData($data)
‪TYPO3\CMS\Backend\ElementBrowser\AbstractElementBrowser\getRequest
‪getRequest()
Definition: AbstractElementBrowser.php:151
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$selectedFolder
‪Folder $selectedFolder
Definition: AbstractResourceBrowser.php:51
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\getViewModeButton
‪getViewModeButton()
Definition: AbstractResourceBrowser.php:120
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$store
‪$store
Definition: AbstractResourceBrowser.php:185
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$resourceDisplayMatcher
‪Matcher $resourceDisplayMatcher
Definition: AbstractResourceBrowser.php:52
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$resourceSelectableMatcher
‪Matcher $resourceSelectableMatcher
Definition: AbstractResourceBrowser.php:53
‪TYPO3\CMS\Filelist\Type\TILES
‪@ TILES
Definition: ViewMode.php:26
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\getUrlParameters
‪string[] getUrlParameters(array $values)
Definition: AbstractResourceBrowser.php:156
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$filelist
‪FileList $filelist
Definition: AbstractResourceBrowser.php:47
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Filelist\Type\ViewMode
‪ViewMode
Definition: ViewMode.php:24
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser\$currentPage
‪int $currentPage
Definition: AbstractResourceBrowser.php:44
‪TYPO3\CMS\Filelist\ElementBrowser\AbstractResourceBrowser
Definition: AbstractResourceBrowser.php:42
‪TYPO3\CMS\Backend\ElementBrowser\AbstractElementBrowser\$request
‪ServerRequestInterface $request
Definition: AbstractElementBrowser.php:65
‪TYPO3\CMS\Backend\ElementBrowser\AbstractElementBrowser\getBackendUser
‪getBackendUser()
Definition: AbstractElementBrowser.php:161
‪TYPO3\CMS\Backend\Template\Components\Buttons\ButtonInterface
Definition: ButtonInterface.php:22