diff --git a/typo3/sysext/backend/Classes/Template/ModuleTemplate.php b/typo3/sysext/backend/Classes/Template/ModuleTemplate.php index bcb4d1281eaabdd75b22fa20f058ad9191e52055..396e0b554eaa6ae0d5b93ad1178479c853944cb0 100644 --- a/typo3/sysext/backend/Classes/Template/ModuleTemplate.php +++ b/typo3/sysext/backend/Classes/Template/ModuleTemplate.php @@ -19,6 +19,8 @@ use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\Authentication\BackendUserAuthentication; use TYPO3\CMS\Core\Imaging\Icon; use TYPO3\CMS\Core\Imaging\IconFactory; +use TYPO3\CMS\Core\Messaging\AbstractMessage; +use TYPO3\CMS\Core\Messaging\FlashMessageService; use TYPO3\CMS\Core\Page\PageRenderer; use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -162,6 +164,13 @@ class ModuleTemplate */ protected $title = ''; + /** + * Flash message queue + * + * @var \TYPO3\CMS\Core\Messaging\FlashMessageQueue + */ + protected $flashMessageQueue; + /** * Gets the standalone view. * @@ -322,7 +331,7 @@ class ModuleTemplate $renderedPage = $this->pageRenderer->render(PageRenderer::PART_HEADER); $renderedPage .= $this->view->render(); - $renderedPage .= $this->pageRenderer->addJsFooterInlineCode('updateSignals', BackendUtility::getUpdateSignalCode()); + $this->pageRenderer->addJsFooterInlineCode('updateSignals', BackendUtility::getUpdateSignalCode()); $renderedPage .= $this->pageRenderer->render(PageRenderer::PART_FOOTER); return $renderedPage; @@ -802,4 +811,43 @@ class ModuleTemplate '; return $this->sectionEnd() . $str; } + + /** + * Creates a Message object and adds it to the FlashMessageQueue. + * + * @param string $messageBody The message + * @param string $messageTitle Optional message title + * @param int $severity Optional severity, must be one of \TYPO3\CMS\Core\Messaging\FlashMessage constants + * @param bool $storeInSession Optional, defines whether the message should be stored in the session (default) + * @return void + * @throws \InvalidArgumentException if the message body is no string + */ + public function addFlashMessage($messageBody, $messageTitle = '', $severity = AbstractMessage::OK, $storeInSession = true) + { + if (!is_string($messageBody)) { + throw new \InvalidArgumentException('The message body must be of type string, "' . gettype($messageBody) . '" given.', 1446483133); + } + /* @var \TYPO3\CMS\Core\Messaging\FlashMessage $flashMessage */ + $flashMessage = GeneralUtility::makeInstance( + \TYPO3\CMS\Core\Messaging\FlashMessage::class, + $messageBody, + $messageTitle, + $severity, + $storeInSession + ); + $this->getFlashMessageQueue()->enqueue($flashMessage); + } + + /** + * @return \TYPO3\CMS\Core\Messaging\FlashMessageQueue + */ + protected function getFlashMessageQueue() + { + if (!isset($this->flashMessageQueue)) { + /** @var FlashMessageService $service */ + $service = GeneralUtility::makeInstance(FlashMessageService::class); + $this->flashMessageQueue = $service->getMessageQueueByIdentifier('module.template.flashmessages'); + } + return $this->flashMessageQueue; + } } diff --git a/typo3/sysext/backend/Resources/Private/Templates/Module.html b/typo3/sysext/backend/Resources/Private/Templates/Module.html index 022e6de6af9233eef47b6950bcd1bd80ad09ffff..60b70259d289d63f1a89a35d22e96f014489f61a 100644 --- a/typo3/sysext/backend/Resources/Private/Templates/Module.html +++ b/typo3/sysext/backend/Resources/Private/Templates/Module.html @@ -8,6 +8,8 @@ <f:render partial="DocHeader" arguments="{docHeader:docHeader}" /> </f:if> <div class="module-body t3js-module-body"> + <f:flashMessages queueIdentifier="module.template.flashmessages" /> + <f:format.raw>{content}</f:format.raw> </div> <f:if condition="{formTag}"> diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-71251-AddFlashMessageSupportInModuleTemplateAPI.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-71251-AddFlashMessageSupportInModuleTemplateAPI.rst new file mode 100644 index 0000000000000000000000000000000000000000..acf56a6ba60efefe965d7ecac42836df7678e9ba --- /dev/null +++ b/typo3/sysext/core/Documentation/Changelog/master/Feature-71251-AddFlashMessageSupportInModuleTemplateAPI.rst @@ -0,0 +1,24 @@ +================================================================ +Feature: #71251 - Add FlashMessage support in ModuleTemplate API +================================================================ + +Description +=========== + +Flash messages have different queues, depending on in which context they are +enqueued. The FlashMessageService defaults the queue to ``core.template.flashMessages``, +Extbase defaults the queue to ``extbase.flashmessages .$randomPluginQueue``. + +Support for flash messages in ModuleTemplate has been added to enqueue flash messages automatically +in the correct queue identifier. + + +Impact +====== + +Flash messages can be enqueued by the following code: + + +.. code-block:: php + + $this->moduleTemplate->addFlashMessage('I am a message body', 'Title', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK, true); \ No newline at end of file