Fixed bug #4581: Duplicate entry on cache_pagesection on reloading twice. See bugtrac...
authorMichael Stucki <michael.stucki@typo3.org>
Tue, 6 Feb 2007 07:45:40 +0000 (07:45 +0000)
committerMichael Stucki <michael.stucki@typo3.org>
Tue, 6 Feb 2007 07:45:40 +0000 (07:45 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@2001 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_tstemplate.php
typo3/sysext/cms/tslib/class.tslib_fe.php

index b91547e..c770b3d 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
 
        * Added feature #4592: Keep indexed_search tables consistent when deleting/hiding pages (Thanks to Michael Fritz)
        * Fixed bug #4666: Use TYPO3 settings when formatting dates
+       * Fixed bug #4581: Duplicate entry on cache_pagesection on reloading twice. See bugtracker entry for details about this change.
 
 2007-02-05  Ingmar Schlecht  <ingmar@typo3.org>
 
index ef759b5..bd47ea6 100755 (executable)
@@ -244,7 +244,7 @@ class t3lib_TStemplate      {
         * So if a template is hidden or times out, it'll not be discovered unless the page is regenerated - at least the this->start function must be called, because this will make a new portion of data in currentPageData string
         *
         * @return      mixed           The array $this->currentPageData if found cached in "cache_pagesection". If the string "none" was returned it means the array must be generated and stored in the cache-table
-        * @see start(), t3lib_fe::getFromCache()
+        * @see start(), tslib_fe::getFromCache()
         */
        function getCurrentPageData()   {
                $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('content', 'cache_pagesection', 'page_id='.intval($GLOBALS['TSFE']->id).' AND mpvar_hash='.t3lib_div::md5int($GLOBALS['TSFE']->MP));
@@ -261,7 +261,7 @@ class t3lib_TStemplate      {
         *
         * @param       array           An array with three keys, "all", "rowSum" and "rootLine" - all coming from the $this->currentPageData array
         * @return      array           The input array but with a new key added, "match" which contains the items from the "all" key which when passed to tslib_matchCondition returned true.
-        * @see t3lib_matchCondition, t3lib_fe::getFromCache()
+        * @see t3lib_matchCondition, tslib_fe::getFromCache()
         */
        function matching($cc)  {
                if (is_array($cc['all']))       {
@@ -295,7 +295,7 @@ class t3lib_TStemplate      {
                        $this->runThroughTemplates($theRootLine);
 
                                // Getting the currentPageData if not already found
-                       if (!$this->currentPageData)    {
+                       if (!$this->currentPageData && !$GLOBALS['TSFE']->no_cache)     {
                                $this->getCurrentPageData();
                        }
 
@@ -355,7 +355,7 @@ class t3lib_TStemplate      {
                                // Make global and save.
                        $GLOBALS['TSFE']->all=$cc;
 
-                       if (!$this->simulationHiddenOrTime)     {       // Only save currentPageData, if we're not simulating by hidden/starttime/endtime
+                       if (!$this->simulationHiddenOrTime && !$GLOBALS['TSFE']->no_cache)      {       // Only save currentPageData, if we're not simulating by hidden/starttime/endtime
                                $dbFields = array(
                                        'content' => serialize($cc),
                                        'tstamp' => $GLOBALS['EXEC_TIME']
index 959dde6..80a2ee5 100755 (executable)
         * @return      void
         */
        function getFromCache() {
-               $this->tmpl->getCurrentPageData();
-               $cc = Array();
-               if (is_array($this->tmpl->currentPageData))     {
-                               // BE CAREFULL to change the content of the cc-array. This array is serialized and an md5-hash based on this is used for caching the page.
-                               // If this hash is not the same in here in this section and after page-generation the page will not be properly cached!
+               if (!$this->no_cache)   {
+                       $this->tmpl->getCurrentPageData();
+
+                       $cc = Array();
+                       if (is_array($this->tmpl->currentPageData))     {
+                                       // BE CAREFULL to change the content of the cc-array. This array is serialized and an md5-hash based on this is used for caching the page.
+                                       // If this hash is not the same in here in this section and after page-generation the page will not be properly cached!
 
-                       $cc['all'] = $this->tmpl->currentPageData['all'];
-                       $cc['rowSum'] = $this->tmpl->currentPageData['rowSum'];
-                       $cc['rootLine'] = $this->tmpl->currentPageData['rootLine'];             // This rootline is used with templates only (matching()-function)
-                       $this->all = $this->tmpl->matching($cc);        // This array is an identification of the template. If $this->all is empty it's because the template-data is not cached, which it must be.
-                       ksort($this->all);
+                               $cc['all'] = $this->tmpl->currentPageData['all'];
+                               $cc['rowSum'] = $this->tmpl->currentPageData['rowSum'];
+                               $cc['rootLine'] = $this->tmpl->currentPageData['rootLine'];             // This rootline is used with templates only (matching()-function)
+                               $this->all = $this->tmpl->matching($cc);        // This array is an identification of the template. If $this->all is empty it's because the template-data is not cached, which it must be.
+                               ksort($this->all);
+                       }
                }
 
                $this->content='';      // clearing the content-variable, which will hold the pagecontent
        }
 
        /**
-        * Returning the cached version of page with hash ->newHash
+        * Returning the cached version of page with hash newHash
         *
         * @return      array           Cached row, if any. Otherwise void.
         */