[FEATURE] Add FlashMessage support to ModuleTemplate API 80/44480/5
authorAndreas Fernandez <a.fernandez@scripting-base.de>
Mon, 2 Nov 2015 16:48:52 +0000 (17:48 +0100)
committerFrank Nägler <frank.naegler@typo3.org>
Mon, 2 Nov 2015 18:09:11 +0000 (19:09 +0100)
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>
typo3/sysext/backend/Classes/Template/ModuleTemplate.php
typo3/sysext/backend/Resources/Private/Templates/Module.html
typo3/sysext/core/Documentation/Changelog/master/Feature-71251-AddFlashMessageSupportInModuleTemplateAPI.rst [new file with mode: 0644]

index bcb4d12..396e0b5 100644 (file)
@@ -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;
@@ -163,6 +165,13 @@ class ModuleTemplate
     protected $title = '';
 
     /**
+     * Flash message queue
+     *
+     * @var \TYPO3\CMS\Core\Messaging\FlashMessageQueue
+     */
+    protected $flashMessageQueue;
+
+    /**
      * Gets the standalone view.
      *
      * @return StandaloneView
@@ -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;
+    }
 }
index 022e6de..60b7025 100644 (file)
@@ -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 (file)
index 0000000..acf56a6
--- /dev/null
@@ -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