2 namespace TYPO3\CMS\Filelist\Controller;
168 public function initializeObject()
183 if ($combinedIdentifier) {
186 $storage = $resourceFactory->getStorageObjectFromCombinedIdentifier($combinedIdentifier);
187 $identifier = substr($combinedIdentifier, strpos($combinedIdentifier,
':') + 1);
188 if (!$storage->hasFolder($identifier)) {
189 $identifier = $storage->getFolderIdentifierFromFileIdentifier($identifier);
192 $this->folderObject = $resourceFactory->getFolderObjectFromCombinedIdentifier($storage->getUid() .
':' . $identifier);
194 if ($storage->getUid() === 0) {
195 throw new Exception\InsufficientFolderAccessPermissionsException(
'You are not allowed to access files outside your storages',
199 if ($this->folderObject && $storage->isProcessingFolder($this->folderObject)) {
200 $this->folderObject = $storage->getRootLevelFolder();
205 $fileStorage = reset($fileStorages);
207 $this->folderObject = $fileStorage->getRootLevelFolder();
209 throw new \RuntimeException(
'Could not find any folder to be displayed.', 1349276894);
213 if ($this->folderObject && !$this->folderObject->getStorage()->isWithinFileMountBoundaries($this->folderObject)) {
214 throw new \RuntimeException(
'Folder not accessible.', 1430409089);
216 }
catch (Exception\InsufficientFolderAccessPermissionsException $permissionException) {
217 $this->folderObject = null;
221 htmlspecialchars($this->
id)
226 }
catch (Exception $fileException) {
228 $this->folderObject = null;
231 $fileStorage = reset($fileStorages);
232 if ($fileStorage instanceof \TYPO3\CMS\Core\Resource\ResourceStorage) {
233 $this->folderObject = $fileStorage->getRootLevelFolder();
234 if (!$fileStorage->isWithinFileMountBoundaries($this->folderObject)) {
235 $this->folderObject = null;
241 htmlspecialchars($this->
id)
246 }
catch (\RuntimeException $e) {
247 $this->folderObject = null;
249 $e->getMessage() .
' (' . $e->getCode() .
')',
255 if ($this->folderObject && !$this->folderObject->getStorage()->checkFolderActionPermission(
'read',
258 $this->folderObject = null;
276 $this->MOD_MENU = array(
279 'displayThumbs' =>
'',
281 'bigControlPanel' =>
''
300 parent::initializeView($view);
301 $pageRenderer = $this->view->getModuleTemplate()->getPageRenderer();
302 $pageRenderer->loadRequireJsModule(
'TYPO3/CMS/Filelist/FileListLocalisation');
303 $pageRenderer->loadRequireJsModule(
'TYPO3/CMS/Filelist/FileSearch');
304 $pageRenderer->loadRequireJsModule(
'TYPO3/CMS/Backend/ClickMenu');
305 $this->registerDocHeaderButtons();
316 if ($backendUser->getTSConfigVal(
'options.file_list.enableDisplayBigControlPanel') ===
'activated') {
317 $this->MOD_SETTINGS[
'bigControlPanel'] =
true;
318 }
elseif ($backendUser->getTSConfigVal(
'options.file_list.enableDisplayBigControlPanel') ===
'deactivated') {
319 $this->MOD_SETTINGS[
'bigControlPanel'] =
false;
322 if ($backendUser->getTSConfigVal(
'options.file_list.enableDisplayThumbnails') ===
'activated') {
323 $this->MOD_SETTINGS[
'displayThumbs'] =
true;
324 }
elseif ($backendUser->getTSConfigVal(
'options.file_list.enableDisplayThumbnails') ===
'deactivated') {
325 $this->MOD_SETTINGS[
'displayThumbs'] =
false;
328 if ($backendUser->getTSConfigVal(
'options.file_list.enableClipBoard') ===
'activated') {
329 $this->MOD_SETTINGS[
'clipBoard'] =
true;
330 }
elseif ($backendUser->getTSConfigVal(
'options.file_list.enableClipBoard') ===
'deactivated') {
331 $this->MOD_SETTINGS[
'clipBoard'] =
false;
334 if (!isset($this->MOD_SETTINGS[
'displayThumbs'])) {
335 $this->MOD_SETTINGS[
'displayThumbs'] = $backendUser->uc[
'thumbnailsByDefault'];
337 if (!isset($this->MOD_SETTINGS[
'sort'])) {
339 $this->MOD_SETTINGS[
'sort'] =
'file';
340 $this->MOD_SETTINGS[
'reverse'] = 0;
347 public function indexAction()
349 $pageRenderer = $this->view->getModuleTemplate()->getPageRenderer();
353 if ($this->folderObject) {
356 $this->filelist->thumbs = $this->MOD_SETTINGS[
'displayThumbs'];
359 $this->filelist->clipObj->fileMode = 1;
360 $this->filelist->clipObj->initializeClipboard();
362 if ($this->cmd ==
'setCB') {
366 if (!$this->MOD_SETTINGS[
'clipBoard']) {
367 $CB[
'setP'] =
'normal';
369 $this->filelist->clipObj->setCmd($CB);
370 $this->filelist->clipObj->cleanCurrent();
372 $this->filelist->clipObj->endClipboard();
374 if ($this->cmd ==
'delete') {
376 if (!empty($items)) {
379 foreach ($items as $v) {
380 $FILE[
'delete'][] = array(
'data' => $v);
385 $fileProcessor->init(array(),
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'fileExtensions']);
386 $fileProcessor->setActionPermissions();
387 $fileProcessor->setExistingFilesConflictMode($this->overwriteExistingFiles);
388 $fileProcessor->start($FILE);
389 $fileProcessor->processData();
390 $fileProcessor->pushErrorMessagesToFlashMessageQueue();
395 $this->filelist->start($this->folderObject, $this->pointer, $this->MOD_SETTINGS[
'sort'],
396 $this->MOD_SETTINGS[
'reverse'], $this->MOD_SETTINGS[
'clipBoard'],
397 $this->MOD_SETTINGS[
'bigControlPanel']);
399 $this->filelist->generateList();
401 $this->view->getModuleTemplate()->addJavaScriptCode(
403 'if (top.fsMod) top.fsMod.recentIds["file"] = "' . rawurlencode($this->
id) .
'";' . $this->filelist->CBfunctions() .
'
404 function jumpToUrl(URL) {
405 window.location.href = URL;
411 if ($this->folderObject->getStorage()->checkUserActionPermission(
'add',
'File')
412 && $this->folderObject->checkActionPermission(
'write')
414 $pageRenderer->loadRequireJsModule(
'TYPO3/CMS/Backend/DragUploader');
415 $pageRenderer->addInlineLanguageLabelFile(
422 $this->registerButtons();
425 '_additional_info' => $this->filelist->getFolderInfo(),
426 'combined_identifier' => $this->folderObject->getCombinedIdentifier(),
428 $this->view->getModuleTemplate()->getDocHeaderComponent()->setMetaInformation($pageRecord);
431 $this->view->assign(
'listHtml', $this->filelist->HTMLcode);
432 $this->view->assign(
'checkboxes', [
433 'bigControlPanel' => [
434 'enabled' => $this->
getBackendUser()->getTSConfigVal(
'options.file_list.enableDisplayBigControlPanel') ===
'selectable',
437 $this->MOD_SETTINGS[
'bigControlPanel'],
'',
'',
'id="bigControlPanel"'),
440 'enabled' => $this->
getBackendUser()->getTSConfigVal(
'options.file_list.enableDisplayThumbnails') ===
'selectable',
443 $this->MOD_SETTINGS[
'displayThumbs'],
'',
'',
'id="checkDisplayThumbs"'),
445 'enableClipBoard' => [
446 'enabled' => $this->
getBackendUser()->getTSConfigVal(
'options.file_list.enableClipBoard') ===
'selectable',
449 $this->MOD_SETTINGS[
'clipBoard'],
'',
'',
'id="checkClipBoard"'),
452 $this->view->assign(
'showClipBoard', (
bool)$this->MOD_SETTINGS[
'clipBoard']);
453 $this->view->assign(
'clipBoardHtml', $this->filelist->clipObj->printClipboard());
454 $this->view->assign(
'folderIdentifier', $this->folderObject->getCombinedIdentifier());
455 $this->view->assign(
'fileDenyPattern',
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'fileDenyPattern']);
458 $this->
forward(
'missingFolder');
467 if ($this->errorMessage) {
469 $this->controllerContext->getFlashMessageQueue(
'core.template.flashMessages')->addMessage($this->errorMessage);
480 if (empty($searchWord)) {
485 $files = $this->fileRepository->searchByName($this->folderObject, $searchWord);
488 $this->controllerContext->getFlashMessageQueue(
'core.template.flashMessages')->addMessage(
493 foreach ($files as $file) {
494 $fileFacades[] = new \TYPO3\CMS\Filelist\FileFacade($file);
498 $this->view->assign(
'searchWord', $searchWord);
499 $this->view->assign(
'files', $fileFacades);
500 $this->view->assign(
'settings', [
513 $name = $this->folderObject->getName();
516 if ($this->folderObject->getIdentifier() ===
'/') {
517 $name = $this->folderObject->getStorage()->getName();
520 $name = key(ListUtility::resolveSpecialFolderNames(
521 array($name => $this->folderObject)
533 protected function registerDocHeaderButtons()
536 $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar();
539 $cshButton = $buttonBar->makeHelpButton()
540 ->setModuleName(
'xMOD_csh_corebe')
541 ->setFieldName(
'filelist_module');
542 $buttonBar->addButton($cshButton);
550 protected function registerButtons()
553 $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar();
556 $iconFactory = $this->view->getModuleTemplate()->getIconFactory();
562 $refreshButton = $buttonBar->makeLinkButton()
564 'target' => rawurlencode($this->folderObject->getCombinedIdentifier()),
565 'imagemode' => $this->filelist->thumbs
574 $currentStorage = $this->folderObject->getStorage();
575 $parentFolder = $this->folderObject->getParentFolder();
576 if ($parentFolder->getIdentifier() !== $this->folderObject->getIdentifier() && $currentStorage->isWithinFileMountBoundaries($parentFolder)) {
577 $levelUpButton = $buttonBar->makeLinkButton()
578 ->setHref(BackendUtility::getModuleUrl(
'file_FilelistList',
579 [
'id' => $parentFolder->getCombinedIdentifier()]))
580 ->setOnClick(
'top.document.getElementsByName("navigation")[0].contentWindow.Tree.highlightActiveItem("file","folder' .
GeneralUtility::md5int($parentFolder->getCombinedIdentifier()) .
'_"+top.fsMod.currentBank)')
586 }
catch (\Exception $e) {
591 $shortCutButton = $buttonBar->makeShortcutButton()->setModuleName(
'file_FilelistList');
596 if ($this->folderObject && $this->folderObject->getStorage()->checkUserActionPermission(
'add',
597 'File') && $this->folderObject->checkActionPermission(
'write')
599 $uploadButton = $buttonBar->makeLinkButton()
600 ->setHref(BackendUtility::getModuleUrl(
603 'target' => $this->folderObject->getCombinedIdentifier(),
604 'returnUrl' => $this->filelist->listURL(),
607 ->setClasses(
't3js-drag-uploader-trigger')
615 if ($this->folderObject && $this->folderObject->checkActionPermission(
'write')
616 && ($this->folderObject->getStorage()->checkUserActionPermission(
'add',
617 'File') || $this->folderObject->checkActionPermission(
'add'))
619 $newButton = $buttonBar->makeLinkButton()
620 ->setHref(BackendUtility::getModuleUrl(
623 'target' => $this->folderObject->getCombinedIdentifier(),
624 'returnUrl' => $this->filelist->listURL(),
634 if ($this->filelist->clipObj instanceof Clipboard && $this->folderObject->checkActionPermission(
'write')) {
635 $elFromTable = $this->filelist->clipObj->elFromTable(
'_FILE');
636 if (!empty($elFromTable)) {
637 $addPasteButton =
true;
638 $elToConfirm = array();
639 foreach ($elFromTable as $key => $element) {
640 $clipBoardElement = $resourceFactory->retrieveFileOrFolderObject($element);
641 if ($clipBoardElement instanceof Folder && $clipBoardElement->getStorage()->isWithinFolder($clipBoardElement,
644 $addPasteButton =
false;
646 $elToConfirm[$key] = $clipBoardElement->getName();
648 if ($addPasteButton) {
649 $pasteButton = $buttonBar->makeLinkButton()
650 ->setHref($this->filelist->clipObj->pasteUrl(
'_FILE',
651 $this->folderObject->getCombinedIdentifier()))
652 ->setOnClick(
'return ' . htmlspecialchars($this->filelist->clipObj->confirmMsg(
'_FILE',
653 $this->folderObject->getReadablePath(),
'into', $elToConfirm)))
655 ->setIcon($iconFactory->getIcon(
'actions-document-paste-after',
Icon::SIZE_SMALL));