TYPO3CMS  8
 All Classes Namespaces Files Functions Variables Pages
FileListController.php
Go to the documentation of this file.
1 <?php
2 namespace TYPO3\CMS\Filelist\Controller;
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 
38 
43 {
47  public $MOD_MENU = [];
48 
52  public $MOD_SETTINGS = [];
53 
59  public $doc;
60 
66  public $id;
67 
71  protected $folderObject;
72 
76  protected $errorMessage;
77 
83  public $pointer;
84 
89  public $table;
90 
96  public $imagemode;
97 
101  public $cmd;
102 
110 
116  public $filelist = null;
117 
123  protected $moduleName = 'file_list';
124 
128  protected $fileRepository;
129 
133  protected $view;
134 
140  protected $defaultViewObjectName = BackendTemplateView::class;
141 
145  public function injectFileRepository(\TYPO3\CMS\Core\Resource\FileRepository $fileRepository)
146  {
147  $this->fileRepository = $fileRepository;
148  }
149 
158  public function initializeObject()
159  {
160  $this->doc = GeneralUtility::makeInstance(DocumentTemplate::class);
161  $this->getLanguageService()->includeLLFile('EXT:lang/Resources/Private/Language/locallang_mod_file_list.xlf');
162  $this->getLanguageService()->includeLLFile('EXT:lang/Resources/Private/Language/locallang_misc.xlf');
163 
164  // Setting GPvars:
165  $this->id = ($combinedIdentifier = GeneralUtility::_GP('id'));
166  $this->pointer = GeneralUtility::_GP('pointer');
167  $this->table = GeneralUtility::_GP('table');
168  $this->imagemode = GeneralUtility::_GP('imagemode');
169  $this->cmd = GeneralUtility::_GP('cmd');
170  $this->overwriteExistingFiles = DuplicationBehavior::cast(GeneralUtility::_GP('overwriteExistingFiles'));
171 
172  try {
173  if ($combinedIdentifier) {
175  $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
176  $storage = $resourceFactory->getStorageObjectFromCombinedIdentifier($combinedIdentifier);
177  $identifier = substr($combinedIdentifier, strpos($combinedIdentifier, ':') + 1);
178  if (!$storage->hasFolder($identifier)) {
179  $identifier = $storage->getFolderIdentifierFromFileIdentifier($identifier);
180  }
181 
182  $this->folderObject = $resourceFactory->getFolderObjectFromCombinedIdentifier($storage->getUid() . ':' . $identifier);
183  // Disallow access to fallback storage 0
184  if ($storage->getUid() === 0) {
185  throw new Exception\InsufficientFolderAccessPermissionsException('You are not allowed to access files outside your storages',
186  1434539815);
187  }
188  // Disallow the rendering of the processing folder (e.g. could be called manually)
189  if ($this->folderObject && $storage->isProcessingFolder($this->folderObject)) {
190  $this->folderObject = $storage->getRootLevelFolder();
191  }
192  } else {
193  // Take the first object of the first storage
194  $fileStorages = $this->getBackendUser()->getFileStorages();
195  $fileStorage = reset($fileStorages);
196  if ($fileStorage) {
197  $this->folderObject = $fileStorage->getRootLevelFolder();
198  } else {
199  throw new \RuntimeException('Could not find any folder to be displayed.', 1349276894);
200  }
201  }
202 
203  if ($this->folderObject && !$this->folderObject->getStorage()->isWithinFileMountBoundaries($this->folderObject)) {
204  throw new \RuntimeException('Folder not accessible.', 1430409089);
205  }
206  } catch (Exception\InsufficientFolderAccessPermissionsException $permissionException) {
207  $this->folderObject = null;
208  $this->errorMessage = GeneralUtility::makeInstance(FlashMessage::class,
209  sprintf(
210  $this->getLanguageService()->getLL('missingFolderPermissionsMessage'),
211  $this->id
212  ),
213  $this->getLanguageService()->getLL('missingFolderPermissionsTitle'),
215  );
216  } catch (Exception $fileException) {
217  // Set folder object to null and throw a message later on
218  $this->folderObject = null;
219  // Take the first object of the first storage
220  $fileStorages = $this->getBackendUser()->getFileStorages();
221  $fileStorage = reset($fileStorages);
222  if ($fileStorage instanceof \TYPO3\CMS\Core\Resource\ResourceStorage) {
223  $this->folderObject = $fileStorage->getRootLevelFolder();
224  if (!$fileStorage->isWithinFileMountBoundaries($this->folderObject)) {
225  $this->folderObject = null;
226  }
227  }
228  $this->errorMessage = GeneralUtility::makeInstance(FlashMessage::class,
229  sprintf(
230  $this->getLanguageService()->getLL('folderNotFoundMessage'),
231  $this->id
232  ),
233  $this->getLanguageService()->getLL('folderNotFoundTitle'),
235  );
236  } catch (\RuntimeException $e) {
237  $this->folderObject = null;
238  $this->errorMessage = GeneralUtility::makeInstance(FlashMessage::class,
239  $e->getMessage() . ' (' . $e->getCode() . ')',
240  $this->getLanguageService()->getLL('folderNotFoundTitle'),
242  );
243  }
244 
245  if ($this->folderObject && !$this->folderObject->getStorage()->checkFolderActionPermission('read',
246  $this->folderObject)
247  ) {
248  $this->folderObject = null;
249  }
250 
251  // Configure the "menu" - which is used internally to save the values of sorting, displayThumbs etc.
252  $this->menuConfig();
253  }
254 
260  public function menuConfig()
261  {
262  // MENU-ITEMS:
263  // If array, then it's a selector box menu
264  // If empty string it's just a variable, that will be saved.
265  // Values NOT in this array will not be saved in the settings-array for the module.
266  $this->MOD_MENU = [
267  'sort' => '',
268  'reverse' => '',
269  'displayThumbs' => '',
270  'clipBoard' => '',
271  'bigControlPanel' => ''
272  ];
273  // CLEANSE SETTINGS
274  $this->MOD_SETTINGS = BackendUtility::getModuleData(
275  $this->MOD_MENU,
276  GeneralUtility::_GP('SET'),
277  $this->moduleName
278  );
279  }
280 
287  public function initializeView(ViewInterface $view)
288  {
290  parent::initializeView($view);
291  $pageRenderer = $this->view->getModuleTemplate()->getPageRenderer();
292  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileListLocalisation');
293  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileSearch');
294  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/ClickMenu');
295  $this->registerDocHeaderButtons();
296  }
297 
301  public function initializeIndexAction()
302  {
303  // Apply predefined values for hidden checkboxes
304  // Set predefined value for DisplayBigControlPanel:
305  $backendUser = $this->getBackendUser();
306  if ($backendUser->getTSConfigVal('options.file_list.enableDisplayBigControlPanel') === 'activated') {
307  $this->MOD_SETTINGS['bigControlPanel'] = true;
308  } elseif ($backendUser->getTSConfigVal('options.file_list.enableDisplayBigControlPanel') === 'deactivated') {
309  $this->MOD_SETTINGS['bigControlPanel'] = false;
310  }
311  // Set predefined value for DisplayThumbnails:
312  if ($backendUser->getTSConfigVal('options.file_list.enableDisplayThumbnails') === 'activated') {
313  $this->MOD_SETTINGS['displayThumbs'] = true;
314  } elseif ($backendUser->getTSConfigVal('options.file_list.enableDisplayThumbnails') === 'deactivated') {
315  $this->MOD_SETTINGS['displayThumbs'] = false;
316  }
317  // Set predefined value for Clipboard:
318  if ($backendUser->getTSConfigVal('options.file_list.enableClipBoard') === 'activated') {
319  $this->MOD_SETTINGS['clipBoard'] = true;
320  } elseif ($backendUser->getTSConfigVal('options.file_list.enableClipBoard') === 'deactivated') {
321  $this->MOD_SETTINGS['clipBoard'] = false;
322  }
323  // If user never opened the list module, set the value for displayThumbs
324  if (!isset($this->MOD_SETTINGS['displayThumbs'])) {
325  $this->MOD_SETTINGS['displayThumbs'] = $backendUser->uc['thumbnailsByDefault'];
326  }
327  if (!isset($this->MOD_SETTINGS['sort'])) {
328  // Set default sorting
329  $this->MOD_SETTINGS['sort'] = 'file';
330  $this->MOD_SETTINGS['reverse'] = 0;
331  }
332  }
333 
337  public function indexAction()
338  {
339  $pageRenderer = $this->view->getModuleTemplate()->getPageRenderer();
340  $pageRenderer->setTitle($this->getLanguageService()->getLL('files'));
341 
342  // There there was access to this file path, continue, make the list
343  if ($this->folderObject) {
344  // Create fileListing object
345  $this->filelist = GeneralUtility::makeInstance(FileList::class, $this);
346  $this->filelist->thumbs = $GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails'] && $this->MOD_SETTINGS['displayThumbs'];
347  // Create clipboard object and initialize that
348  $this->filelist->clipObj = GeneralUtility::makeInstance(Clipboard::class);
349  $this->filelist->clipObj->fileMode = 1;
350  $this->filelist->clipObj->initializeClipboard();
351  $CB = GeneralUtility::_GET('CB');
352  if ($this->cmd == 'setCB') {
353  $CB['el'] = $this->filelist->clipObj->cleanUpCBC(array_merge(GeneralUtility::_POST('CBH'),
354  (array)GeneralUtility::_POST('CBC')), '_FILE');
355  }
356  if (!$this->MOD_SETTINGS['clipBoard']) {
357  $CB['setP'] = 'normal';
358  }
359  $this->filelist->clipObj->setCmd($CB);
360  $this->filelist->clipObj->cleanCurrent();
361  // Saves
362  $this->filelist->clipObj->endClipboard();
363  // If the "cmd" was to delete files from the list (clipboard thing), do that:
364  if ($this->cmd == 'delete') {
365  $items = $this->filelist->clipObj->cleanUpCBC(GeneralUtility::_POST('CBC'), '_FILE', 1);
366  if (!empty($items)) {
367  // Make command array:
368  $FILE = [];
369  foreach ($items as $v) {
370  $FILE['delete'][] = ['data' => $v];
371  }
372  // Init file processing object for deleting and pass the cmd array.
374  $fileProcessor = GeneralUtility::makeInstance(ExtendedFileUtility::class);
375  $fileProcessor->setActionPermissions();
376  $fileProcessor->setExistingFilesConflictMode($this->overwriteExistingFiles);
377  $fileProcessor->start($FILE);
378  $fileProcessor->processData();
379  }
380  }
381  // Start up filelisting object, include settings.
382  $this->pointer = MathUtility::forceIntegerInRange($this->pointer, 0, 100000);
383  $this->filelist->start($this->folderObject, $this->pointer, $this->MOD_SETTINGS['sort'],
384  $this->MOD_SETTINGS['reverse'], $this->MOD_SETTINGS['clipBoard'],
385  $this->MOD_SETTINGS['bigControlPanel']);
386  // Generate the list
387  $this->filelist->generateList();
388  // Set top JavaScript:
389  $this->view->getModuleTemplate()->addJavaScriptCode(
390  'FileListIndex',
391  'if (top.fsMod) top.fsMod.recentIds["file"] = "' . rawurlencode($this->id) . '";' . $this->filelist->CBfunctions() . '
392  function jumpToUrl(URL) {
393  window.location.href = URL;
394  return false;
395  }
396  ');
397  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileDelete');
398  $pageRenderer->addInlineLanguageLabelFile('EXT:lang/Resources/Private/Language/locallang_alt_doc.xlf', 'buttons');
399 
400  // Include DragUploader only if we have write access
401  if ($this->folderObject->getStorage()->checkUserActionPermission('add', 'File')
402  && $this->folderObject->checkActionPermission('write')
403  ) {
404  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/DragUploader');
405  $pageRenderer->addInlineLanguageLabelFile('EXT:lang/Resources/Private/Language/locallang_core.xlf', 'file_upload');
406  $pageRenderer->addInlineLanguageLabelArray([
407  'permissions.read' => $this->getLanguageService()->getLL('read'),
408  'permissions.write' => $this->getLanguageService()->getLL('write'),
409  ]);
410  }
411 
412  // Setting up the buttons
413  $this->registerButtons();
414 
415  $pageRecord = [
416  '_additional_info' => $this->filelist->getFolderInfo(),
417  'combined_identifier' => $this->folderObject->getCombinedIdentifier(),
418  ];
419  $this->view->getModuleTemplate()->getDocHeaderComponent()->setMetaInformation($pageRecord);
420 
421  $this->view->assign('headline', $this->getModuleHeadline());
422  $this->view->assign('listHtml', $this->filelist->HTMLcode);
423 
424  $this->view->assign('checkboxes', [
425  'bigControlPanel' => [
426  'enabled' => $this->getBackendUser()->getTSConfigVal('options.file_list.enableDisplayBigControlPanel') === 'selectable',
427  'label' => htmlspecialchars($this->getLanguageService()->getLL('bigControlPanel')),
428  'html' => BackendUtility::getFuncCheck($this->id, 'SET[bigControlPanel]',
429  $this->MOD_SETTINGS['bigControlPanel'], '', '', 'id="bigControlPanel"'),
430  ],
431  'displayThumbs' => [
432  'enabled' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails'] && $this->getBackendUser()->getTSConfigVal('options.file_list.enableDisplayThumbnails') === 'selectable',
433  'label' => htmlspecialchars($this->getLanguageService()->getLL('displayThumbs')),
434  'html' => BackendUtility::getFuncCheck($this->id, 'SET[displayThumbs]',
435  $this->MOD_SETTINGS['displayThumbs'], '', '', 'id="checkDisplayThumbs"'),
436  ],
437  'enableClipBoard' => [
438  'enabled' => $this->getBackendUser()->getTSConfigVal('options.file_list.enableClipBoard') === 'selectable',
439  'label' => htmlspecialchars($this->getLanguageService()->getLL('clipBoard')),
440  'html' => BackendUtility::getFuncCheck($this->id, 'SET[clipBoard]',
441  $this->MOD_SETTINGS['clipBoard'], '', '', 'id="checkClipBoard"'),
442  ]
443  ]);
444  $this->view->assign('showClipBoard', (bool)$this->MOD_SETTINGS['clipBoard']);
445  $this->view->assign('clipBoardHtml', $this->filelist->clipObj->printClipboard());
446  $this->view->assign('folderIdentifier', $this->folderObject->getCombinedIdentifier());
447  $this->view->assign('fileDenyPattern', $GLOBALS['TYPO3_CONF_VARS']['BE']['fileDenyPattern']);
448  $this->view->assign('maxFileSize', GeneralUtility::getMaxUploadFileSize() * 1024);
449  } else {
450  $this->forward('missingFolder');
451  }
452  }
453 
457  public function missingFolderAction()
458  {
459  if ($this->errorMessage) {
460  $this->errorMessage->setSeverity(FlashMessage::ERROR);
461  $this->controllerContext->getFlashMessageQueue('core.template.flashMessages')->addMessage($this->errorMessage);
462  }
463  }
464 
470  public function searchAction($searchWord = '')
471  {
472  if (empty($searchWord)) {
473  $this->forward('index');
474  }
475 
476  $fileFacades = [];
477  $files = $this->fileRepository->searchByName($this->folderObject, $searchWord);
478 
479  if (empty($files)) {
480  $this->controllerContext->getFlashMessageQueue('core.template.flashMessages')->addMessage(
481  new FlashMessage(LocalizationUtility::translate('flashmessage.no_results', 'filelist'), '',
483  );
484  } else {
485  foreach ($files as $file) {
486  $fileFacades[] = new \TYPO3\CMS\Filelist\FileFacade($file);
487  }
488  }
489 
490  $pageRenderer = $this->view->getModuleTemplate()->getPageRenderer();
491  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileList');
492 
493  $this->view->assign('searchWord', $searchWord);
494  $this->view->assign('files', $fileFacades);
495  $this->view->assign('veriCode', $this->getBackendUser()->veriCode());
496  $this->view->assign('deleteUrl', BackendUtility::getModuleUrl('tce_file'));
497  $this->view->assign('settings', [
498  'jsConfirmationDelete' => $this->getBackendUser()->jsConfirmation(JsConfirmation::DELETE)
499  ]);
500 
501  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Filelist/FileDelete');
502  $pageRenderer->addInlineLanguageLabelFile('EXT:lang/Resources/Private/Language/locallang_alt_doc.xlf', 'buttons');
503  }
504 
511  protected function getModuleHeadline()
512  {
513  $name = $this->folderObject->getName();
514  if ($name === '') {
515  // Show storage name on storage root
516  if ($this->folderObject->getIdentifier() === '/') {
517  $name = $this->folderObject->getStorage()->getName();
518  }
519  } else {
520  $name = key(ListUtility::resolveSpecialFolderNames(
521  [$name => $this->folderObject]
522  ));
523  }
524  return $name;
525  }
526 
533  protected function registerDocHeaderButtons()
534  {
536  $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar();
537 
538  // CSH
539  $cshButton = $buttonBar->makeHelpButton()
540  ->setModuleName('xMOD_csh_corebe')
541  ->setFieldName('filelist_module');
542  $buttonBar->addButton($cshButton);
543  }
544 
550  protected function registerButtons()
551  {
553  $buttonBar = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar();
554 
556  $iconFactory = $this->view->getModuleTemplate()->getIconFactory();
557 
559  $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
560 
561  $lang = $this->getLanguageService();
562 
563  // Refresh page
564  $refreshLink = GeneralUtility::linkThisScript(
565  [
566  'target' => rawurlencode($this->folderObject->getCombinedIdentifier()),
567  'imagemode' => $this->filelist->thumbs
568  ]
569  );
570  $refreshButton = $buttonBar->makeLinkButton()
571  ->setHref($refreshLink)
572  ->setTitle($lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.reload'))
573  ->setIcon($iconFactory->getIcon('actions-refresh', Icon::SIZE_SMALL));
574  $buttonBar->addButton($refreshButton, ButtonBar::BUTTON_POSITION_RIGHT);
575 
576  // Level up
577  try {
578  $currentStorage = $this->folderObject->getStorage();
579  $parentFolder = $this->folderObject->getParentFolder();
580  if ($parentFolder->getIdentifier() !== $this->folderObject->getIdentifier()
581  && $currentStorage->isWithinFileMountBoundaries($parentFolder)
582  ) {
583  $levelUpClick = 'top.document.getElementsByName("navigation")[0].contentWindow.Tree.highlightActiveItem("file","folder'
584  . GeneralUtility::md5int($parentFolder->getCombinedIdentifier()) . '_"+top.fsMod.currentBank)';
585  $levelUpButton = $buttonBar->makeLinkButton()
586  ->setHref(BackendUtility::getModuleUrl('file_FilelistList', ['id' => $parentFolder->getCombinedIdentifier()]))
587  ->setOnClick($levelUpClick)
588  ->setTitle($lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.upOneLevel'))
589  ->setIcon($iconFactory->getIcon('actions-view-go-up', Icon::SIZE_SMALL));
590  $buttonBar->addButton($levelUpButton, ButtonBar::BUTTON_POSITION_LEFT, 1);
591  }
592  } catch (\Exception $e) {
593  }
594 
595  // Shortcut
596  if ($this->getBackendUser()->mayMakeShortcut()) {
597  $shortCutButton = $buttonBar->makeShortcutButton()->setModuleName('file_FilelistList');
598  $buttonBar->addButton($shortCutButton, ButtonBar::BUTTON_POSITION_RIGHT);
599  }
600 
601  // Upload button (only if upload to this directory is allowed)
602  if ($this->folderObject && $this->folderObject->getStorage()->checkUserActionPermission('add',
603  'File') && $this->folderObject->checkActionPermission('write')
604  ) {
605  $uploadButton = $buttonBar->makeLinkButton()
606  ->setHref(BackendUtility::getModuleUrl(
607  'file_upload',
608  [
609  'target' => $this->folderObject->getCombinedIdentifier(),
610  'returnUrl' => $this->filelist->listURL(),
611  ]
612  ))
613  ->setClasses('t3js-drag-uploader-trigger')
614  ->setTitle($lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:cm.upload'))
615  ->setIcon($iconFactory->getIcon('actions-edit-upload', Icon::SIZE_SMALL));
616  $buttonBar->addButton($uploadButton, ButtonBar::BUTTON_POSITION_LEFT, 1);
617  }
618 
619  // New folder button
620  if ($this->folderObject && $this->folderObject->checkActionPermission('write')
621  && ($this->folderObject->getStorage()->checkUserActionPermission('add',
622  'File') || $this->folderObject->checkActionPermission('add'))
623  ) {
624  $newButton = $buttonBar->makeLinkButton()
625  ->setHref(BackendUtility::getModuleUrl(
626  'file_newfolder',
627  [
628  'target' => $this->folderObject->getCombinedIdentifier(),
629  'returnUrl' => $this->filelist->listURL(),
630  ]
631  ))
632  ->setTitle($lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:cm.new'))
633  ->setIcon($iconFactory->getIcon('actions-document-new', Icon::SIZE_SMALL));
634  $buttonBar->addButton($newButton, ButtonBar::BUTTON_POSITION_LEFT, 1);
635  }
636 
637  // Add paste button if clipboard is initialized
638  if ($this->filelist->clipObj instanceof Clipboard && $this->folderObject->checkActionPermission('write')) {
639  $elFromTable = $this->filelist->clipObj->elFromTable('_FILE');
640  if (!empty($elFromTable)) {
641  $addPasteButton = true;
642  $elToConfirm = [];
643  foreach ($elFromTable as $key => $element) {
644  $clipBoardElement = $resourceFactory->retrieveFileOrFolderObject($element);
645  if ($clipBoardElement instanceof Folder && $clipBoardElement->getStorage()->isWithinFolder($clipBoardElement,
646  $this->folderObject)
647  ) {
648  $addPasteButton = false;
649  }
650  $elToConfirm[$key] = $clipBoardElement->getName();
651  }
652  if ($addPasteButton) {
653  $confirmText = $this->filelist->clipObj
654  ->confirmMsgText('_FILE', $this->folderObject->getReadablePath(), 'into', $elToConfirm);
655  $pasteButton = $buttonBar->makeLinkButton()
656  ->setHref($this->filelist->clipObj
657  ->pasteUrl('_FILE', $this->folderObject->getCombinedIdentifier()))
658  ->setClasses('t3js-modal-trigger')
659  ->setDataAttributes([
660  'severity' => 'warning',
661  'content' => $confirmText,
662  'title' => $lang->getLL('clip_paste')
663  ])
664  ->setTitle($lang->getLL('clip_paste'))
665  ->setIcon($iconFactory->getIcon('actions-document-paste-into', Icon::SIZE_SMALL));
666  $buttonBar->addButton($pasteButton, ButtonBar::BUTTON_POSITION_LEFT, 2);
667  }
668  }
669  }
670  }
671 
677  protected function getLanguageService()
678  {
679  return $GLOBALS['LANG'];
680  }
681 
687  protected function getBackendUser()
688  {
689  return $GLOBALS['BE_USER'];
690  }
691 }
injectFileRepository(\TYPO3\CMS\Core\Resource\FileRepository $fileRepository)
forward($actionName, $controllerName=null, $extensionName=null, array $arguments=null)
static getModuleData($MOD_MENU, $CHANGED_SETTINGS, $modName, $type= '', $dontValidateList= '', $setDefaultList= '')
static translate($key, $extensionName, $arguments=null)
static linkThisScript(array $getParams=[])
static getFuncCheck($mainParams, $elementName, $currentValue, $script= '', $addParams= '', $tagParams= '')
if(TYPO3_MODE=== 'BE') $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['frontendEditingController']['default']
static makeInstance($className,...$constructorArguments)
static forceIntegerInRange($theInt, $min, $max=2000000000, $defaultValue=0)
Definition: MathUtility.php:31