TYPO3 CMS  TYPO3_7-6
FileListController.php
Go to the documentation of this file.
1 <?php
3 
4 /*
5  * This file is part of the TYPO3 CMS project.
6  *
7  * It is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU General Public License, either version 2
9  * of the License, or any later version.
10  *
11  * For the full copyright and license information, please read the
12  * LICENSE.txt file that was distributed with this source code.
13  *
14  * The TYPO3 project - inspiring people to share!
15  */
16 
39 
44 {
51  public $MCONF = [];
52 
56  public $MOD_MENU = [];
57 
61  public $MOD_SETTINGS = [];
62 
68  public $doc;
69 
75  public $id;
76 
80  protected $folderObject;
81 
85  protected $errorMessage;
86 
92  public $pointer;
93 
98  public $table;
99 
105  public $imagemode;
106 
110  public $cmd;
111 
119 
125  public $filelist = null;
126 
132  protected $moduleName = 'file_list';
133 
137  protected $fileRepository;
138 
142  protected $view;
143 
149  protected $defaultViewObjectName = BackendTemplateView::class;
150 
154  public function injectFileRepository(\TYPO3\CMS\Core\Resource\FileRepository $fileRepository)
155  {
156  $this->fileRepository = $fileRepository;
157  }
158 
167  public function initializeObject()
168  {
169  $this->doc = GeneralUtility::makeInstance(DocumentTemplate::class);
170  $this->getLanguageService()->includeLLFile('EXT:lang/locallang_mod_file_list.xlf');
171  $this->getLanguageService()->includeLLFile('EXT:lang/locallang_misc.xlf');
172 
173  // Setting GPvars:
174  $this->id = ($combinedIdentifier = GeneralUtility::_GP('id'));
175  $this->pointer = GeneralUtility::_GP('pointer');
176  $this->table = GeneralUtility::_GP('table');
177  $this->imagemode = GeneralUtility::_GP('imagemode');
178  $this->cmd = GeneralUtility::_GP('cmd');
179  $this->overwriteExistingFiles = DuplicationBehavior::cast(GeneralUtility::_GP('overwriteExistingFiles'));
180 
181  try {
182  if ($combinedIdentifier) {
184  $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
185  $storage = $resourceFactory->getStorageObjectFromCombinedIdentifier($combinedIdentifier);
186  $identifier = substr($combinedIdentifier, strpos($combinedIdentifier, ':') + 1);
187  if (!$storage->hasFolder($identifier)) {
188  $identifier = $storage->getFolderIdentifierFromFileIdentifier($identifier);
189  }
190 
191  $this->folderObject = $resourceFactory->getFolderObjectFromCombinedIdentifier($storage->getUid() . ':' . $identifier);
192  // Disallow access to fallback storage 0
193  if ($storage->getUid() === 0) {
194  throw new Exception\InsufficientFolderAccessPermissionsException('You are not allowed to access files outside your storages',
195  1434539815);
196  }
197  // Disallow the rendering of the processing folder (e.g. could be called manually)
198  if ($this->folderObject && $storage->isProcessingFolder($this->folderObject)) {
199  $this->folderObject = $storage->getRootLevelFolder();
200  }
201  } else {
202  // Take the first object of the first storage
203  $fileStorages = $this->getBackendUser()->getFileStorages();
204  $fileStorage = reset($fileStorages);
205  if ($fileStorage) {
206  $this->folderObject = $fileStorage->getRootLevelFolder();
207  } else {
208  throw new \RuntimeException('Could not find any folder to be displayed.', 1349276894);
209  }
210  }
211 
212  if ($this->folderObject && !$this->folderObject->getStorage()->isWithinFileMountBoundaries($this->folderObject)) {
213  throw new \RuntimeException('Folder not accessible.', 1430409089);
214  }
215  } catch (Exception\InsufficientFolderAccessPermissionsException $permissionException) {
216  $this->folderObject = null;
217  $this->errorMessage = GeneralUtility::makeInstance(FlashMessage::class,
218  sprintf(
219  $this->getLanguageService()->getLL('missingFolderPermissionsMessage', true),
220  htmlspecialchars($this->id)
221  ),
222  $this->getLanguageService()->getLL('missingFolderPermissionsTitle', true),
224  );
225  } catch (Exception $fileException) {
226  // Set folder object to null and throw a message later on
227  $this->folderObject = null;
228  // Take the first object of the first storage
229  $fileStorages = $this->getBackendUser()->getFileStorages();
230  $fileStorage = reset($fileStorages);
231  if ($fileStorage instanceof \TYPO3\CMS\Core\Resource\ResourceStorage) {
232  $this->folderObject = $fileStorage->getRootLevelFolder();
233  if (!$fileStorage->isWithinFileMountBoundaries($this->folderObject)) {
234  $this->folderObject = null;
235  }
236  }
237  $this->errorMessage = GeneralUtility::makeInstance(FlashMessage::class,
238  sprintf(
239  $this->getLanguageService()->getLL('folderNotFoundMessage', true),
240  htmlspecialchars($this->id)
241  ),
242  $this->getLanguageService()->getLL('folderNotFoundTitle', true),
244  );
245  } catch (\RuntimeException $e) {
246  $this->folderObject = null;
247  $this->errorMessage = GeneralUtility::makeInstance(FlashMessage::class,
248  $e->getMessage() . ' (' . $e->getCode() . ')',
249  $this->getLanguageService()->getLL('folderNotFoundTitle', true),
251  );
252  }
253 
254  if ($this->folderObject && !$this->folderObject->getStorage()->checkFolderActionPermission('read',
255  $this->folderObject)
256  ) {
257  $this->folderObject = null;
258  }
259 
260  // Configure the "menu" - which is used internally to save the values of sorting, displayThumbs etc.
261  $this->menuConfig();
262  }
263 
269  public function menuConfig()
270  {
271  // MENU-ITEMS:
272  // If array, then it's a selector box menu
273  // If empty string it's just a variable, that will be saved.
274  // Values NOT in this array will not be saved in the settings-array for the module.
275  $this->MOD_MENU = [
276  'sort' => '',
277  'reverse' => '',
278  'displayThumbs' => '',
279  'clipBoard' => '',
280  'bigControlPanel' => ''
281  ];
282  // CLEANSE SETTINGS
283  $this->MOD_SETTINGS = BackendUtility::getModuleData(
284  $this->MOD_MENU,
285  GeneralUtility::_GP('SET'),
286  $this->moduleName
287  );
288  }
289 
296  public function initializeView(ViewInterface $view)
297  {
299  parent::initializeView($view);
300  $pageRenderer = $this->view->getModuleTemplate()->getPageRenderer();
301  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileListLocalisation');
302  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileSearch');
303  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/ClickMenu');
304  $this->registerDocHeaderButtons();
305  }
306 
310  public function initializeIndexAction()
311  {
312  // Apply predefined values for hidden checkboxes
313  // Set predefined value for DisplayBigControlPanel:
314  $backendUser = $this->getBackendUser();
315  if ($backendUser->getTSConfigVal('options.file_list.enableDisplayBigControlPanel') === 'activated') {
316  $this->MOD_SETTINGS['bigControlPanel'] = true;
317  } elseif ($backendUser->getTSConfigVal('options.file_list.enableDisplayBigControlPanel') === 'deactivated') {
318  $this->MOD_SETTINGS['bigControlPanel'] = false;
319  }
320  // Set predefined value for DisplayThumbnails:
321  if ($backendUser->getTSConfigVal('options.file_list.enableDisplayThumbnails') === 'activated') {
322  $this->MOD_SETTINGS['displayThumbs'] = true;
323  } elseif ($backendUser->getTSConfigVal('options.file_list.enableDisplayThumbnails') === 'deactivated') {
324  $this->MOD_SETTINGS['displayThumbs'] = false;
325  }
326  // Set predefined value for Clipboard:
327  if ($backendUser->getTSConfigVal('options.file_list.enableClipBoard') === 'activated') {
328  $this->MOD_SETTINGS['clipBoard'] = true;
329  } elseif ($backendUser->getTSConfigVal('options.file_list.enableClipBoard') === 'deactivated') {
330  $this->MOD_SETTINGS['clipBoard'] = false;
331  }
332  // If user never opened the list module, set the value for displayThumbs
333  if (!isset($this->MOD_SETTINGS['displayThumbs'])) {
334  $this->MOD_SETTINGS['displayThumbs'] = $backendUser->uc['thumbnailsByDefault'];
335  }
336  if (!isset($this->MOD_SETTINGS['sort'])) {
337  // Set default sorting
338  $this->MOD_SETTINGS['sort'] = 'file';
339  $this->MOD_SETTINGS['reverse'] = 0;
340  }
341  }
342 
346  public function indexAction()
347  {
348  $pageRenderer = $this->view->getModuleTemplate()->getPageRenderer();
349  $pageRenderer->setTitle($this->getLanguageService()->getLL('files'));
350 
351  // There there was access to this file path, continue, make the list
352  if ($this->folderObject) {
353  // Create fileListing object
354  $this->filelist = GeneralUtility::makeInstance(FileList::class, $this);
355  $this->filelist->thumbs = $GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails'] && $this->MOD_SETTINGS['displayThumbs'];
356  // Create clipboard object and initialize that
357  $this->filelist->clipObj = GeneralUtility::makeInstance(Clipboard::class);
358  $this->filelist->clipObj->fileMode = 1;
359  $this->filelist->clipObj->initializeClipboard();
360  $CB = GeneralUtility::_GET('CB');
361  if ($this->cmd == 'setCB') {
362  $CB['el'] = $this->filelist->clipObj->cleanUpCBC(array_merge(GeneralUtility::_POST('CBH'),
363  (array)GeneralUtility::_POST('CBC')), '_FILE');
364  }
365  if (!$this->MOD_SETTINGS['clipBoard']) {
366  $CB['setP'] = 'normal';
367  }
368  $this->filelist->clipObj->setCmd($CB);
369  $this->filelist->clipObj->cleanCurrent();
370  // Saves
371  $this->filelist->clipObj->endClipboard();
372  // If the "cmd" was to delete files from the list (clipboard thing), do that:
373  if ($this->cmd == 'delete') {
374  $items = $this->filelist->clipObj->cleanUpCBC(GeneralUtility::_POST('CBC'), '_FILE', 1);
375  if (!empty($items)) {
376  // Make command array:
377  $FILE = [];
378  foreach ($items as $v) {
379  $FILE['delete'][] = ['data' => $v];
380  }
381  // Init file processing object for deleting and pass the cmd array.
383  $fileProcessor = GeneralUtility::makeInstance(ExtendedFileUtility::class);
384  $fileProcessor->init([], $GLOBALS['TYPO3_CONF_VARS']['BE']['fileExtensions']);
385  $fileProcessor->setActionPermissions();
386  $fileProcessor->setExistingFilesConflictMode($this->overwriteExistingFiles);
387  $fileProcessor->start($FILE);
388  $fileProcessor->processData();
389  }
390  }
391  // Start up filelisting object, include settings.
392  $this->pointer = MathUtility::forceIntegerInRange($this->pointer, 0, 100000);
393  $this->filelist->start($this->folderObject, $this->pointer, $this->MOD_SETTINGS['sort'],
394  $this->MOD_SETTINGS['reverse'], $this->MOD_SETTINGS['clipBoard'],
395  $this->MOD_SETTINGS['bigControlPanel']);
396  // Generate the list
397  $this->filelist->generateList();
398  // Set top JavaScript:
399  $this->view->getModuleTemplate()->addJavaScriptCode(
400  'FileListIndex',
401  'if (top.fsMod) top.fsMod.recentIds["file"] = "' . rawurlencode($this->id) . '";' . $this->filelist->CBfunctions() . '
402  function jumpToUrl(URL) {
403  window.location.href = URL;
404  return false;
405  }
406  ');
407  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileDelete');
408  $pageRenderer->addInlineLanguageLabelFile(
409  ExtensionManagementUtility::extPath('lang') . 'locallang_alt_doc.xlf',
410  'buttons'
411  );
412 
413  // Include DragUploader only if we have write access
414  if ($this->folderObject->getStorage()->checkUserActionPermission('add', 'File')
415  && $this->folderObject->checkActionPermission('write')
416  ) {
417  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/DragUploader');
418  $pageRenderer->addInlineLanguageLabelFile(
419  ExtensionManagementUtility::extPath('lang') . 'locallang_core.xlf',
420  'file_upload'
421  );
422  $pageRenderer->addInlineLanguageLabelArray([
423  'permissions.read' => $this->getLanguageService()->getLL('read'),
424  'permissions.write' => $this->getLanguageService()->getLL('write'),
425  ]);
426  }
427 
428  // Setting up the buttons
429  $this->registerButtons();
430 
431  $pageRecord = [
432  '_additional_info' => $this->filelist->getFolderInfo(),
433  'combined_identifier' => $this->folderObject->getCombinedIdentifier(),
434  ];
435  $this->view->getModuleTemplate()->getDocHeaderComponent()->setMetaInformation($pageRecord);
436 
437  $this->view->assign('headline', $this->getModuleHeadline());
438  $this->view->assign('listHtml', $this->filelist->HTMLcode);
439 
440  $this->view->assign('checkboxes', [
441  'bigControlPanel' => [
442  'enabled' => $this->getBackendUser()->getTSConfigVal('options.file_list.enableDisplayBigControlPanel') === 'selectable',
443  'label' => $this->getLanguageService()->getLL('bigControlPanel', true),
444  'html' => BackendUtility::getFuncCheck($this->id, 'SET[bigControlPanel]',
445  $this->MOD_SETTINGS['bigControlPanel'], '', '', 'id="bigControlPanel"'),
446  ],
447  'displayThumbs' => [
448  'enabled' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails'] && $this->getBackendUser()->getTSConfigVal('options.file_list.enableDisplayThumbnails') === 'selectable',
449  'label' => $this->getLanguageService()->getLL('displayThumbs', true),
450  'html' => BackendUtility::getFuncCheck($this->id, 'SET[displayThumbs]',
451  $this->MOD_SETTINGS['displayThumbs'], '', '', 'id="checkDisplayThumbs"'),
452  ],
453  'enableClipBoard' => [
454  'enabled' => $this->getBackendUser()->getTSConfigVal('options.file_list.enableClipBoard') === 'selectable',
455  'label' => $this->getLanguageService()->getLL('clipBoard', true),
456  'html' => BackendUtility::getFuncCheck($this->id, 'SET[clipBoard]',
457  $this->MOD_SETTINGS['clipBoard'], '', '', 'id="checkClipBoard"'),
458  ]
459  ]);
460  $this->view->assign('showClipBoard', (bool)$this->MOD_SETTINGS['clipBoard']);
461  $this->view->assign('clipBoardHtml', $this->filelist->clipObj->printClipboard());
462  $this->view->assign('folderIdentifier', $this->folderObject->getCombinedIdentifier());
463  $this->view->assign('fileDenyPattern', $GLOBALS['TYPO3_CONF_VARS']['BE']['fileDenyPattern']);
464  $this->view->assign('maxFileSize', GeneralUtility::getMaxUploadFileSize() * 1024);
465  } else {
466  $this->forward('missingFolder');
467  }
468  }
469 
473  public function missingFolderAction()
474  {
475  if ($this->errorMessage) {
476  $this->errorMessage->setSeverity(FlashMessage::ERROR);
477  $this->controllerContext->getFlashMessageQueue('core.template.flashMessages')->addMessage($this->errorMessage);
478  }
479  }
480 
486  public function searchAction($searchWord = '')
487  {
488  if (empty($searchWord)) {
489  $this->forward('index');
490  }
491 
492  $fileFacades = [];
493  $files = $this->fileRepository->searchByName($this->folderObject, $searchWord);
494 
495  if (empty($files)) {
496  $this->controllerContext->getFlashMessageQueue('core.template.flashMessages')->addMessage(
497  new FlashMessage(LocalizationUtility::translate('flashmessage.no_results', 'filelist'), '',
499  );
500  } else {
501  foreach ($files as $file) {
502  $fileFacades[] = new \TYPO3\CMS\Filelist\FileFacade($file);
503  }
504  }
505 
506  $pageRenderer = $this->view->getModuleTemplate()->getPageRenderer();
507  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileList');
508 
509  $this->view->assign('searchWord', $searchWord);
510  $this->view->assign('files', $fileFacades);
511  $this->view->assign('veriCode', $this->getBackendUser()->veriCode());
512  $this->view->assign('deleteUrl', BackendUtility::getModuleUrl('tce_file'));
513  $this->view->assign('settings', [
514  'jsConfirmationDelete' => $this->getBackendUser()->jsConfirmation(JsConfirmation::DELETE)
515  ]);
516 
517  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileDelete');
518  $pageRenderer->addInlineLanguageLabelFile(
519  ExtensionManagementUtility::extPath('lang') . 'locallang_alt_doc.xlf',
520  'buttons'
521  );
522  }
523 
530  protected function getModuleHeadline()
531  {
532  $name = $this->folderObject->getName();
533  if ($name === '') {
534  // Show storage name on storage root
535  if ($this->folderObject->getIdentifier() === '/') {
536  $name = $this->folderObject->getStorage()->getName();
537  }
538  } else {
539  $name = key(ListUtility::resolveSpecialFolderNames(
540  [$name => $this->folderObject]
541  ));
542  }
543  return $name;
544  }
545 
552  protected function registerDocHeaderButtons()
553  {
555  $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar();
556 
557  // CSH
558  $cshButton = $buttonBar->makeHelpButton()
559  ->setModuleName('xMOD_csh_corebe')
560  ->setFieldName('filelist_module');
561  $buttonBar->addButton($cshButton);
562  }
563 
569  protected function registerButtons()
570  {
572  $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar();
573 
575  $iconFactory = $this->view->getModuleTemplate()->getIconFactory();
576 
578  $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
579 
580  $lang = $this->getLanguageService();
581 
582  // Refresh page
583  $refreshLink = GeneralUtility::linkThisScript(
584  [
585  'target' => rawurlencode($this->folderObject->getCombinedIdentifier()),
586  'imagemode' => $this->filelist->thumbs
587  ]
588  );
589  $refreshButton = $buttonBar->makeLinkButton()
590  ->setHref($refreshLink)
591  ->setTitle($lang->sL('LLL:EXT:lang/locallang_core.xlf:labels.reload'))
592  ->setIcon($iconFactory->getIcon('actions-refresh', Icon::SIZE_SMALL));
593  $buttonBar->addButton($refreshButton, ButtonBar::BUTTON_POSITION_RIGHT);
594 
595  // Level up
596  try {
597  $currentStorage = $this->folderObject->getStorage();
598  $parentFolder = $this->folderObject->getParentFolder();
599  if ($parentFolder->getIdentifier() !== $this->folderObject->getIdentifier()
600  && $currentStorage->isWithinFileMountBoundaries($parentFolder)
601  ) {
602  $levelUpClick = 'top.document.getElementsByName("navigation")[0].contentWindow.Tree.highlightActiveItem("file","folder'
603  . GeneralUtility::md5int($parentFolder->getCombinedIdentifier()) . '_"+top.fsMod.currentBank)';
604  $levelUpButton = $buttonBar->makeLinkButton()
605  ->setHref(BackendUtility::getModuleUrl('file_FilelistList', ['id' => $parentFolder->getCombinedIdentifier()]))
606  ->setOnClick($levelUpClick)
607  ->setTitle($lang->sL('LLL:EXT:lang/locallang_core.xlf:labels.upOneLevel'))
608  ->setIcon($iconFactory->getIcon('actions-view-go-up', Icon::SIZE_SMALL));
609  $buttonBar->addButton($levelUpButton, ButtonBar::BUTTON_POSITION_LEFT, 1);
610  }
611  } catch (\Exception $e) {
612  }
613 
614  // Shortcut
615  if ($this->getBackendUser()->mayMakeShortcut()) {
616  $shortCutButton = $buttonBar->makeShortcutButton()->setModuleName('file_FilelistList');
617  $buttonBar->addButton($shortCutButton, ButtonBar::BUTTON_POSITION_RIGHT);
618  }
619 
620  // Upload button (only if upload to this directory is allowed)
621  if ($this->folderObject && $this->folderObject->getStorage()->checkUserActionPermission('add',
622  'File') && $this->folderObject->checkActionPermission('write')
623  ) {
624  $uploadButton = $buttonBar->makeLinkButton()
625  ->setHref(BackendUtility::getModuleUrl(
626  'file_upload',
627  [
628  'target' => $this->folderObject->getCombinedIdentifier(),
629  'returnUrl' => $this->filelist->listURL(),
630  ]
631  ))
632  ->setClasses('t3js-drag-uploader-trigger')
633  ->setTitle($lang->sL('LLL:EXT:lang/locallang_core.xlf:cm.upload'))
634  ->setIcon($iconFactory->getIcon('actions-edit-upload', Icon::SIZE_SMALL));
635  $buttonBar->addButton($uploadButton, ButtonBar::BUTTON_POSITION_LEFT, 1);
636  }
637 
638  // New folder button
639  if ($this->folderObject && $this->folderObject->checkActionPermission('write')
640  && ($this->folderObject->getStorage()->checkUserActionPermission('add',
641  'File') || $this->folderObject->checkActionPermission('add'))
642  ) {
643  $newButton = $buttonBar->makeLinkButton()
644  ->setHref(BackendUtility::getModuleUrl(
645  'file_newfolder',
646  [
647  'target' => $this->folderObject->getCombinedIdentifier(),
648  'returnUrl' => $this->filelist->listURL(),
649  ]
650  ))
651  ->setTitle($lang->sL('LLL:EXT:lang/locallang_core.xlf:cm.new'))
652  ->setIcon($iconFactory->getIcon('actions-document-new', Icon::SIZE_SMALL));
653  $buttonBar->addButton($newButton, ButtonBar::BUTTON_POSITION_LEFT, 1);
654  }
655 
656  // Add paste button if clipboard is initialized
657  if ($this->filelist->clipObj instanceof Clipboard && $this->folderObject->checkActionPermission('write')) {
658  $elFromTable = $this->filelist->clipObj->elFromTable('_FILE');
659  if (!empty($elFromTable)) {
660  $addPasteButton = true;
661  $elToConfirm = [];
662  foreach ($elFromTable as $key => $element) {
663  $clipBoardElement = $resourceFactory->retrieveFileOrFolderObject($element);
664  if ($clipBoardElement instanceof Folder && $clipBoardElement->getStorage()->isWithinFolder($clipBoardElement,
665  $this->folderObject)
666  ) {
667  $addPasteButton = false;
668  }
669  $elToConfirm[$key] = $clipBoardElement->getName();
670  }
671  if ($addPasteButton) {
672  $confirmText = $this->filelist->clipObj
673  ->confirmMsgText('_FILE', $this->folderObject->getReadablePath(), 'into', $elToConfirm);
674  $pasteButton = $buttonBar->makeLinkButton()
675  ->setHref($this->filelist->clipObj
676  ->pasteUrl('_FILE', $this->folderObject->getCombinedIdentifier()))
677  ->setClasses('t3js-modal-trigger')
678  ->setDataAttributes([
679  'severity' => 'warning',
680  'content' => $confirmText,
681  'title' => $lang->getLL('clip_paste')
682  ])
683  ->setTitle($lang->getLL('clip_paste'))
684  ->setIcon($iconFactory->getIcon('actions-document-paste-into', Icon::SIZE_SMALL));
685  $buttonBar->addButton($pasteButton, ButtonBar::BUTTON_POSITION_LEFT, 2);
686  }
687  }
688  }
689  }
690 
696  protected function getLanguageService()
697  {
698  return $GLOBALS['LANG'];
699  }
700 
706  protected function getBackendUser()
707  {
708  return $GLOBALS['BE_USER'];
709  }
710 }
static translate($key, $extensionName, $arguments=null)
static getFuncCheck($mainParams, $elementName, $currentValue, $script='', $addParams='', $tagParams='')
injectFileRepository(\TYPO3\CMS\Core\Resource\FileRepository $fileRepository)
static forceIntegerInRange($theInt, $min, $max=2000000000, $defaultValue=0)
Definition: MathUtility.php:31
static linkThisScript(array $getParams=[])
static getModuleData($MOD_MENU, $CHANGED_SETTINGS, $modName, $type='', $dontValidateList='', $setDefaultList='')
if(TYPO3_MODE==='BE') $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['frontendEditingController']['default']
forward($actionName, $controllerName=null, $extensionName=null, array $arguments=null)