‪TYPO3CMS  11.5
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;
31 use TYPO3\CMS\Adminpanel\Utility\ResourceUtility;
39 
46 {
50  protected ‪$modules = [];
51 
55  protected ‪$moduleLoader;
56 
60  protected ‪$uriBuilder;
61 
66 
71 
77  public function ‪__construct(
81  ) {
82  $this->moduleLoader = ‪$moduleLoader ?? GeneralUtility::makeInstance(ModuleLoader::class);
83  $this->uriBuilder = ‪$uriBuilder ?? GeneralUtility::makeInstance(UriBuilder::class);
84  $this->configurationService = ‪$configurationService
85  ??
86  GeneralUtility::makeInstance(ConfigurationService::class);
87  $this->adminPanelModuleConfiguration = ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules'] ?? [];
88  }
89 
96  public function ‪initialize(ServerRequestInterface $request): ServerRequestInterface
97  {
98  $this->modules = $this->moduleLoader->validateSortAndInitializeModules(
99  $this->adminPanelModuleConfiguration
100  );
101 
103  $request = $this->‪initializeModules($request, $this->modules);
104  }
105  return $request;
106  }
107 
115  public function ‪render(ServerRequestInterface $request): string
116  {
117  $resources = ResourceUtility::getResources();
118 
119  $view = GeneralUtility::makeInstance(StandaloneView::class);
120  $templateNameAndPath = 'EXT:adminpanel/Resources/Private/Templates/Main.html';
121  $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templateNameAndPath));
122  $view->setPartialRootPaths(['EXT:adminpanel/Resources/Private/Partials']);
123  $view->setLayoutRootPaths(['EXT:adminpanel/Resources/Private/Layouts']);
124 
125  $view->assignMultiple(
126  [
127  'toggleActiveUrl' => $this->‪generateBackendUrl('ajax_adminPanel_toggle'),
128  'resources' => $resources,
129  'adminPanelActive' => ‪StateUtility::isOpen(),
130  'languageKey' => $this->‪getBackendUser()->user['lang'] ?? null,
131  ]
132  );
133  if (‪StateUtility::isOpen()) {
134  $cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('adminpanel_requestcache');
135  $requestId = $request->getAttribute('adminPanelRequestId');
136  $data = $cache->get($requestId);
137  $moduleResources = ResourceUtility::getAdditionalResourcesForModules($this->modules);
138  $settingsModules = array_filter($this->modules, static function (ModuleInterface $module) {
139  return $module instanceof PageSettingsProviderInterface;
140  });
141  $parentModules = array_filter(
142  $this->modules,
143  static function (ModuleInterface $module) {
144  return $module instanceof SubmoduleProviderInterface && $module instanceof ShortInfoProviderInterface;
145  }
146  );
147  $view->assignMultiple(
148  [
149  'modules' => $this->modules,
150  'settingsModules' => $settingsModules,
151  'parentModules' => $parentModules,
152  'saveUrl' => $this->‪generateBackendUrl('ajax_adminPanel_saveForm'),
153  'moduleResources' => $moduleResources,
154  'requestId' => $requestId,
155  'data' => $data ?? [],
156  ]
157  );
158  }
159  return $view->render();
160  }
161 
169  public function ‪storeData(ServerRequestInterface $request): void
170  {
171  if (‪StateUtility::isOpen()) {
172  $data = $this->‪storeDataPerModule(
173  $request,
174  $this->modules,
175  GeneralUtility::makeInstance(ModuleDataStorageCollection::class)
176  );
177  $cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('adminpanel_requestcache');
178  $cache->set($request->getAttribute('adminPanelRequestId'), $data);
179  $cache->collectGarbage();
180  }
181  }
182 
189  protected function ‪generateBackendUrl(string $route): string
190  {
191  return (string)$this->uriBuilder->buildUriFromRoute($route);
192  }
193 
199  protected function ‪initializeModules(ServerRequestInterface $request, array ‪$modules): ServerRequestInterface
200  {
201  foreach (‪$modules as $module) {
202  if (
203  ($module instanceof RequestEnricherInterface)
204  && (
205  (($module instanceof ConfigurableInterface) && $module->isEnabled())
206  || (!($module instanceof ConfigurableInterface))
207  )
208  ) {
209  $request = $module->enrich($request);
210  }
211  if ($module instanceof SubmoduleProviderInterface) {
212  $request = $this->‪initializeModules($request, $module->getSubModules());
213  }
214  }
215  return $request;
216  }
217 
224  protected function ‪storeDataPerModule(ServerRequestInterface $request, array ‪$modules, ModuleDataStorageCollection $data): ModuleDataStorageCollection
225  {
226  foreach (‪$modules as $module) {
227  if (
228  ($module instanceof DataProviderInterface)
229  && (
230  (($module instanceof ConfigurableInterface) && $module->isEnabled())
231  || (!($module instanceof ConfigurableInterface))
232  )
233  ) {
234  $data->addModuleData($module, $module->getDataToStore($request));
235  }
236 
237  if ($module instanceof SubmoduleProviderInterface) {
238  $this->‪storeDataPerModule($request, $module->getSubModules(), $data);
239  }
240  }
241  return $data;
242  }
243 
244  protected function ‪getBackendUser(): BackendUserAuthentication
245  {
246  return ‪$GLOBALS['BE_USER'];
247  }
248 }
‪TYPO3\CMS\Adminpanel\Controller\MainController
Definition: MainController.php:46
‪TYPO3\CMS\Adminpanel\ModuleApi\ModuleDataStorageCollection\addModuleData
‪addModuleData(DataProviderInterface $module, ModuleData $moduleData)
Definition: ModuleDataStorageCollection.php:25
‪TYPO3\CMS\Adminpanel\Controller\MainController\$moduleLoader
‪ModuleLoader $moduleLoader
Definition: MainController.php:53
‪TYPO3\CMS\Adminpanel\ModuleApi\ModuleDataStorageCollection
Definition: ModuleDataStorageCollection.php:24
‪TYPO3\CMS\Adminpanel\Controller\MainController\$uriBuilder
‪UriBuilder $uriBuilder
Definition: MainController.php:57
‪TYPO3\CMS\Adminpanel\Utility\StateUtility\isActivatedForUser
‪static bool isActivatedForUser()
Definition: StateUtility.php:34
‪TYPO3\CMS\Adminpanel\Controller
Definition: AjaxController.php:18
‪TYPO3\CMS\Adminpanel\Service\ModuleLoader
Definition: ModuleLoader.php:33
‪TYPO3\CMS\Adminpanel\Controller\MainController\initializeModules
‪Psr Http Message ServerRequestInterface initializeModules(ServerRequestInterface $request, array $modules)
Definition: MainController.php:194
‪TYPO3\CMS\Adminpanel\ModuleApi\ConfigurableInterface
Definition: ConfigurableInterface.php:29
‪TYPO3\CMS\Adminpanel\ModuleApi\DataProviderInterface
Definition: DataProviderInterface.php:30
‪TYPO3\CMS\Adminpanel\Controller\MainController\__construct
‪__construct(ModuleLoader $moduleLoader=null, UriBuilder $uriBuilder=null, ConfigurationService $configurationService=null)
Definition: MainController.php:72
‪TYPO3\CMS\Adminpanel\Controller\MainController\render
‪string render(ServerRequestInterface $request)
Definition: MainController.php:110
‪TYPO3\CMS\Adminpanel\Utility\StateUtility
Definition: StateUtility.php:28
‪TYPO3\CMS\Adminpanel\ModuleApi\ShortInfoProviderInterface
Definition: ShortInfoProviderInterface.php:30
‪TYPO3\CMS\Adminpanel\Controller\MainController\$configurationService
‪ConfigurationService $configurationService
Definition: MainController.php:61
‪TYPO3\CMS\Adminpanel\Controller\MainController\initialize
‪ServerRequestInterface initialize(ServerRequestInterface $request)
Definition: MainController.php:91
‪TYPO3\CMS\Adminpanel\Service\ConfigurationService
Definition: ConfigurationService.php:34
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:40
‪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:62
‪TYPO3\CMS\Adminpanel\Controller\MainController\$adminPanelModuleConfiguration
‪array $adminPanelModuleConfiguration
Definition: MainController.php:65
‪TYPO3\CMS\Adminpanel\Controller\MainController\storeDataPerModule
‪ModuleDataStorageCollection storeDataPerModule(ServerRequestInterface $request, array $modules, ModuleDataStorageCollection $data)
Definition: MainController.php:219
‪TYPO3\CMS\Adminpanel\Controller\MainController\$modules
‪TYPO3 CMS Adminpanel ModuleApi ModuleInterface[] $modules
Definition: MainController.php:49
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:31
‪TYPO3\CMS\Adminpanel\ModuleApi\PageSettingsProviderInterface
Definition: PageSettingsProviderInterface.php:32
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Adminpanel\Controller\MainController\generateBackendUrl
‪string generateBackendUrl(string $route)
Definition: MainController.php:184
‪TYPO3\CMS\Adminpanel\Utility\StateUtility\isOpen
‪static bool isOpen()
Definition: StateUtility.php:53
‪TYPO3\CMS\Adminpanel\Controller\MainController\getBackendUser
‪getBackendUser()
Definition: MainController.php:239
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Adminpanel\ModuleApi\SubmoduleProviderInterface
Definition: SubmoduleProviderInterface.php:30
‪TYPO3\CMS\Adminpanel\Controller\MainController\storeData
‪storeData(ServerRequestInterface $request)
Definition: MainController.php:164
‪TYPO3\CMS\Adminpanel\ModuleApi\RequestEnricherInterface
Definition: RequestEnricherInterface.php:37