‪TYPO3CMS  ‪main
ModuleTemplate.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\ResponseInterface;
21 use Psr\Http\Message\ServerRequestInterface;
26 use TYPO3\CMS\Backend\Utility\BackendUtility;
40 
46 {
48 
49  protected bool ‪$uiBlock = false;
50 
51  protected string ‪$moduleId = '';
52  protected string ‪$moduleName = '';
53  protected string ‪$moduleClass = '';
54  protected string ‪$title = '';
55  protected string ‪$bodyTag = '<body>';
56  protected string ‪$formTag = '';
57 
60 
64  public function ‪__construct(
65  protected readonly ‪PageRenderer $pageRenderer,
66  protected readonly ‪IconFactory $iconFactory,
67  protected readonly ‪UriBuilder $uriBuilder,
68  protected readonly ‪ModuleProvider $moduleProvider,
69  protected readonly ‪FlashMessageService $flashMessageService,
70  protected readonly ‪ExtensionConfiguration $extensionConfiguration,
71  protected readonly ‪ViewInterface $view,
72  protected readonly ServerRequestInterface $request,
73  ) {
74  $module = $request->getAttribute('module');
75  if ($module instanceof ‪ModuleInterface) {
76  // third level, needs the second level in order to keep highlighting in the module menu
77  if ($module->getParentModule()?->getParentModule()) {
78  $this->‪setModuleName($module->getParentModule()->getIdentifier());
79  } else {
80  $this->‪setModuleName($module->getIdentifier());
81  }
82  $this->‪setModuleName($module->getIdentifier());
83  } else {
84  $this->‪setModuleName($request->getAttribute('route')?->getOption('_identifier') ?? '');
85  }
86  $this->flashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
87  $this->docHeaderComponent = GeneralUtility::makeInstance(DocHeaderComponent::class);
88  $this->setUpBasicPageRendererForBackend($pageRenderer, $extensionConfiguration, $request, $this->‪getLanguageService());
89  }
90 
94  public function ‪assign(string $key, mixed $value): self
95  {
96  $this->view->assign($key, $value);
97  return $this;
98  }
99 
103  public function ‪assignMultiple(array $values): self
104  {
105  $this->view->assignMultiple($values);
106  return $this;
107  }
108 
112  public function ‪render(string $templateFileName = ''): string
113  {
114  $this->‪prepareRender($templateFileName);
115  return $this->pageRenderer->render();
116  }
117 
122  public function ‪renderResponse(string $templateFileName = ''): ResponseInterface
123  {
124  $this->‪prepareRender($templateFileName);
125  return $this->pageRenderer->renderResponse();
126  }
127 
128  protected function ‪prepareRender(string $templateFileName): void
129  {
130  $this->‪assignMultiple([
131  'docHeader' => $this->docHeaderComponent->docHeaderContent(),
132  'moduleId' => $this->moduleId,
133  'moduleName' => $this->moduleName,
134  'moduleClass' => $this->moduleClass,
135  'uiBlock' => $this->uiBlock,
136  'flashMessageQueueIdentifier' => $this->flashMessageQueue->getIdentifier(),
137  'formTag' => $this->formTag,
138  ]);
139  $this->pageRenderer->loadJavaScriptModule('bootstrap');
140  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/context-help.js');
141  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/document-header.js');
142  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/global-event-handler.js');
143  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/action-dispatcher.js');
144  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/element/immediate-action-element.js');
145  $this->pageRenderer->loadJavaScriptModule('@typo3/backend/live-search/live-search-shortcut.js');
146  $this->pageRenderer->addBodyContent($this->bodyTag . $this->view->render($templateFileName));
147  $this->pageRenderer->setTitle($this->title);
148  $updateSignalDetails = BackendUtility::getUpdateSignalDetails();
149  if (!empty($updateSignalDetails['html'])) {
150  $this->pageRenderer->addHeaderData(implode("\n", $updateSignalDetails['html']));
151  }
153  }
154 
158  public function ‪setBodyTag(string $bodyTag): self
159  {
160  $this->bodyTag = ‪$bodyTag;
161  return $this;
162  }
163 
167  public function ‪setTitle(string ‪$title, string $context = ''): self
168  {
169  $titleComponents = [‪$title];
170  if ($context !== '') {
171  $titleComponents[] = $context;
172  }
173  $this->title = implode(' ยท ', $titleComponents);
174  return $this;
175  }
176 
182  {
184  }
185 
189  public function ‪setForm(string ‪$formTag = ''): self
190  {
191  $this->formTag = ‪$formTag;
192  return $this;
193  }
194 
199  public function ‪setModuleId(string ‪$moduleId): self
200  {
201  $this->moduleId = ‪$moduleId;
202  return $this;
203  }
204 
209  public function ‪setModuleName(string ‪$moduleName): self
210  {
211  $this->moduleName = ‪$moduleName;
212  return $this;
213  }
214 
219  public function ‪setModuleClass(string ‪$moduleClass): self
220  {
221  $this->moduleClass = ‪$moduleClass;
222  return $this;
223  }
224 
229  public function ‪addFlashMessage(string $messageBody, string $messageTitle = '', ‪ContextualFeedbackSeverity $severity = ContextualFeedbackSeverity::OK, bool $storeInSession = true): self
230  {
231  $flashMessage = GeneralUtility::makeInstance(FlashMessage::class, $messageBody, $messageTitle, $severity, $storeInSession);
232  $this->flashMessageQueue->enqueue($flashMessage);
233  return $this;
234  }
235 
243  {
244  $this->flashMessageQueue = ‪$flashMessageQueue;
245  return $this;
246  }
247 
253  public function ‪setUiBlock(bool ‪$uiBlock): self
254  {
255  $this->uiBlock = ‪$uiBlock;
256  return $this;
257  }
258 
262  public function ‪makeDocHeaderModuleMenu(array $additionalQueryParams = []): self
263  {
264  $currentModule = $this->request->getAttribute('module');
265  if (!($currentModule instanceof ‪ModuleInterface)) {
266  // Early return in case the current request does not provide a module
267  return $this;
268  }
269  if ($currentModule->getParentModule()?->hasParentModule()) {
270  $menuModule = $this->moduleProvider->getModuleForMenu($currentModule->getParentIdentifier(), $this->getBackendUser());
271  } else {
272  // This is a fallback in case a second level module is called here
273  $menuModule = $this->moduleProvider->getModuleForMenu($currentModule->getIdentifier(), $this->getBackendUser());
274  }
275  if ($menuModule === null) {
276  return $this;
277  }
278  $menu = $this->‪getDocHeaderComponent()->getMenuRegistry()->makeMenu();
279  $menu->setIdentifier('moduleMenu');
280  $menu->setLabel(
281  $this->‪getLanguageService()->sL(
282  'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:moduleMenu.dropdown.label'
283  )
284  );
285 
286  foreach ($menuModule->getSubModules() as $module) {
287  $item = $menu
288  ->makeMenuItem()
289  ->setHref(
290  (string)$this->uriBuilder->buildUriFromRoute(
291  $module->getIdentifier(),
292  $additionalQueryParams,
293  )
294  )
295  ->setTitle($this->‪getLanguageService()->sL($module->getTitle()));
296  if ($module->getIdentifier() === $currentModule->getIdentifier()) {
297  $item->setActive(true);
298  }
299  $menu->addMenuItem($item);
300  }
301  $this->‪getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
302  return $this;
303  }
304 
308  protected function ‪dispatchNotificationMessages(): void
309  {
310  $notificationQueue = $this->flashMessageService->getMessageQueueByIdentifier(‪FlashMessageQueue::NOTIFICATION_QUEUE);
311  foreach ($notificationQueue->getAllMessagesAndFlush() as $message) {
312  $notificationInstruction = ‪JavaScriptModuleInstruction::create('@typo3/backend/notification.js');
313  $notificationInstruction->invoke('showMessage', $message->getTitle(), $message->getMessage(), $message->getSeverity());
314  $this->pageRenderer->getJavaScriptRenderer()->addJavaScriptModuleInstruction($notificationInstruction);
315  }
316  }
317 
319  {
320  return ‪$GLOBALS['LANG'];
321  }
322 
324  {
325  return ‪$GLOBALS['BE_USER'];
326  }
327 }
‪TYPO3\CMS\Backend\Template\Components\DocHeaderComponent
Definition: DocHeaderComponent.php:25
‪TYPO3\CMS\Backend\Template\ModuleTemplate\$docHeaderComponent
‪DocHeaderComponent $docHeaderComponent
Definition: ModuleTemplate.php:59
‪TYPO3\CMS\Backend\Template\ModuleTemplate\$moduleId
‪string $moduleId
Definition: ModuleTemplate.php:51
‪TYPO3\CMS\Backend\Template\ModuleTemplate\$bodyTag
‪string $bodyTag
Definition: ModuleTemplate.php:55
‪TYPO3\CMS\Backend\Template\ModuleTemplate\$moduleName
‪string $moduleName
Definition: ModuleTemplate.php:52
‪TYPO3\CMS\Core\View\ViewInterface
Definition: ViewInterface.php:24
‪TYPO3\CMS\Backend\Template\ModuleTemplate\assignMultiple
‪assignMultiple(array $values)
Definition: ModuleTemplate.php:103
‪TYPO3\CMS\Core\Configuration\ExtensionConfiguration
Definition: ExtensionConfiguration.php:47
‪TYPO3\CMS\Backend\Template\ModuleTemplate\setModuleName
‪setModuleName(string $moduleName)
Definition: ModuleTemplate.php:209
‪TYPO3\CMS\Backend\Template\ModuleTemplate\prepareRender
‪prepareRender(string $templateFileName)
Definition: ModuleTemplate.php:128
‪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\Template\ModuleTemplate\$formTag
‪string $formTag
Definition: ModuleTemplate.php:56
‪TYPO3\CMS\Backend\Template\ModuleTemplate\addFlashMessage
‪addFlashMessage(string $messageBody, string $messageTitle='', ContextualFeedbackSeverity $severity=ContextualFeedbackSeverity::OK, bool $storeInSession=true)
Definition: ModuleTemplate.php:229
‪TYPO3\CMS\Backend\Template\ModuleTemplate\renderResponse
‪renderResponse(string $templateFileName='')
Definition: ModuleTemplate.php:122
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Core\Page\JavaScriptModuleInstruction
Definition: JavaScriptModuleInstruction.php:23
‪TYPO3\CMS\Backend\Template\ModuleTemplate\__construct
‪__construct(protected readonly PageRenderer $pageRenderer, protected readonly IconFactory $iconFactory, protected readonly UriBuilder $uriBuilder, protected readonly ModuleProvider $moduleProvider, protected readonly FlashMessageService $flashMessageService, protected readonly ExtensionConfiguration $extensionConfiguration, protected readonly ViewInterface $view, protected readonly ServerRequestInterface $request,)
Definition: ModuleTemplate.php:64
‪TYPO3\CMS\Backend\Template\ModuleTemplate\getLanguageService
‪getLanguageService()
Definition: ModuleTemplate.php:318
‪TYPO3\CMS\Backend\Module\ModuleProvider
Definition: ModuleProvider.php:29
‪TYPO3\CMS\Backend\Template\ModuleTemplate\setBodyTag
‪setBodyTag(string $bodyTag)
Definition: ModuleTemplate.php:158
‪TYPO3\CMS\Backend\Template\ModuleTemplate\setFlashMessageQueue
‪setFlashMessageQueue(FlashMessageQueue $flashMessageQueue)
Definition: ModuleTemplate.php:242
‪TYPO3\CMS\Backend\Template\ModuleTemplate
Definition: ModuleTemplate.php:46
‪TYPO3\CMS\Core\Type\ContextualFeedbackSeverity
‪ContextualFeedbackSeverity
Definition: ContextualFeedbackSeverity.php:25
‪TYPO3\CMS\Core\Page\PageRenderer
Definition: PageRenderer.php:44
‪TYPO3\CMS\Backend\Template\ModuleTemplate\setModuleId
‪setModuleId(string $moduleId)
Definition: ModuleTemplate.php:199
‪TYPO3\CMS\Core\View\ResponsableViewInterface
Definition: ResponsableViewInterface.php:26
‪TYPO3\CMS\Core\Messaging\FlashMessageQueue\NOTIFICATION_QUEUE
‪const NOTIFICATION_QUEUE
Definition: FlashMessageQueue.php:31
‪TYPO3\CMS\Backend\Template\ModuleTemplate\makeDocHeaderModuleMenu
‪makeDocHeaderModuleMenu(array $additionalQueryParams=[])
Definition: ModuleTemplate.php:262
‪TYPO3\CMS\Backend\Template\ModuleTemplate\dispatchNotificationMessages
‪dispatchNotificationMessages()
Definition: ModuleTemplate.php:308
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Backend\Template
‪TYPO3\CMS\Backend\Template\ModuleTemplate\$uiBlock
‪bool $uiBlock
Definition: ModuleTemplate.php:49
‪TYPO3\CMS\Backend\Module\ModuleInterface
Definition: ModuleInterface.php:24
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Backend\Template\ModuleTemplate\setUiBlock
‪setUiBlock(bool $uiBlock)
Definition: ModuleTemplate.php:253
‪TYPO3\CMS\Backend\Template\ModuleTemplate\$flashMessageQueue
‪FlashMessageQueue $flashMessageQueue
Definition: ModuleTemplate.php:58
‪TYPO3\CMS\Backend\Template\ModuleTemplate\$moduleClass
‪string $moduleClass
Definition: ModuleTemplate.php:53
‪TYPO3\CMS\Backend\Template\ModuleTemplate\getDocHeaderComponent
‪getDocHeaderComponent()
Definition: ModuleTemplate.php:181
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:27
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Backend\Template\ModuleTemplate\assign
‪assign(string $key, mixed $value)
Definition: ModuleTemplate.php:94
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:46
‪TYPO3\CMS\Backend\Template\ModuleTemplate\$title
‪string $title
Definition: ModuleTemplate.php:54
‪TYPO3\CMS\Backend\Template\ModuleTemplate\setTitle
‪setTitle(string $title, string $context='')
Definition: ModuleTemplate.php:167
‪TYPO3\CMS\Backend\Template\ModuleTemplate\getBackendUser
‪getBackendUser()
Definition: ModuleTemplate.php:323
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Backend\Template\ModuleTemplate\setForm
‪setForm(string $formTag='')
Definition: ModuleTemplate.php:189
‪TYPO3\CMS\Core\Messaging\FlashMessageQueue
Definition: FlashMessageQueue.php:29
‪TYPO3\CMS\Core\Messaging\FlashMessageService
Definition: FlashMessageService.php:27
‪TYPO3\CMS\Backend\Template\ModuleTemplate\setModuleClass
‪setModuleClass(string $moduleClass)
Definition: ModuleTemplate.php:219
‪TYPO3\CMS\Backend\Template\ModuleTemplate\render
‪render(string $templateFileName='')
Definition: ModuleTemplate.php:112