‪TYPO3CMS  ‪main
BackendController.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\EventDispatcher\EventDispatcherInterface;
21 use Psr\Http\Message\ResponseInterface;
22 use Psr\Http\Message\ServerRequestInterface;
49 use TYPO3\CMS\Core\Type\File\ImageInfo;
54 
59 #[AsController]
61 {
63 
67  protected array ‪$modules;
68 
69  public function ‪__construct(
70  protected readonly ‪Typo3Version $typo3Version,
71  protected readonly ‪UriBuilder $uriBuilder,
72  protected readonly ‪PageRenderer $pageRenderer,
73  protected readonly ‪ModuleProvider $moduleProvider,
74  protected readonly ‪ToolbarItemsRegistry $toolbarItemsRegistry,
75  protected readonly ‪ExtensionConfiguration $extensionConfiguration,
76  protected readonly ‪BackendViewFactory $viewFactory,
77  protected readonly EventDispatcherInterface $eventDispatcher,
78  protected readonly ‪FlashMessageService $flashMessageService,
79  protected readonly ‪BackendEntryPointResolver $backendEntryPointResolver,
80  ) {
81  $this->modules = $this->moduleProvider->getModulesForModuleMenu($this->‪getBackendUser());
82  }
83 
87  public function ‪mainAction(ServerRequestInterface $request): ResponseInterface
88  {
89  $backendUser = $this->‪getBackendUser();
90  $pageRenderer = $this->pageRenderer;
91  // apply nonce hint for elements that are shown in a modal
92  $pageRenderer->setApplyNonceHint(true);
93 
94  $this->‪setUpBasicPageRendererForBackend($pageRenderer, $this->extensionConfiguration, $request, $this->‪getLanguageService());
95 
96  $javaScriptRenderer = $pageRenderer->getJavaScriptRenderer();
97  $javaScriptRenderer->addGlobalAssignment(['window' => [
98  'name' => 'typo3-backend', // reset window name to a standardized value
99  'opener' => null, // remove any previously set opener value
100  ]]);
101  $javaScriptRenderer->addJavaScriptModuleInstruction(
102  ‪JavaScriptModuleInstruction::create('@typo3/backend/login-refresh.js')
103  ->invoke('initialize', [
104  'intervalTime' => ‪MathUtility::forceIntegerInRange((int)‪$GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout'] - 60, 60),
105  'requestTokenUrl' => (string)$this->uriBuilder->buildUriFromRoute('login_request_token'),
106  'loginFramesetUrl' => (string)$this->uriBuilder->buildUriFromRoute('login_frameset'),
107  'logoutUrl' => (string)$this->uriBuilder->buildUriFromRoute('logout'),
108  ])
109  );
110  $javaScriptRenderer->addJavaScriptModuleInstruction(
111  ‪JavaScriptModuleInstruction::create('@typo3/backend/broadcast-service.js')->invoke('listen')
112  );
113  $javaScriptRenderer->addJavaScriptModuleInstruction(
114  ‪JavaScriptModuleInstruction::create('@typo3/backend/hotkeys.js')
115  );
116  // load the storage API and fill the UC into the PersistentStorage, so no additional AJAX call is needed
117  $javaScriptRenderer->addJavaScriptModuleInstruction(
118  ‪JavaScriptModuleInstruction::create('@typo3/backend/storage/persistent.js')
119  ->invoke('load', $backendUser->uc)
120  );
121  $javaScriptRenderer->addGlobalAssignment([
122  'TYPO3' => [
123  'configuration' => [
124  'username' => htmlspecialchars($backendUser->user['username']),
125  'showRefreshLoginPopup' => (bool)(‪$GLOBALS['TYPO3_CONF_VARS']['BE']['showRefreshLoginPopup'] ?? false),
126  ],
127  ],
128  ]);
129  $javaScriptRenderer->includeTaggedImports('backend.module');
130  $javaScriptRenderer->includeTaggedImports('backend.navigation-component');
131 
132  // @todo: This loads a ton of labels into JS. This should be reviewed what is really needed.
133  // This could happen when the localization API gets an overhaul.
134  $pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/locallang_core.xlf');
135  $pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/locallang_misc.xlf');
136  $pageRenderer->addInlineLanguageLabelFile('EXT:backend/Resources/Private/Language/locallang_layout.xlf');
137  $pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf');
138  $pageRenderer->addInlineLanguageLabelFile('EXT:core/Resources/Private/Language/wizard.xlf');
139 
140  // @todo: We can not put this into the template since PageRendererViewHelper does not deal with namespace in addInlineSettings argument
141  $pageRenderer->addInlineSetting('ShowItem', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('show_item'));
142  $pageRenderer->addInlineSetting('RecordHistory', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('record_history'));
143  $pageRenderer->addInlineSetting('NewRecord', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('db_new'));
144  $pageRenderer->addInlineSetting('FormEngine', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('record_edit'));
145  $pageRenderer->addInlineSetting('RecordCommit', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('tce_db'));
146  $pageRenderer->addInlineSetting('FileCommit', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('tce_file'));
147  $pageRenderer->addInlineSetting('Clipboard', 'moduleUrl', (string)$this->uriBuilder->buildUriFromRoute('clipboard_process'));
148  $dateFormat = ['dd-MM-yyyy', 'HH:mm dd-MM-yyyy'];
149  // Needed for FormEngine manipulation (date picker)
150  $pageRenderer->addInlineSetting('DateTimePicker', 'DateFormat', $dateFormat);
151  $typo3Version = 'TYPO3 CMS ' . $this->typo3Version->getVersion();
152  $title = ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] ? ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . ' [' . $typo3Version . ']' : $typo3Version;
153  $pageRenderer->setTitle($title);
154 
155  $view = $this->viewFactory->create($request);
156  $this->‪assignTopbarDetailsToView($request, $view);
157  $view->assignMultiple([
158  'modules' => $this->modules,
159  'modulesCollapsed' => $this->‪getCollapseStateOfMenu(),
160  'modulesInformation' => GeneralUtility::jsonEncodeForHtmlAttribute($this->‪getModulesInformation(), false),
161  'startupModule' => $this->‪getStartupModule($request),
162  'entryPoint' => $this->backendEntryPointResolver->getPathFromRequest($request),
163  'stateTracker' => (string)$this->uriBuilder->buildUriFromRoute('state-tracker'),
164  'sitename' => $title,
165  'sitenameFirstInBackendTitle' => ($backendUser->uc['backendTitleFormat'] ?? '') === 'sitenameFirst',
166  ]);
167  $content = $view->render('Backend/Main');
168  $content = $this->eventDispatcher->dispatch(new ‪AfterBackendPageRenderEvent($content, $view))->getContent();
169  $pageRenderer->addBodyContent('<body>' . $content);
170  return $pageRenderer->renderResponse();
171  }
172 
178  public function ‪getModuleMenu(ServerRequestInterface $request): ResponseInterface
179  {
180  $view = $this->viewFactory->create($request);
181  $view->assignMultiple([
182  'modulesInformation' => GeneralUtility::jsonEncodeForHtmlAttribute($this->‪getModulesInformation(), false),
183  'modules' => $this->modules,
184  ]);
185  return new JsonResponse(['menu' => $view->render('Backend/ModuleMenu')]);
186  }
187 
192  public function ‪getTopbar(ServerRequestInterface $request): ResponseInterface
193  {
194  $view = $this->viewFactory->create($request);
195  $this->‪assignTopbarDetailsToView($request, $view);
196  return new JsonResponse(['topbar' => $view->render('Backend/Topbar')]);
197  }
198 
202  protected function ‪assignTopbarDetailsToView(ServerRequestInterface $request, ViewInterface $view): void
203  {
204  // Extension Configuration to find the TYPO3 logo in the left corner
205  $extConf = $this->extensionConfiguration->get('backend');
206  $logoPath = '';
207  if (!empty($extConf['backendLogo'])) {
208  $customBackendLogo = GeneralUtility::getFileAbsFileName(ltrim($extConf['backendLogo'], '/'));
209  if (!empty($customBackendLogo)) {
210  $logoPath = $customBackendLogo;
211  }
212  }
213  // if no custom logo was set or the path is invalid, use the original one
214  if (empty($logoPath) || !file_exists($logoPath)) {
215  $logoPath = GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Public/Images/typo3_logo_orange.svg');
216  $logoWidth = 22;
217  $logoHeight = 22;
218  } else {
219  // set width/height for custom logo
220  $imageInfo = GeneralUtility::makeInstance(ImageInfo::class, $logoPath);
221  $logoWidth = $imageInfo->getWidth() ?: 22;
222  $logoHeight = $imageInfo->getHeight() ?: 22;
223 
224  // High-resolution?
225  if (str_contains($logoPath, '@2x.')) {
226  $logoWidth /= 2;
227  $logoHeight /= 2;
228  }
229  }
230  $view->assign('hasModules', (bool)$this->modules);
231  $view->assign('logoUrl', ‪PathUtility::getAbsoluteWebPath($logoPath));
232  $view->assign('logoWidth', $logoWidth);
233  $view->assign('logoHeight', $logoHeight);
234  $view->assign('applicationVersion', $this->typo3Version->getVersion());
235  $view->assign('siteName', ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']);
236  $view->assign('toolbarItems', $this->‪getToolbarItems($request));
237  $view->assign('isInWorkspace', $this->‪getBackendUser()->workspace > 0);
238  }
239 
243  protected function ‪getToolbarItems(ServerRequestInterface $request): array
244  {
245  return array_map(static function (ToolbarItemInterface $toolbarItem) use ($request): ToolbarItemInterface {
246  if ($toolbarItem instanceof RequestAwareToolbarItemInterface) {
247  $toolbarItem->setRequest($request);
248  }
249  return $toolbarItem;
250  }, array_filter(
251  $this->toolbarItemsRegistry->getToolbarItems(),
252  static fn(ToolbarItemInterface $toolbarItem): bool => $toolbarItem->checkAccess()
253  ));
254  }
255 
259  protected function ‪getStartupModule(ServerRequestInterface $request): array
260  {
261  $startModule = null;
262  $startModuleIdentifier = null;
263  $inaccessibleRedirectModule = null;
264  $moduleParameters = [];
265  try {
266  $redirect = ‪RouteRedirect::createFromRequest($request);
267  if ($redirect !== null && $request->getMethod() === 'GET') {
268  // Only redirect to existing non-ajax routes with no restriction to a specific method
269  $redirect->resolve(GeneralUtility::makeInstance(Router::class));
270  if ($this->‪isSpecialNoModuleRoute($redirect->getName())
271  || $this->moduleProvider->accessGranted($redirect->getName(), $this->getBackendUser())
272  ) {
273  // Only add start module from request in case user has access or it's a no module route,
274  // e.g. to FormEngine where permissions are checked by the corresponding component.
275  // Access might temporarily be blocked. e.g. due to being in a workspace.
276  $startModuleIdentifier = $redirect->getName();
277  $moduleParameters = $redirect->getParameters();
278  } elseif ($this->moduleProvider->isModuleRegistered($redirect->getName())) {
279  // A redirect is set, however, the user is not allowed to access the module.
280  // Store the requested module to later inform the user about the forced redirect.
281  $inaccessibleRedirectModule = $this->moduleProvider->getModule($redirect->getName());
282  }
283  }
284  } finally {
285  // No valid redirect, check for the start module
286  if (!$startModuleIdentifier) {
287  $backendUser = $this->‪getBackendUser();
288  // start module on first login, will be removed once used the first time
289  if (isset($backendUser->uc['startModuleOnFirstLogin'])) {
290  $startModuleIdentifier = $backendUser->uc['startModuleOnFirstLogin'];
291  unset($backendUser->uc['startModuleOnFirstLogin']);
292  $backendUser->writeUC();
293  } elseif (isset($backendUser->uc['startModule']) && $this->moduleProvider->accessGranted($backendUser->uc['startModule'], $backendUser)) {
294  $startModuleIdentifier = $backendUser->uc['startModule'];
295  } elseif ($firstAccessibleModule = $this->moduleProvider->getFirstAccessibleModule($backendUser)) {
296  $startModuleIdentifier = $firstAccessibleModule->getIdentifier();
297  }
298 
299  // check if the start module has additional parameters, so a redirect to a specific
300  // action is possible
301  if (is_string($startModuleIdentifier) && str_contains($startModuleIdentifier, '->')) {
302  [$startModuleIdentifier, $startModuleParameters] = explode('->', $startModuleIdentifier, 2);
303  // if no GET parameters are set, check if there are parameters given from the UC
304  if (!$moduleParameters && $startModuleParameters) {
305  $moduleParameters = $startModuleParameters;
306  }
307  }
308  }
309  }
310  if ($startModuleIdentifier) {
311  if ($this->moduleProvider->isModuleRegistered($startModuleIdentifier)) {
312  // startModuleIdentifier may be an alias, resolve original module
313  $startModule = $this->moduleProvider->getModule($startModuleIdentifier, $this->‪getBackendUser());
314  $startModuleIdentifier = $startModule?->getIdentifier();
315  }
316  if (is_array($moduleParameters)) {
317  $parameters = $moduleParameters;
318  } else {
319  $parameters = [];
320  parse_str($moduleParameters, $parameters);
321  }
322  try {
323  $deepLink = $this->uriBuilder->buildUriFromRoute($startModuleIdentifier, $parameters);
324  if ($startModule !== null && $inaccessibleRedirectModule !== null) {
325  $this->‪enqueueRedirectMessage($startModule, $inaccessibleRedirectModule);
326  }
327  return [$startModuleIdentifier, (string)$deepLink];
328  } catch (RouteNotFoundException $e) {
329  // It might be, that the user does not have access to the
330  // $startModule, e.g. for modules with workspace restrictions.
331  }
332  }
333  return [null, null];
334  }
335 
339  protected function ‪getModulesInformation(): array
340  {
341  ‪$modules = [];
342  foreach ($this->moduleProvider->getModules(user: $this->getBackendUser(), grouped: false) as ‪$identifier => $module) {
343  $menuModule = new MenuModule(clone $module);
345  'name' => ‪$identifier,
346  'component' => $menuModule->getComponent(),
347  'navigationComponentId' => $menuModule->getNavigationComponent(),
348  'parent' => $menuModule->hasParentModule() ? $menuModule->getParentIdentifier() : '',
349  'link' => $menuModule->getShouldBeLinked() ? (string)$this->uriBuilder->buildUriFromRoute($module->getIdentifier()) : '',
350  ];
351  }
352 
353  return ‪$modules;
354  }
355 
356  protected function ‪getCollapseStateOfMenu(): bool
357  {
358  $backendUser = $this->‪getBackendUser();
359  $uc = json_decode((string)json_encode($backendUser->uc), true);
360  $collapseState = $uc['BackendComponents']['States']['typo3-module-menu']['collapsed'] ?? false;
361  return $collapseState === true || $collapseState === 'true';
362  }
363 
364  protected function ‪enqueueRedirectMessage(‪ModuleInterface $requestedModule, ‪ModuleInterface $redirectedModule): void
365  {
366  $languageService = $this->‪getLanguageService();
367  $this->flashMessageService
368  ->getMessageQueueByIdentifier(‪FlashMessageQueue::NOTIFICATION_QUEUE)
369  ->enqueue(
370  new ‪FlashMessage(
371  sprintf(
372  $languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang.xlf:module.noAccess.message'),
373  $languageService->sL($redirectedModule->‪getTitle()),
374  $languageService->sL($requestedModule->‪getTitle())
375  ),
376  $languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang.xlf:module.noAccess.title'),
377  ContextualFeedbackSeverity::INFO,
378  true
379  )
380  );
381  }
382 
386  protected function ‪isSpecialNoModuleRoute(string $routeIdentifier): bool
387  {
388  return in_array($routeIdentifier, ['record_edit', 'file_edit'], true);
389  }
390 
391  protected function ‪getBackendUser(): ‪BackendUserAuthentication
392  {
393  return ‪$GLOBALS['BE_USER'];
394  }
395 
396  protected function ‪getLanguageService(): ‪LanguageService
397  {
398  return ‪$GLOBALS['LANG'];
399  }
400 }
‪TYPO3\CMS\Backend\Controller\BackendController\assignTopbarDetailsToView
‪assignTopbarDetailsToView(ServerRequestInterface $request, ViewInterface $view)
Definition: BackendController.php:201
‪TYPO3\CMS\Backend\Toolbar\ToolbarItemInterface
Definition: ToolbarItemInterface.php:22
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:27
‪TYPO3\CMS\Core\View\ViewInterface
Definition: ViewInterface.php:24
‪TYPO3\CMS\Backend\Controller\BackendController\getToolbarItems
‪ToolbarItemInterface[] getToolbarItems(ServerRequestInterface $request)
Definition: BackendController.php:242
‪TYPO3\CMS\Core\Information\Typo3Version
Definition: Typo3Version.php:21
‪TYPO3\CMS\Backend\View\BackendViewFactory
Definition: BackendViewFactory.php:35
‪TYPO3\CMS\Core\Configuration\ExtensionConfiguration
Definition: ExtensionConfiguration.php:47
‪TYPO3\CMS\Backend\Controller\BackendController\mainAction
‪mainAction(ServerRequestInterface $request)
Definition: BackendController.php:86
‪TYPO3\CMS\Backend\Controller\BackendController\isSpecialNoModuleRoute
‪isSpecialNoModuleRoute(string $routeIdentifier)
Definition: BackendController.php:385
‪TYPO3\CMS\Core\Page\JavaScriptModuleInstruction\create
‪static create(string $name, string $exportName=null)
Definition: JavaScriptModuleInstruction.php:47
‪TYPO3\CMS\Backend\Template\PageRendererBackendSetupTrait
Definition: PageRendererBackendSetupTrait.php:45
‪TYPO3\CMS\Backend\Controller\BackendController\getBackendUser
‪getBackendUser()
Definition: BackendController.php:390
‪TYPO3\CMS\Core\Page\JavaScriptModuleInstruction
Definition: JavaScriptModuleInstruction.php:23
‪TYPO3\CMS\Backend\Toolbar\ToolbarItemsRegistry
Definition: ToolbarItemsRegistry.php:25
‪TYPO3\CMS\Backend\Module\ModuleProvider
Definition: ModuleProvider.php:29
‪TYPO3\CMS\Backend\Controller\BackendController\getModulesInformation
‪getModulesInformation()
Definition: BackendController.php:338
‪TYPO3\CMS\Core\View\ViewInterface\assign
‪assign(string $key, mixed $value)
‪TYPO3\CMS\Backend\Controller\Event\AfterBackendPageRenderEvent
Definition: AfterBackendPageRenderEvent.php:29
‪TYPO3\CMS\Backend\Controller\BackendController\getStartupModule
‪getStartupModule(ServerRequestInterface $request)
Definition: BackendController.php:258
‪TYPO3\CMS\Backend\Module\ModuleInterface\getTitle
‪getTitle()
‪TYPO3\CMS\Core\Type\ContextualFeedbackSeverity
‪ContextualFeedbackSeverity
Definition: ContextualFeedbackSeverity.php:25
‪TYPO3\CMS\Core\Utility\PathUtility\getAbsoluteWebPath
‪static string getAbsoluteWebPath(string $targetPath, bool $prefixWithSitePath=true)
Definition: PathUtility.php:52
‪TYPO3\CMS\Core\Page\PageRenderer
Definition: PageRenderer.php:44
‪TYPO3\CMS\Core\Messaging\FlashMessageQueue\NOTIFICATION_QUEUE
‪const NOTIFICATION_QUEUE
Definition: FlashMessageQueue.php:31
‪TYPO3\CMS\Backend\Routing\Exception\RouteNotFoundException
Definition: RouteNotFoundException.php:21
‪TYPO3\CMS\Backend\Controller\BackendController\__construct
‪__construct(protected readonly Typo3Version $typo3Version, protected readonly UriBuilder $uriBuilder, protected readonly PageRenderer $pageRenderer, protected readonly ModuleProvider $moduleProvider, protected readonly ToolbarItemsRegistry $toolbarItemsRegistry, protected readonly ExtensionConfiguration $extensionConfiguration, protected readonly BackendViewFactory $viewFactory, protected readonly EventDispatcherInterface $eventDispatcher, protected readonly FlashMessageService $flashMessageService, protected readonly BackendEntryPointResolver $backendEntryPointResolver,)
Definition: BackendController.php:68
‪TYPO3\CMS\Backend\Routing\RouteRedirect
Definition: RouteRedirect.php:30
‪TYPO3\CMS\Backend\Controller\BackendController\getModuleMenu
‪getModuleMenu(ServerRequestInterface $request)
Definition: BackendController.php:177
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Backend\Module\MenuModule
Definition: MenuModule.php:26
‪TYPO3\CMS\Backend\Controller\BackendController\getLanguageService
‪getLanguageService()
Definition: BackendController.php:395
‪TYPO3\CMS\Backend\Module\ModuleInterface
Definition: ModuleInterface.php:24
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:61
‪TYPO3\CMS\Backend\Toolbar\ToolbarItemInterface\checkAccess
‪bool checkAccess()
‪TYPO3\CMS\Backend\Controller\BackendController
Definition: BackendController.php:61
‪TYPO3\CMS\Backend\Controller\BackendController\getTopbar
‪getTopbar(ServerRequestInterface $request)
Definition: BackendController.php:191
‪TYPO3\CMS\Backend\Controller\BackendController\getCollapseStateOfMenu
‪getCollapseStateOfMenu()
Definition: BackendController.php:355
‪TYPO3\CMS\Backend\Toolbar\RequestAwareToolbarItemInterface
Definition: RequestAwareToolbarItemInterface.php:27
‪TYPO3\CMS\Backend\Controller\BackendController\enqueueRedirectMessage
‪enqueueRedirectMessage(ModuleInterface $requestedModule, ModuleInterface $redirectedModule)
Definition: BackendController.php:363
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:27
‪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\$modules
‪array $modules
Definition: BackendController.php:66
‪TYPO3\CMS\Backend\Template\PageRendererBackendSetupTrait\setUpBasicPageRendererForBackend
‪setUpBasicPageRendererForBackend(PageRenderer $pageRenderer, ExtensionConfiguration $extensionConfiguration, ServerRequestInterface $request, LanguageService $languageService,)
Definition: PageRendererBackendSetupTrait.php:49
‪TYPO3\CMS\Core\Utility\MathUtility
Definition: MathUtility.php:24
‪TYPO3\CMS\Backend\Attribute\AsController
Definition: AsController.php:25
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:46
‪TYPO3\CMS\Backend\Routing\RouteRedirect\createFromRequest
‪static createFromRequest(ServerRequestInterface $request)
Definition: RouteRedirect.php:58
‪TYPO3\CMS\Core\Utility\MathUtility\forceIntegerInRange
‪static int forceIntegerInRange(mixed $theInt, int $min, int $max=2000000000, int $defaultValue=0)
Definition: MathUtility.php:34
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Backend\Routing\Router
Definition: Router.php:40
‪TYPO3\CMS\Core\Messaging\FlashMessageQueue
Definition: FlashMessageQueue.php:29
‪TYPO3\CMS\Backend\Controller
Definition: AboutController.php:18
‪TYPO3\CMS\Core\Routing\BackendEntryPointResolver
Definition: BackendEntryPointResolver.php:29
‪TYPO3\CMS\Core\Messaging\FlashMessageService
Definition: FlashMessageService.php:27
‪TYPO3\CMS\Webhooks\Message\$identifier
‪identifier readonly string $identifier
Definition: FileAddedMessage.php:37