#7351: Introduce / to improve Mysql query cache usage
authorMartin Kutschker <martin.t.kutschker@blackbox.net>
Sat, 2 Feb 2008 10:08:51 +0000 (10:08 +0000)
committerMartin Kutschker <martin.t.kutschker@blackbox.net>
Sat, 2 Feb 2008 10:08:51 +0000 (10:08 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@3015 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_befunc.php
t3lib/class.t3lib_page.php
t3lib/class.t3lib_tstemplate.php
t3lib/config_default.php
typo3/sysext/cms/tslib/class.tslib_fe.php
typo3/sysext/cms/tslib/class.tslib_menu.php

index 49579dc..53ea698 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,13 +1,14 @@
 
 2007-02-02  Martin Kutschker  <martin.t.kutschker@blackbox.net>
 
-       * #7350: Use PHP5 features in class.t3lib_div.php (static and type hinting)
+       * !!! #7350: Use PHP5 features in class.t3lib_div.php (static and type hinting)
+       * #7351: Introduce $ACCESS_TIME/$SIM_ACCESS_TIME to improve Mysql query cache usage
 
-2008-02-02  Kasper Sk\8crh¿j <kasper2008@typo3.com>
+2008-02-02  Kasper Skaarhoj <kasper2008@typo3.com>
 
        * Fixed a bug in tcemain that replicated FlexForm .vDEFbase tags in a strange way. Not critical but built up garbage in FlexForm XML (the XML can be cleaned with the lowlevel_cleaner or manually per recording using the Content Menu Item "FlexForm XML")
 
-2008-02-01  Kasper Sk\8crh¿j <kasper2008@typo3.com>
+2008-02-01  Kasper Skaarhoj <kasper2008@typo3.com>
 
        * Feature added to disable automatic update of diff data for translation when saving records. Instead a button is added to explicitly do this. Feature is called "explicitConfirmationOfTranslation" in $TYPO3_CONF_VARS
        * Added option for custom message in the logout message for workspace previews. 
@@ -29,7 +30,7 @@
        * added feature #7267: Shortcut manager - shortcut icon should reflect record type
        * added Event.stop() to toggle functions of the toolbar items to prevent adding a # to the browser's location bar
 
-2008-01-31  Kasper Sk\8crh¿j <kasper2008@typo3.com>
+2008-01-31  Kasper Skaarhoj <kasper2008@typo3.com>
        * Bugfixes to MM-relations, among other in workspaces (Bugs 3531 / 3907 solved)
 
        class.t3lib_tcemain.php
@@ -79,7 +80,7 @@
        * Fixed bug #5013: htmlArea RTE Editor not working in Firefox 3.0 Granparadiso
        * Added feature #7318: In htmlArea RTE, text direction should be set with the dir attribute
 
-2008-01-28  Kasper Sk�rh�j <kasper2008@typo3.com>
+2008-01-28  Kasper Skaarhoj <kasper2008@typo3.com>
 
        * (minor) Fixed bug: "typo3/js/workspaces.js" was corrected to "js/workspaces.js" in class.workspaceselector.php
 
        * Fixed bug #5347: Flexforms dosen't resolve sheets
        * Fixed bug #3969: Missing sheets inclusion in flexforms?
 
-2007-10-28  Kasper Sk�rh�j  <kasperYYYY@typo3.com>
+2007-10-28  Kasper Skaarhoj <kasperYYYY@typo3.com>
 
        * - Reverting IRRE related changes in t3lib_BEfunc done for workspaces by Dmitry. They were faulty.
        * - Modified rendering of FlexForms in t3lib_TCEforms and also processing in t3lib_tcemain so that flexforms are now fully dynamic in their nature; This is particularly the case when flexforms have sections and containers within (see the original movie-list example for instance). DHTML is used to reorganize flexform elements, delete and add new. No ajax though (not necessary). It means we finally have a permanent implementation for what was before "_DELETE_FLEX_FORM" etc buttons... Used scriptaculous and prototype for the work.
index 0ee92e6..0a9d00d 100755 (executable)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2006 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -406,7 +406,7 @@ class t3lib_BEfunc  {
         * Backend implementation of enableFields()
         * Notice that "fe_groups" is not selected for - only disabled, starttime and endtime.
         * Notice that deleted-fields are NOT filtered - you must ALSO call deleteClause in addition.
-        * $GLOBALS["SIM_EXEC_TIME"] is used for date.
+        * $GLOBALS["SIM_ACCESS_TIME"] is used for date.
         * Usage: 5
         *
         * @param       string          $table is the table from which to return enableFields WHERE clause. Table name must have a 'ctrl' section in $TCA.
@@ -426,13 +426,13 @@ class t3lib_BEfunc        {
                                }
                                if ($ctrl['enablecolumns']['starttime'])        {
                                        $field = $table.'.'.$ctrl['enablecolumns']['starttime'];
-                                       $query[]='('.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
-                                       $invQuery[]='('.$field.'!=0 AND '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
+                                       $query[]='('.$field.'<='.$GLOBALS['SIM_ACCESS_TIME'].')';
+                                       $invQuery[]='('.$field.'!=0 AND '.$field.'>'.$GLOBALS['SIM_ACCESS_TIME'].')';
                                }
                                if ($ctrl['enablecolumns']['endtime'])  {
                                        $field = $table.'.'.$ctrl['enablecolumns']['endtime'];
-                                       $query[]='('.$field.'=0 OR '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
-                                       $invQuery[]='('.$field.'!=0 AND '.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
+                                       $query[]='('.$field.'=0 OR '.$field.'>'.$GLOBALS['SIM_ACCESS_TIME'].')';
+                                       $invQuery[]='('.$field.'!=0 AND '.$field.'<='.$GLOBALS['SIM_ACCESS_TIME'].')';
                                }
                        }
                }
index 098f12e..e351dd5 100755 (executable)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2007 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -141,7 +141,7 @@ class t3lib_pageSelect {
                if (!$show_hidden)      {
                        $this->where_hid_del.= 'AND pages.hidden=0 ';
                }
-               $this->where_hid_del.= 'AND (pages.starttime<='.$GLOBALS['SIM_EXEC_TIME'].') AND (pages.endtime=0 OR pages.endtime>'.$GLOBALS['SIM_EXEC_TIME'].') ';
+               $this->where_hid_del.= 'AND (pages.starttime<='.$GLOBALS['SIM_ACCESS_TIME'].') AND (pages.endtime=0 OR pages.endtime>'.$GLOBALS['SIM_ACCESS_TIME'].') ';
 
                        // Filter out new/deleted place-holder pages in case we are NOT in a versioning preview (that means we are online!)
                if (!$this->versioningPreview)  {
@@ -1019,11 +1019,11 @@ class t3lib_pageSelect {
                                        }
                                        if ($ctrl['enablecolumns']['starttime'] && !$ignore_array['starttime']) {
                                                $field = $table.'.'.$ctrl['enablecolumns']['starttime'];
-                                               $query.=' AND ('.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
+                                               $query.=' AND ('.$field.'<='.$GLOBALS['SIM_ACCESS_TIME'].')';
                                        }
                                        if ($ctrl['enablecolumns']['endtime'] && !$ignore_array['endtime']) {
                                                $field = $table.'.'.$ctrl['enablecolumns']['endtime'];
-                                               $query.=' AND ('.$field.'=0 OR '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
+                                               $query.=' AND ('.$field.'=0 OR '.$field.'>'.$GLOBALS['SIM_ACCESS_TIME'].')';
                                        }
                                        if ($ctrl['enablecolumns']['fe_group'] && !$ignore_array['fe_group']) {
                                                $field = $table.'.'.$ctrl['enablecolumns']['fe_group'];
index 4a6f0d4..fbd8c7c 100755 (executable)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2007 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -212,15 +212,15 @@ class t3lib_TStemplate    {
         */
        function init() {
                        // $this->whereClause is used only to select templates from sys_template.
-                       // $GLOBALS['SIM_EXEC_TIME'] is used so that we're able to simulate a later time as a test...
+                       // $GLOBALS['SIM_ACCESS_TIME'] is used so that we're able to simulate a later time as a test...
                $this->whereClause='AND deleted=0 ';
                if (!$GLOBALS['TSFE']->showHiddenRecords)       {
                        $this->whereClause.='AND hidden=0 ';
                }
-               if ($GLOBALS['TSFE']->showHiddenRecords || $GLOBALS['SIM_EXEC_TIME']!=$GLOBALS['EXEC_TIME'])    {       // Set the simulation flag, if simulation is detected!
+               if ($GLOBALS['TSFE']->showHiddenRecords || $GLOBALS['SIM_ACCESS_TIME']!=$GLOBALS['ACCESS_TIME'])        {       // Set the simulation flag, if simulation is detected!
                        $this->simulationHiddenOrTime=1;
                }
-               $this->whereClause.= 'AND (starttime<='.$GLOBALS['SIM_EXEC_TIME'].') AND (endtime=0 OR endtime>'.$GLOBALS['SIM_EXEC_TIME'].')';
+               $this->whereClause.= 'AND (starttime<='.$GLOBALS['SIM_ACCESS_TIME'].') AND (endtime=0 OR endtime>'.$GLOBALS['SIM_ACCESS_TIME'].')';
                if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'])       {
                        $this->menuclasses='tmenu,jsmenu,gmenu';
                }
index b0ad88c..99a6fb9 100755 (executable)
@@ -462,4 +462,7 @@ unset($TYPO3_AJAX);
        // Setting some global vars:
 $EXEC_TIME = time();                                   // $EXEC_TIME is set so that the rest of the script has a common value for the script execution time
 $SIM_EXEC_TIME = $EXEC_TIME;                   // $SIM_EXEC_TIME is set to $EXEC_TIME but can be altered later in the script if we want to simulate another execution-time when selecting from eg. a database
+$ACCESS_TIME = $EXEC_TIME - ($EXEC_TIME % 60);         // $ACCESS_TIME is a common time in minutes for access control
+$SIM_ACCESS_TIME = $ACCESS_TIME;               // if $SIM_EXEC_TIME is changed this value must be set accordingly
+
 ?>
index 97d1369..4d7f897 100755 (executable)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2007 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
                $this->showHiddenPage = 0;
                $this->showHiddenRecords = 0;
                $GLOBALS['SIM_EXEC_TIME'] = $GLOBALS['EXEC_TIME'];
+               $GLOBALS['SIM_ACCESS_TIME'] = $GLOBALS['ACCESS_TIME'];
                $this->fePreview = 0;
        }
 
                                        $this->showHiddenRecords = $GLOBALS['BE_USER']->extGetFeAdminValue('preview','showHiddenRecords');
                                                // simulate date
                                        $simTime = $GLOBALS['BE_USER']->extGetFeAdminValue('preview','simulateDate');
-                                       if ($simTime)   $GLOBALS['SIM_EXEC_TIME']=$simTime;
+                                       if ($simTime)   {
+                                               $GLOBALS['SIM_EXEC_TIME'] = $simTime;
+                                               $GLOBALS['SIM_ACCESS_TIME'] = $simTime - ($simTime % 60);
+                                       }
                                                // simulate user
                                        $simUserGroup = $GLOBALS['BE_USER']->extGetFeAdminValue('preview','simulateUserGroup');
                                        $this->simUserGroup = $simUserGroup;
        /**
         * Checks page record for enableFields
         * Returns true if enableFields does not disable the page record.
-        * Takes notice of the ->showHiddenPage flag and uses SIM_EXEC_TIME for start/endtime evaluation
+        * Takes notice of the ->showHiddenPage flag and uses SIM_ACCESS_TIME for start/endtime evaluation
         *
         * @param       array           The page record to evaluate (needs fields: hidden, starttime, endtime, fe_group)
         * @param       boolean         Bypass group-check
         */
        function checkEnableFields($row,$bypassGroupCheck=FALSE)        {
                if ((!$row['hidden'] || $this->showHiddenPage)
-                       && $row['starttime']<=$GLOBALS['SIM_EXEC_TIME']
-                       && ($row['endtime']==0 || $row['endtime']>$GLOBALS['SIM_EXEC_TIME'])
+                       && $row['starttime']<=$GLOBALS['SIM_ACCESS_TIME']
+                       && ($row['endtime']==0 || $row['endtime']>$GLOBALS['SIM_ACCESS_TIME'])
                        && ($bypassGroupCheck || $this->checkPageGroupAccess($row))
                ) { return TRUE; }
        }
                                // If $k>0 it is parent pages being tested. They are only significant for the access to the first page IF they had the extendToSubpages flag set, hence checked only then!
                                if (!$k || $pagerec['extendToSubpages'])        {
                                        if ($pagerec['hidden']) $output['hidden'][$pagerec['uid']] = TRUE;
-                                       if ($pagerec['starttime'] > $GLOBALS['SIM_EXEC_TIME'])  $output['starttime'][$pagerec['uid']] = $pagerec['starttime'];
-                                       if ($pagerec['endtime']!=0 && $pagerec['endtime'] <= $GLOBALS['SIM_EXEC_TIME']) $output['endtime'][$pagerec['uid']] = $pagerec['endtime'];
+                                       if ($pagerec['starttime'] > $GLOBALS['SIM_ACCESS_TIME'])        $output['starttime'][$pagerec['uid']] = $pagerec['starttime'];
+                                       if ($pagerec['endtime']!=0 && $pagerec['endtime'] <= $GLOBALS['SIM_ACCESS_TIME'])       $output['endtime'][$pagerec['uid']] = $pagerec['endtime'];
                                        if (!$this->checkPageGroupAccess($pagerec))     $output['fe_group'][$pagerec['uid']] = $pagerec['fe_group'];
                                }
                        }
index 7479544..528f24a 100755 (executable)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2007 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -550,7 +550,7 @@ class tslib_menu {
                                                        $extraWhere.= ' AND pages.no_search=0';
                                                }
                                                if ($maxAge>0)  {
-                                                       $extraWhere.=' AND '.$sortField.'>'.($GLOBALS['SIM_EXEC_TIME']-$maxAge);
+                                                       $extraWhere.=' AND '.$sortField.'>'.($GLOBALS['SIM_ACCESS_TIME']-$maxAge);
                                                }
 
                                                $res = $GLOBALS['TSFE']->cObj->exec_getQuery('pages',Array('pidInList'=>'0', 'uidInList'=>$id_list, 'where'=>$sortField.'>=0'.$extraWhere, 'orderBy'=>($altSortFieldValue ? $altSortFieldValue : $sortField.' desc'),'max'=>$limit));