Fixed bug #16565: Bug: FlashmessageQueue does not work in FE mode (Thanks to Bastian...
authorSteffen Kamper <info@sk-typo3.de>
Thu, 25 Nov 2010 17:56:34 +0000 (17:56 +0000)
committerSteffen Kamper <info@sk-typo3.de>
Thu, 25 Nov 2010 17:56:34 +0000 (17:56 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@9630 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_flashmessagequeue.php
typo3/sysext/cms/tslib/class.tslib_feuserauth.php

index bf29a43..46c639a 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@
 
 2010-11-25  Steffen Kamper  <steffen@typo3.org>
 
+       * Fixed bug #16565: Bug: FlashmessageQueue does not work in FE mode (Thanks to Bastian Waidelich)
        * Follow-up to #16432: wrong markup in livesearch
        * Follow-up to #16495: corrected the backpath for imported modules
        * Follow-up to #15094: removed unused variable, resolved unknown variable
index 75a1e9f..94313ff 100644 (file)
@@ -55,11 +55,7 @@ class t3lib_FlashMessageQueue {
                if ($message->isSessionMessage()) {
                        $queuedFlashMessages = self::getFlashMessagesFromSession();
                        $queuedFlashMessages[] = $message;
-
-                       $GLOBALS['BE_USER']->setAndSaveSessionData(
-                               'core.template.flashMessages',
-                               $queuedFlashMessages
-                       );
+                       self::storeFlashMessagesInSession($queuedFlashMessages);
                } else {
                        self::$messages[] = $message;
                }
@@ -67,24 +63,29 @@ class t3lib_FlashMessageQueue {
 
        /**
         * Returns all messages from the current PHP session and from the current request.
-        * After fetching the messages the internal queue and the message queue in the session
-        * will be emptied.
         *
         * @return       array   array of t3lib_FlashMessage objects
         */
-       public static function getAllMessagesAndFlush() {
+       public static function getAllMessages() {
                        // get messages from user session
                $queuedFlashMessagesFromSession = self::getFlashMessagesFromSession();
-               if (!empty($queuedFlashMessagesFromSession)) {
-                               // reset messages in user session
-                       $GLOBALS['BE_USER']->setAndSaveSessionData(
-                               'core.template.flashMessages',
-                               null
-                       );
-               }
-
                $queuedFlashMessages = array_merge($queuedFlashMessagesFromSession, self::$messages);
 
+               return $queuedFlashMessages;
+       }
+
+       /**
+        * Returns all messages from the current PHP session and from the current request.
+        * After fetching the messages the internal queue and the message queue in the session
+        * will be emptied.
+        *
+        * @return       array   array of t3lib_FlashMessage objects
+        */
+       public static function getAllMessagesAndFlush() {
+               $queuedFlashMessages = self::getAllMessages();
+
+                       // reset messages in user session
+               self::removeAllFlashMessagesFromSession();
                        // reset internal messages
                self::$messages = array();
 
@@ -92,17 +93,47 @@ class t3lib_FlashMessageQueue {
        }
 
        /**
+        * Stores given flash messages in the session
+        *
+        * @param       array   array of t3lib_FlashMessage
+        * @return      void
+        */
+       protected static function storeFlashMessagesInSession(array $flashMessages) {
+               self::getUserByContext()->setAndSaveSessionData('core.template.flashMessages', $flashMessages);
+
+       }
+
+       /**
+        * Removes all flash messages from the session
+        *
+        * @return      void
+        */
+       protected static function removeAllFlashMessagesFromSession() {
+               self::getUserByContext()->setAndSaveSessionData('core.template.flashMessages', NULL);
+       }
+
+       /**
         * Returns current flash messages from the session, making sure to always
         * return an array.
         *
         * @return      array   An array of t3lib_FlashMessage flash messages.
         */
        protected static function getFlashMessagesFromSession() {
-               $flashMessages = $GLOBALS['BE_USER']->getSessionData('core.template.flashMessages');
+               $flashMessages = self::getUserByContext()->getSessionData('core.template.flashMessages');
+
                return is_array($flashMessages) ? $flashMessages : array();
        }
 
        /**
+        * Gets user object by context
+        *
+        * @return object user object
+        */
+       protected function getUserByContext() {
+               return TYPO3_MODE === 'BE' ? $GLOBALS['BE_USER'] : $GLOBALS['TSFE']->fe_user;
+       }
+
+       /**
         * Fetches and renders all available flash messages from the queue.
         *
         * @return      string  All flash messages in the queue rendered as HTML.
@@ -126,4 +157,4 @@ class t3lib_FlashMessageQueue {
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_flashmessagequeue.php']) {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_flashmessagequeue.php']);
 }
-?>
\ No newline at end of file
+?>
index 064e666..016afc2 100644 (file)
@@ -486,6 +486,31 @@ class tslib_feUserAuth extends t3lib_userAuth {
        }
 
        /**
+        * Returns the session data stored for $key.
+        * The data will last only for this login session since it is stored in the session table.
+        *
+        * @param  string  $key
+        * @return mixed
+        */
+       public function getSessionData($key) {
+               return $this->getKey('ses', $key);
+       }
+
+       /**
+        * Saves the tokens so that they can be used by a later incarnation of this class.
+        *
+        * @param  string  $key
+        * @param  mixed   $data
+        * @return void
+        */
+       public function setAndSaveSessionData($key, $data) {
+               $this->setKey('ses', $key, $data);
+               $this->storeSessionData();
+       }
+
+
+
+       /**
         * Registration of records/"shopping basket" in session data
         * This will take the input array, $recs, and merge into the current "recs" array found in the session data.
         * If a change in the recs storage happens (which it probably does) the function setKey() is called in order to store the array again.
@@ -578,4 +603,4 @@ if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_feuserauth.php']);
 }
 
-?>
\ No newline at end of file
+?>