From 926900f97ab387c658f2a582130ff49aadab7016 Mon Sep 17 00:00:00 2001 From: Andreas Fernandez <a.fernandez@scripting-base.de> Date: Mon, 2 Nov 2015 17:48:52 +0100 Subject: [PATCH] [FEATURE] Add FlashMessage support to ModuleTemplate API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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``. Add support for flash messages to ModuleTemplate which makes it possible to enforce a queue identifier which is rendered in a global scope. Resolves: #71251 Releases: master Change-Id: I7e0a0088f8020994dbff162ed5f3e53b6ceeedce Reviewed-on: https://review.typo3.org/44480 Reviewed-by: Mathias Schreiber <mathias.schreiber@wmdb.de> Tested-by: Mathias Schreiber <mathias.schreiber@wmdb.de> Reviewed-by: Frank Nägler <frank.naegler@typo3.org> Tested-by: Frank Nägler <frank.naegler@typo3.org> --- .../Classes/Template/ModuleTemplate.php | 50 ++++++++++++++++++- .../Resources/Private/Templates/Module.html | 2 + ...FlashMessageSupportInModuleTemplateAPI.rst | 24 +++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 typo3/sysext/core/Documentation/Changelog/master/Feature-71251-AddFlashMessageSupportInModuleTemplateAPI.rst diff --git a/typo3/sysext/backend/Classes/Template/ModuleTemplate.php b/typo3/sysext/backend/Classes/Template/ModuleTemplate.php index bcb4d1281eaa..396e0b554eaa 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 022e6de6af92..60b70259d289 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 000000000000..acf56a6ba60e --- /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 -- GitLab