‪TYPO3CMS  ‪main
MainController.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\Http\Message\ServerRequestInterface;
30 use TYPO3\CMS\Adminpanel\Utility\ResourceUtility;
38 
49 {
51  protected array ‪$modules = [];
53 
54  public function ‪__construct(
55  private readonly ‪ModuleLoader $moduleLoader,
56  private readonly ‪UriBuilder $uriBuilder,
57  private readonly ‪RequestId $requestId,
58  ) {
59  $this->adminPanelModuleConfiguration = ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules'] ?? [];
60  }
61 
65  public function ‪initialize(ServerRequestInterface $request): ServerRequestInterface
66  {
67  $this->modules = $this->moduleLoader->validateSortAndInitializeModules(
68  $this->adminPanelModuleConfiguration
69  );
71  $request = $this->‪initializeModules($request, $this->modules);
72  }
73  return $request;
74  }
75 
81  public function ‪render(ServerRequestInterface $request): string
82  {
83  $resources = ResourceUtility::getResources(['nonce' => $this->requestId->nonce->b64]);
84 
85  $view = GeneralUtility::makeInstance(StandaloneView::class);
86  $templateNameAndPath = 'EXT:adminpanel/Resources/Private/Templates/Main.html';
87  $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templateNameAndPath));
88  $view->setPartialRootPaths(['EXT:adminpanel/Resources/Private/Partials']);
89  $view->setLayoutRootPaths(['EXT:adminpanel/Resources/Private/Layouts']);
90 
91  $view->assignMultiple(
92  [
93  'toggleActiveUrl' => $this->‪generateBackendUrl('ajax_adminPanel_toggle'),
94  'resources' => $resources,
95  'adminPanelActive' => ‪StateUtility::isOpen(),
96  'languageKey' => $this->‪getBackendUser()->user['lang'] ?? null,
97  ]
98  );
100  $cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('adminpanel_requestcache');
101  $requestId = $request->getAttribute('adminPanelRequestId');
102  $data = $cache->get($requestId);
103  $moduleResources = ResourceUtility::getAdditionalResourcesForModules($this->modules, ['nonce' => $this->requestId->nonce->b64]);
104  $settingsModules = array_filter($this->modules, static function (‪ModuleInterface $module): bool {
105  return $module instanceof ‪PageSettingsProviderInterface;
106  });
107  $parentModules = array_filter(
108  $this->modules,
109  static function (‪ModuleInterface $module): bool {
110  return $module instanceof ‪SubmoduleProviderInterface && $module instanceof ‪ShortInfoProviderInterface;
111  }
112  );
113  foreach ($parentModules as $parentModule) {
114  $parentModule->setModuleData($data);
115  }
116 
117  $frontendController = $request->getAttribute('frontend.controller');
118  $routeIdentifier = 'web_layout';
119  $arguments = [
120  'id' => $frontendController->id ?? 0,
121  ];
122  $backendUrl = (string)$this->uriBuilder->buildUriFromRoute(
123  $routeIdentifier,
124  $arguments,
126  );
127 
128  $view->assignMultiple(
129  [
130  'modules' => $this->modules,
131  'settingsModules' => $settingsModules,
132  'parentModules' => $parentModules,
133  'saveUrl' => $this->‪generateBackendUrl('ajax_adminPanel_saveForm'),
134  'moduleResources' => $moduleResources,
135  'requestId' => $requestId,
136  'data' => $data ?? [],
137  'backendUrl' => $backendUrl,
138  ]
139  );
140  }
141  return $view->render();
142  }
143 
149  public function ‪storeData(ServerRequestInterface $request): void
150  {
151  if (‪StateUtility::isOpen()) {
152  $data = $this->‪storeDataPerModule(
153  $request,
154  $this->modules,
155  GeneralUtility::makeInstance(ModuleDataStorageCollection::class)
156  );
157  $cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('adminpanel_requestcache');
158  $cache->set($request->getAttribute('adminPanelRequestId'), $data);
159  $cache->collectGarbage();
160  }
161  }
162 
166  protected function ‪generateBackendUrl(string $route): string
167  {
168  return (string)$this->uriBuilder->buildUriFromRoute($route);
169  }
170 
174  protected function ‪initializeModules(ServerRequestInterface $request, array ‪$modules): ServerRequestInterface
175  {
176  foreach (‪$modules as $module) {
177  if (
178  ($module instanceof ‪RequestEnricherInterface)
179  && (
180  (($module instanceof ‪ConfigurableInterface) && $module->isEnabled())
181  || (!($module instanceof ‪ConfigurableInterface))
182  )
183  ) {
184  $request = $module->enrich($request);
185  }
186  if ($module instanceof ‪SubmoduleProviderInterface) {
187  $request = $this->‪initializeModules($request, $module->getSubModules());
188  }
189  }
190  return $request;
191  }
192 
196  protected function ‪storeDataPerModule(ServerRequestInterface $request, array ‪$modules, ‪ModuleDataStorageCollection $data): ‪ModuleDataStorageCollection
197  {
198  foreach (‪$modules as $module) {
199  if (
200  ($module instanceof ‪DataProviderInterface)
201  && (
202  (($module instanceof ‪ConfigurableInterface) && $module->isEnabled())
203  || (!($module instanceof ‪ConfigurableInterface))
204  )
205  ) {
206  $data->‪addModuleData($module, $module->getDataToStore($request));
207  }
208 
209  if ($module instanceof ‪SubmoduleProviderInterface) {
210  $this->‪storeDataPerModule($request, $module->getSubModules(), $data);
211  }
212  }
213  return $data;
214  }
215 
217  {
218  return ‪$GLOBALS['BE_USER'];
219  }
220 }
‪TYPO3\CMS\Adminpanel\Controller\MainController
Definition: MainController.php:49
‪TYPO3\CMS\Adminpanel\ModuleApi\ModuleDataStorageCollection\addModuleData
‪addModuleData(DataProviderInterface $module, ModuleData $moduleData)
Definition: ModuleDataStorageCollection.php:25
‪TYPO3\CMS\Adminpanel\ModuleApi\ModuleDataStorageCollection
Definition: ModuleDataStorageCollection.php:24
‪TYPO3\CMS\Adminpanel\Controller\MainController\render
‪render(ServerRequestInterface $request)
Definition: MainController.php:81
‪TYPO3\CMS\Adminpanel\Controller
Definition: AjaxController.php:18
‪TYPO3\CMS\Adminpanel\Service\ModuleLoader
Definition: ModuleLoader.php:32
‪TYPO3\CMS\Adminpanel\Controller\MainController\generateBackendUrl
‪generateBackendUrl(string $route)
Definition: MainController.php:166
‪TYPO3\CMS\Adminpanel\ModuleApi\ConfigurableInterface
Definition: ConfigurableInterface.php:29
‪TYPO3\CMS\Adminpanel\ModuleApi\DataProviderInterface
Definition: DataProviderInterface.php:30
‪TYPO3\CMS\Adminpanel\Controller\MainController\storeDataPerModule
‪storeDataPerModule(ServerRequestInterface $request, array $modules, ModuleDataStorageCollection $data)
Definition: MainController.php:196
‪TYPO3\CMS\Adminpanel\Utility\StateUtility
Definition: StateUtility.php:28
‪TYPO3\CMS\Adminpanel\Utility\StateUtility\isActivatedForUser
‪static isActivatedForUser()
Definition: StateUtility.php:32
‪TYPO3\CMS\Backend\Routing\UriBuilder\SHAREABLE_URL
‪const SHAREABLE_URL
Definition: UriBuilder.php:58
‪TYPO3\CMS\Adminpanel\ModuleApi\ShortInfoProviderInterface
Definition: ShortInfoProviderInterface.php:30
‪TYPO3\CMS\Adminpanel\Controller\MainController\__construct
‪__construct(private readonly ModuleLoader $moduleLoader, private readonly UriBuilder $uriBuilder, private readonly RequestId $requestId,)
Definition: MainController.php:54
‪TYPO3\CMS\Adminpanel\Utility\StateUtility\isOpen
‪static isOpen()
Definition: StateUtility.php:49
‪TYPO3\CMS\Adminpanel\Controller\MainController\initializeModules
‪initializeModules(ServerRequestInterface $request, array $modules)
Definition: MainController.php:174
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Core\Core\RequestId
Definition: RequestId.php:26
‪TYPO3\CMS\Core\Cache\CacheManager
Definition: CacheManager.php:36
‪TYPO3\CMS\Adminpanel\ModuleApi\ModuleInterface
Definition: ModuleInterface.php:26
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:64
‪TYPO3\CMS\Adminpanel\Controller\MainController\$adminPanelModuleConfiguration
‪array $adminPanelModuleConfiguration
Definition: MainController.php:52
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:30
‪TYPO3\CMS\Adminpanel\ModuleApi\PageSettingsProviderInterface
Definition: PageSettingsProviderInterface.php:32
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Adminpanel\Controller\MainController\getBackendUser
‪getBackendUser()
Definition: MainController.php:216
‪TYPO3\CMS\Adminpanel\Controller\MainController\$modules
‪array $modules
Definition: MainController.php:51
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:51
‪TYPO3\CMS\Adminpanel\ModuleApi\SubmoduleProviderInterface
Definition: SubmoduleProviderInterface.php:30
‪TYPO3\CMS\Adminpanel\Controller\MainController\storeData
‪storeData(ServerRequestInterface $request)
Definition: MainController.php:149
‪TYPO3\CMS\Adminpanel\Controller\MainController\initialize
‪initialize(ServerRequestInterface $request)
Definition: MainController.php:65
‪TYPO3\CMS\Adminpanel\ModuleApi\RequestEnricherInterface
Definition: RequestEnricherInterface.php:37