‪TYPO3CMS  11.5
BackendController.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
34 use TYPO3\CMS\Core\Page\PageRenderer;
40 
45 {
49  protected ‪$css = '';
50 
54  protected ‪$toolbarItems = [];
55 
59  protected ‪$templatePath = 'EXT:backend/Resources/Private/Templates/';
60 
64  protected ‪$partialPath = 'EXT:backend/Resources/Private/Partials/';
65 
67  protected PageRenderer ‪$pageRenderer;
69  protected ‪UriBuilder ‪$uriBuilder;
72 
76  protected ‪$moduleStorage;
77 
78  public function ‪__construct(
81  PageRenderer ‪$pageRenderer,
85  ) {
86  $javaScriptRenderer = ‪$pageRenderer->getJavaScriptRenderer();
87  $this->‪getLanguageService()->‪includeLLFile('EXT:core/Resources/Private/Language/locallang_misc.xlf');
88  $this->backendModuleRepository = ‪$backendModuleRepository;
89  $this->uriBuilder = ‪$uriBuilder;
90  $this->typo3Version = ‪$typo3Version;
91  $this->pageRenderer = ‪$pageRenderer;
92  $this->moduleLoader = ‪$moduleLoader;
93  $this->moduleLoader->observeWorkspaces = true;
94  $this->moduleLoader->load(‪$GLOBALS['TBE_MODULES']);
95  $this->moduleTemplateFactory = ‪$moduleTemplateFactory;
96 
97  // Add default BE javascript
98  $this->pageRenderer->addJsFile('EXT:backend/Resources/Public/JavaScript/backend.js');
99  $javaScriptRenderer->addJavaScriptModuleInstruction(
100  ‪JavaScriptModuleInstruction::forRequireJS('TYPO3/CMS/Backend/LoginRefresh')
101  ->invoke('initialize', [
102  'intervalTime' => ‪MathUtility::forceIntegerInRange((int)‪$GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout'] - 60, 60),
103  'loginFramesetUrl' => (string)$this->uriBuilder->buildUriFromRoute('login_frameset'),
104  'logoutUrl' => (string)$this->uriBuilder->buildUriFromRoute('logout'),
105  ])
106  );
107  $javaScriptRenderer->addJavaScriptModuleInstruction(
108  ‪JavaScriptModuleInstruction::forRequireJS('TYPO3/CMS/Backend/BroadcastService')->invoke('listen')
109  );
110  // load the storage API and fill the UC into the PersistentStorage, so no additional AJAX call is needed
111  $javaScriptRenderer->addJavaScriptModuleInstruction(
112  ‪JavaScriptModuleInstruction::forRequireJS('TYPO3/CMS/Backend/Storage/Persistent')
113  ->invoke('load', $this->‪getBackendUser()->uc)
114  );
115  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/Module/Router');
116  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/ModuleMenu');
117  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/Storage/ModuleStateStorage');
118  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/Toolbar');
119  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/Notification');
120  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/Modal');
121  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/InfoWindow');
122  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/Viewport/ResizableNavigation');
123  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/DebugConsole');
124 
125  $this->pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/locallang_core.xlf');
126  $this->pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/locallang_misc.xlf');
127  $this->pageRenderer->addInlineLanguageLabelFile('EXT:backend/Resources/Private/Language/locallang_layout.xlf');
128  $this->pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf');
129  $this->pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/debugger.xlf');
130  $this->pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/wizard.xlf');
131 
132  $this->pageRenderer->addInlineSetting('ContextHelp', 'popupUrl', (string)$this->uriBuilder->buildUriFromRoute('help_cshmanual_popup'));
133  $this->pageRenderer->addInlineSetting('ShowItem', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('show_item'));
134  $this->pageRenderer->addInlineSetting('RecordHistory', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('record_history'));
135  $this->pageRenderer->addInlineSetting('NewRecord', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('db_new'));
136  $this->pageRenderer->addInlineSetting('FormEngine', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('record_edit'));
137  $this->pageRenderer->addInlineSetting('RecordCommit', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('tce_db'));
138  $this->pageRenderer->addInlineSetting('FileCommit', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('tce_file'));
139  $this->pageRenderer->addInlineSetting('Clipboard', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('clipboard_process'));
140 
141  $this->‪initializeToolbarItems();
142  $this->‪executeHook('constructPostProcess');
143 
144  $this->moduleStorage = $this->backendModuleRepository->loadAllowedModules(['user', 'help']);
145  }
146 
152  protected function ‪initializeToolbarItems()
153  {
154  $toolbarItemInstances = [];
155  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['BE']['toolbarItems'] ?? [] as $className) {
156  $toolbarItemInstance = GeneralUtility::makeInstance($className);
157  if (!$toolbarItemInstance instanceof ‪ToolbarItemInterface) {
158  throw new \RuntimeException(
159  'class ' . $className . ' is registered as toolbar item but does not implement'
160  . ToolbarItemInterface::class,
161  1415958218
162  );
163  }
164  $index = (int)$toolbarItemInstance->getIndex();
165  if ($index < 0 || $index > 100) {
166  throw new \RuntimeException(
167  'getIndex() must return an integer between 0 and 100',
168  1415968498
169  );
170  }
171  // Find next free position in array
172  while (array_key_exists($index, $toolbarItemInstances)) {
173  $index++;
174  }
175  $toolbarItemInstances[$index] = $toolbarItemInstance;
176  }
177  ksort($toolbarItemInstances);
178  $this->toolbarItems = $toolbarItemInstances;
179  }
180 
187  public function ‪mainAction(ServerRequestInterface $request): ResponseInterface
188  {
189  $this->‪executeHook('renderPreProcess');
190 
191  $moduleMenuCollapsed = $this->‪getCollapseStateOfMenu();
192  $hasModules = count($this->moduleStorage) > 0;
193  $bodyTag = '<body class="scaffold t3js-scaffold' . (!$moduleMenuCollapsed && $hasModules ? ' scaffold-modulemenu-expanded' : '') . '">';
194 
195  // Prepare the scaffolding, at this point extension may still add javascript and css
196  $moduleTemplate = $this->moduleTemplateFactory->create($request);
197  $view = $moduleTemplate->getView();
198  $view->setPartialRootPaths([GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Partials')]);
199  $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($this->templatePath . 'Backend/Main.html'));
200  $moduleTemplate->setBodyTag($bodyTag);
201  $view->assign('moduleMenu', $this->‪generateModuleMenu());
202  $view->assign('topbar', $this->‪renderTopbar());
203  $view->assign('hasModules', $hasModules);
204  $view->assign('startupModule', $this->‪getStartupModule($request));
205  $view->assign('stateTracker', (string)$this->uriBuilder->buildUriFromRoute('state-tracker'));
206 
207  if (!empty($this->css)) {
208  $this->pageRenderer->addCssInlineBlock('BackendInlineCSS', $this->css);
209  }
210  $this->‪generateJavascript($request);
211 
212  // Set document title
213  ‪$typo3Version = 'TYPO3 CMS ' . $this->typo3Version->‪getVersion();
214  $title = ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] ? ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . ' [' . ‪$typo3Version . ']' : ‪$typo3Version;
215  $moduleTemplate->setTitle($title);
216  $view->assign('sitename', $title);
217  $view->assign('sitenameFirstInBackendTitle', ($this->‪getBackendUser()->uc['backendTitleFormat'] ?? '') === 'sitenameFirst');
218 
219  // Renders the backend scaffolding
220  $content = $moduleTemplate->renderContent();
221  $this->‪executeHook('renderPostProcess', ['content' => &$content]);
222  return new HtmlResponse($content);
223  }
224 
230  protected function ‪renderTopbar()
231  {
232  $view = $this->‪getFluidTemplateObject($this->partialPath . 'Backend/Topbar.html');
233 
234  // Extension Configuration to find the TYPO3 logo in the left corner
235  ‪$extConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('backend');
236  $logoPath = '';
237  if (!empty(‪$extConf['backendLogo'])) {
238  $customBackendLogo = GeneralUtility::getFileAbsFileName(ltrim(‪$extConf['backendLogo'], '/'));
239  if (!empty($customBackendLogo)) {
240  $logoPath = $customBackendLogo;
241  }
242  }
243  // if no custom logo was set or the path is invalid, use the original one
244  if (empty($logoPath) || !file_exists($logoPath)) {
245  $logoPath = GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Public/Images/typo3_logo_orange.svg');
246  $logoWidth = 22;
247  $logoHeight = 22;
248  } else {
249  // set width/height for custom logo
250  $imageInfo = GeneralUtility::makeInstance(ImageInfo::class, $logoPath);
251  $logoWidth = $imageInfo->getWidth() ?: 22;
252  $logoHeight = $imageInfo->getHeight() ?: 22;
253 
254  // High-resolution?
255  if (str_contains($logoPath, '@2x.')) {
256  $logoWidth /= 2;
257  $logoHeight /= 2;
258  }
259  }
260 
261  $view->assign('hasModules', count($this->moduleStorage) > 0);
262  $view->assign('logoUrl', ‪PathUtility::getAbsoluteWebPath($logoPath));
263  $view->assign('logoWidth', $logoWidth);
264  $view->assign('logoHeight', $logoHeight);
265  $view->assign('applicationVersion', $this->typo3Version->getVersion());
266  $view->assign('siteName', ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']);
267  $view->assign('toolbar', $this->‪renderToolbar());
268 
269  return $view->render();
270  }
271 
277  protected function ‪renderToolbar()
278  {
279  $toolbar = [];
280  foreach ($this->toolbarItems as $toolbarItem) {
282  if ($toolbarItem->checkAccess()) {
283  $hasDropDown = (bool)$toolbarItem->hasDropDown();
284  $additionalAttributes = (array)$toolbarItem->getAdditionalAttributes();
285 
286  $liAttributes = [];
287 
288  // Merge class: Add dropdown class if hasDropDown, add classes from additional attributes
289  $classes = [];
290  $classes[] = 'toolbar-item';
291  $classes[] = 't3js-toolbar-item';
292  if (isset($additionalAttributes['class'])) {
293  $classes[] = $additionalAttributes['class'];
294  unset($additionalAttributes['class']);
295  }
296  $liAttributes['class'] = implode(' ', $classes);
297 
298  // Add further attributes
299  foreach ($additionalAttributes as $name => $value) {
300  $liAttributes[(string)$name] = (string)$value;
301  }
302 
303  // Create a unique id from class name
304  $fullyQualifiedClassName = \get_class($toolbarItem);
305  $className = ‪GeneralUtility::underscoredToLowerCamelCase($fullyQualifiedClassName);
307  $className = str_replace(['_', '\\'], '-', $className);
308  $liAttributes['id'] = $className;
309 
310  // Create data attribute identifier
311  $shortName = substr($fullyQualifiedClassName, (int)strrpos($fullyQualifiedClassName, '\\') + 1);
312  $dataToolbarIdentifier = ‪GeneralUtility::camelCaseToLowerCaseUnderscored($shortName);
313  $dataToolbarIdentifier = str_replace('_', '-', $dataToolbarIdentifier);
314  $liAttributes['data-toolbar-identifier'] = $dataToolbarIdentifier;
315 
316  $toolbar[] = '<li ' . GeneralUtility::implodeAttributes($liAttributes, true) . '>';
317 
318  if ($hasDropDown) {
319  $toolbar[] = '<a href="#" class="toolbar-item-link dropdown-toggle" data-bs-toggle="dropdown" data-bs-offset="0,-2">';
320  $toolbar[] = $toolbarItem->getItem();
321  $toolbar[] = '</a>';
322  $toolbar[] = '<div class="dropdown-menu" role="menu">';
323  $toolbar[] = $toolbarItem->getDropDown();
324  $toolbar[] = '</div>';
325  } else {
326  $toolbar[] = $toolbarItem->getItem();
327  }
328  $toolbar[] = '</li>';
329  }
330  }
331  return implode(LF, $toolbar);
332  }
333 
339  protected function ‪generateJavascript(ServerRequestInterface $request)
340  {
341  $beUser = $this->‪getBackendUser();
342  // Needed for FormEngine manipulation (date picker)
343  $dateFormat = (‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['USdateFormat'] ? ['MM-DD-Y', 'HH:mm MM-DD-Y'] : ['DD-MM-Y', 'HH:mm DD-MM-Y']);
344  $this->pageRenderer->addInlineSetting('DateTimePicker', 'DateFormat', $dateFormat);
345 
346  $t3Configuration = [
347  'username' => htmlspecialchars($beUser->user['username']),
348  'showRefreshLoginPopup' => (bool)(‪$GLOBALS['TYPO3_CONF_VARS']['BE']['showRefreshLoginPopup'] ?? false),
349  ];
350  $this->pageRenderer->getJavaScriptRenderer()->addGlobalAssignment(
351  ['TYPO3' => ['configuration' => $t3Configuration]]
352  );
353  }
354 
361  protected function ‪getStartupModule(ServerRequestInterface $request): array
362  {
363  $startModule = null;
364  $moduleParameters = [];
365  try {
366  $redirect = ‪RouteRedirect::createFromRequest($request);
367  if ($request->getMethod() === 'GET' && $redirect !== null) {
368  // Only redirect to existing non-ajax routes with no restriction to a specific method
369  $redirect->resolve(GeneralUtility::makeInstance(Router::class));
370  $startModule = $redirect->getName();
371  $moduleParameters = $redirect->getParameters();
372  }
373  } finally {
374  // No valid redirect, check for the start module
375  if (!$startModule) {
376  $beUser = $this->‪getBackendUser();
377  // start module on first login, will be removed once used the first time
378  if (isset($beUser->uc['startModuleOnFirstLogin'])) {
379  $startModule = $beUser->uc['startModuleOnFirstLogin'];
380  unset($beUser->uc['startModuleOnFirstLogin']);
381  $beUser->writeUC();
382  } elseif (is_array($this->moduleLoader->checkMod($beUser->uc['startModule'] ?? ''))) {
383  $startModule = $beUser->uc['startModule'];
384  } else {
385  $startModule = $this->‪determineFirstAvailableBackendModule();
386  }
387 
388  // check if the start module has additional parameters, so a redirect to a specific
389  // action is possible
390  if (str_contains($startModule, '->')) {
391  [$startModule, $startModuleParameters] = explode('->', $startModule, 2);
392  // if no GET parameters are set, check if there are parameters given from the UC
393  if (!$moduleParameters && $startModuleParameters) {
394  $moduleParameters = $startModuleParameters;
395  }
396  }
397  }
398  }
399  if ($startModule) {
400  if (is_array($moduleParameters)) {
401  $parameters = $moduleParameters;
402  } else {
403  $parameters = [];
404  parse_str($moduleParameters, $parameters);
405  }
406  $deepLink = $this->uriBuilder->buildUriFromRoute($startModule, $parameters);
407  return [$startModule, (string)$deepLink];
408  }
409  return [null, null];
410  }
411 
412  protected function ‪determineFirstAvailableBackendModule(): string
413  {
414  foreach ($this->moduleLoader->getModules() as $modData) {
415  $hasSubmodules = !empty($modData['sub']) && is_array($modData['sub']);
416  $isStandalone = $modData['standalone'] ?? false;
417  if ($isStandalone) {
418  return $modData['name'];
419  }
420 
421  if ($hasSubmodules) {
422  $firstSubmodule = reset($modData['sub']);
423  return $firstSubmodule['name'];
424  }
425  }
426 
427  return '';
428  }
429 
436  public function ‪addCss(‪$css)
437  {
438  if (!is_string(‪$css)) {
439  throw new \InvalidArgumentException('parameter $css must be of type string', 1195129642);
440  }
441  $this->css .= ‪$css;
442  }
443 
455  protected function ‪executeHook($identifier, array $hookConfiguration = [])
456  {
457  $options = &‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/backend.php'];
458  foreach ($options[$identifier] ?? [] as $hookFunction) {
459  GeneralUtility::callUserFunction($hookFunction, $hookConfiguration, $this);
460  }
461  }
462 
469  protected function ‪generateModuleMenu()
470  {
471  $view = $this->‪getFluidTemplateObject($this->templatePath . 'ModuleMenu/Main.html');
472  $view->assign('modules', $this->moduleStorage);
473  return $view->render();
474  }
475 
476  protected function ‪getCollapseStateOfMenu(): bool
477  {
478  $uc = json_decode((string)json_encode($this->‪getBackendUser()->uc), true);
479  $collapseState = $uc['BackendComponents']['States']['typo3-module-menu']['collapsed'] ?? false;
480 
481  return $collapseState === true || $collapseState === 'true';
482  }
483 
489  public function ‪getModuleMenu(): ResponseInterface
490  {
491  return new JsonResponse(['menu' => $this->‪generateModuleMenu()]);
492  }
493 
499  public function ‪getTopbar(): ResponseInterface
500  {
501  return new JsonResponse(['topbar' => $this->‪renderTopbar()]);
502  }
503 
510  protected function ‪getFluidTemplateObject($templatePathAndFileName = null)
511  {
512  $view = GeneralUtility::makeInstance(StandaloneView::class);
513  $view->setPartialRootPaths([GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Partials')]);
514  if ($templatePathAndFileName) {
515  $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templatePathAndFileName));
516  }
517  return $view;
518  }
519 
525  protected function ‪getLanguageService()
526  {
527  return ‪$GLOBALS['LANG'];
528  }
529 
535  protected function ‪getBackendUser()
536  {
537  return ‪$GLOBALS['BE_USER'];
538  }
539 }
‪TYPO3\CMS\Core\Utility\GeneralUtility\underscoredToLowerCamelCase
‪static string underscoredToLowerCamelCase($string)
Definition: GeneralUtility.php:841
‪TYPO3\CMS\Backend\Controller\BackendController\getModuleMenu
‪ResponseInterface getModuleMenu()
Definition: BackendController.php:484
‪TYPO3\CMS\Backend\Controller\BackendController\$moduleStorage
‪SplObjectStorage $moduleStorage
Definition: BackendController.php:71
‪TYPO3\CMS\Backend\Toolbar\ToolbarItemInterface
Definition: ToolbarItemInterface.php:22
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:25
‪TYPO3\CMS\Backend\Controller\BackendController\$css
‪string $css
Definition: BackendController.php:48
‪TYPO3\CMS\Backend\Controller\BackendController\$pageRenderer
‪PageRenderer $pageRenderer
Definition: BackendController.php:63
‪TYPO3\CMS\Core\Information\Typo3Version
Definition: Typo3Version.php:21
‪TYPO3\CMS\Backend\Controller\BackendController\renderToolbar
‪string renderToolbar()
Definition: BackendController.php:272
‪TYPO3\CMS\Core\Configuration\ExtensionConfiguration
Definition: ExtensionConfiguration.php:45
‪TYPO3\CMS\Backend\Template\ModuleTemplateFactory
Definition: ModuleTemplateFactory.php:29
‪TYPO3\CMS\Backend\Controller\BackendController\getFluidTemplateObject
‪TYPO3 CMS Fluid View StandaloneView getFluidTemplateObject($templatePathAndFileName=null)
Definition: BackendController.php:505
‪TYPO3\CMS\Backend\Controller\BackendController\$templatePath
‪string $templatePath
Definition: BackendController.php:56
‪TYPO3\CMS\Core\Utility\MathUtility\forceIntegerInRange
‪static int forceIntegerInRange($theInt, $min, $max=2000000000, $defaultValue=0)
Definition: MathUtility.php:32
‪TYPO3\CMS\Backend\Controller\BackendController\executeHook
‪executeHook($identifier, array $hookConfiguration=[])
Definition: BackendController.php:450
‪TYPO3\CMS\Backend\Controller\BackendController\determineFirstAvailableBackendModule
‪determineFirstAvailableBackendModule()
Definition: BackendController.php:407
‪TYPO3\CMS\Core\Page\JavaScriptModuleInstruction
Definition: JavaScriptModuleInstruction.php:23
‪TYPO3\CMS\Core\Utility\GeneralUtility\camelCaseToLowerCaseUnderscored
‪static string camelCaseToLowerCaseUnderscored($string)
Definition: GeneralUtility.php:853
‪TYPO3\CMS\Backend\Controller\BackendController\getStartupModule
‪array getStartupModule(ServerRequestInterface $request)
Definition: BackendController.php:356
‪TYPO3\CMS\Backend\Controller\BackendController\$moduleLoader
‪ModuleLoader $moduleLoader
Definition: BackendController.php:66
‪TYPO3\CMS\Core\Page\JavaScriptModuleInstruction\forRequireJS
‪static self forRequireJS(string $name, string $exportName=null)
Definition: JavaScriptModuleInstruction.php:49
‪TYPO3\CMS\Backend\Controller\BackendController\generateJavascript
‪generateJavascript(ServerRequestInterface $request)
Definition: BackendController.php:334
‪TYPO3\CMS\Backend\Controller\BackendController\renderTopbar
‪string renderTopbar()
Definition: BackendController.php:225
‪TYPO3\CMS\Backend\Controller\BackendController\$toolbarItems
‪array $toolbarItems
Definition: BackendController.php:52
‪TYPO3\CMS\Core\Information\Typo3Version\getVersion
‪getVersion()
Definition: Typo3Version.php:38
‪TYPO3\CMS\Backend\Routing\RouteRedirect
Definition: RouteRedirect.php:30
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:40
‪TYPO3\CMS\Backend\Controller\BackendController\mainAction
‪ResponseInterface mainAction(ServerRequestInterface $request)
Definition: BackendController.php:182
‪TYPO3\CMS\Backend\Module\ModuleLoader
Definition: ModuleLoader.php:34
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Backend\Controller\BackendController
Definition: BackendController.php:45
‪TYPO3\CMS\Backend\Controller\BackendController\addCss
‪addCss($css)
Definition: BackendController.php:431
‪TYPO3\CMS\Backend\Controller\BackendController\__construct
‪__construct(Typo3Version $typo3Version, UriBuilder $uriBuilder, PageRenderer $pageRenderer, ModuleLoader $moduleLoader, BackendModuleRepository $backendModuleRepository, ModuleTemplateFactory $moduleTemplateFactory)
Definition: BackendController.php:73
‪TYPO3\CMS\Backend\Controller\BackendController\getCollapseStateOfMenu
‪getCollapseStateOfMenu()
Definition: BackendController.php:471
‪TYPO3\CMS\Backend\Controller\BackendController\getBackendUser
‪BackendUserAuthentication getBackendUser()
Definition: BackendController.php:530
‪TYPO3\CMS\Core\Type\File\ImageInfo
Definition: ImageInfo.php:28
‪TYPO3\CMS\Backend\Domain\Repository\Module\BackendModuleRepository
Definition: BackendModuleRepository.php:34
‪TYPO3\CMS\Backend\Controller\BackendController\$typo3Version
‪Typo3Version $typo3Version
Definition: BackendController.php:64
‪TYPO3\CMS\Backend\Controller\BackendController\$partialPath
‪string $partialPath
Definition: BackendController.php:60
‪TYPO3\CMS\Backend\Controller\BackendController\$backendModuleRepository
‪BackendModuleRepository $backendModuleRepository
Definition: BackendController.php:62
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:31
‪TYPO3\CMS\Core\Http\JsonResponse
Definition: JsonResponse.php:28
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Backend\Controller\BackendController\$moduleTemplateFactory
‪ModuleTemplateFactory $moduleTemplateFactory
Definition: BackendController.php:67
‪TYPO3\CMS\Core\Utility\MathUtility
Definition: MathUtility.php:22
‪TYPO3\CMS\Core\Localization\LanguageService\includeLLFile
‪array includeLLFile($fileRef)
Definition: LanguageService.php:271
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Backend\Routing\RouteRedirect\createFromRequest
‪static createFromRequest(ServerRequestInterface $request)
Definition: RouteRedirect.php:58
‪$extConf
‪$extConf
Definition: ext_localconf.php:59
‪TYPO3\CMS\Core\Utility\PathUtility\getAbsoluteWebPath
‪static string getAbsoluteWebPath($targetPath, bool $prefixWithSitePath=true)
Definition: PathUtility.php:51
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Backend\Controller\BackendController\initializeToolbarItems
‪initializeToolbarItems()
Definition: BackendController.php:147
‪TYPO3\CMS\Backend\Controller\BackendController\getLanguageService
‪LanguageService getLanguageService()
Definition: BackendController.php:520
‪TYPO3\CMS\Backend\Routing\Router
Definition: Router.php:39
‪TYPO3\CMS\Backend\Controller\BackendController\generateModuleMenu
‪string generateModuleMenu()
Definition: BackendController.php:464
‪TYPO3\CMS\Backend\Controller
Definition: AboutController.php:16
‪TYPO3\CMS\Backend\Controller\BackendController\getTopbar
‪ResponseInterface getTopbar()
Definition: BackendController.php:494
‪TYPO3\CMS\Core\Http\HtmlResponse
Definition: HtmlResponse.php:26
‪TYPO3\CMS\Backend\Controller\BackendController\$uriBuilder
‪UriBuilder $uriBuilder
Definition: BackendController.php:65