Move pieces related to ParserOutput expiry into a new CacheTime class.
authorPlatonides <platonides@users.mediawiki.org>
Mon, 9 Aug 2010 14:58:08 +0000 (14:58 +0000)
committerPlatonides <platonides@users.mediawiki.org>
Mon, 9 Aug 2010 14:58:08 +0000 (14:58 +0000)
includes/AutoLoader.php
includes/parser/ParserOutput.php

index fcf022f..20fd547 100644 (file)
@@ -27,6 +27,7 @@ $wgAutoloadLocalClasses = array(
        'BagOStuff' => 'includes/BagOStuff.php',
        'Block' => 'includes/Block.php',
        'CacheDependency' => 'includes/CacheDependency.php',
+       'CacheTime' => 'includes/parser/ParserOutput.php',
        'Category' => 'includes/Category.php',
        'Categoryfinder' => 'includes/Categoryfinder.php',
        'CategoryPage' => 'includes/CategoryPage.php',
index cc11049..38671fb 100644 (file)
  * @todo document
  * @ingroup Parser
  */
-class ParserOutput
+
+class CacheTime {
+       var     $mVersion = Parser::VERSION,  # Compatibility check
+               $mCacheTime = '',             # Time when this object was generated, or -1 for uncacheable. Used in ParserCache.
+               $mCacheExpiry = null,         # Seconds after which the object should expire, use 0 for uncachable. Used in ParserCache.
+               $mContainsOldMagic;           # Boolean variable indicating if the input contained variables like {{CURRENTDAY}}
+               
+       function getCacheTime()              { return $this->mCacheTime; }
+
+       function containsOldMagic()          { return $this->mContainsOldMagic; }
+       function setContainsOldMagic( $com ) { return wfSetVar( $this->mContainsOldMagic, $com ); }
+       
+       /** 
+        * setCacheTime() sets the timestamp expressing when the page has been rendered. 
+        * This doesn not control expiry, see updateCacheExpiry() for that!
+        */
+       function setCacheTime( $t )          { return wfSetVar( $this->mCacheTime, $t ); } 
+
+               
+       /** 
+        * Sets the number of seconds after which this object should expire.
+        * This value is used with the ParserCache.
+        * If called with a value greater than the value provided at any previous call, 
+        * the new call has no effect. The value returned by getCacheExpiry is smaller
+        * or equal to the smallest number that was provided as an argument to 
+        * updateCacheExpiry().
+        */
+       function updateCacheExpiry( $seconds ) { 
+               $seconds = (int)$seconds;
+
+               if ( $this->mCacheExpiry === null || $this->mCacheExpiry > $seconds ) 
+                       $this->mCacheExpiry = $seconds; 
+
+               // hack: set old-style marker for uncacheable entries.
+               if ( $this->mCacheExpiry !== null && $this->mCacheExpiry <= 0 ) 
+                       $this->mCacheTime = -1;
+       }
+       
+       /**
+        * Returns the number of seconds after which this object should expire.
+        * This method is used by ParserCache to determine how long the ParserOutput can be cached.
+        * The timestamp of expiry can be calculated by adding getCacheExpiry() to getCacheTime().
+        * The value returned by getCacheExpiry is smaller or equal to the smallest number 
+        * that was provided to a call of updateCacheExpiry(), and smaller or equal to the
+        * value of $wgParserCacheExpireTime.
+        */
+       function getCacheExpiry() { 
+               global $wgParserCacheExpireTime;
+
+               if ( $this->mCacheTime < 0 ) return 0; // old-style marker for "not cachable"
+
+               $expire = $this->mCacheExpiry; 
+
+               if ( $expire === null ) 
+                       $expire = $wgParserCacheExpireTime;
+               else
+                       $expire = min( $expire, $wgParserCacheExpireTime );
+
+               if( $this->containsOldMagic() ) { //compatibility hack
+                       $expire = min( $expire, 3600 ); # 1 hour
+               } 
+
+               if ( $expire <= 0 ) return 0; // not cachable
+               else return $expire;
+       }
+
+
+       function isCacheable() { 
+               return $this->getCacheExpiry() > 0;
+       }
+       
+       /**
+        * Return true if this cached output object predates the global or
+        * per-article cache invalidation timestamps, or if it comes from
+        * an incompatible older version.
+        *
+        * @param $touched String: the affected article's last touched timestamp
+        * @return Boolean
+        */
+       public function expired( $touched ) {
+               global $wgCacheEpoch;
+               return !$this->isCacheable() || // parser says it's uncacheable
+                      $this->getCacheTime() < $touched ||
+                      $this->getCacheTime() <= $wgCacheEpoch ||
+                      $this->getCacheTime() < wfTimestamp( TS_MW, time() - $this->getCacheExpiry() ) || // expiry period has passed
+                      !isset( $this->mVersion ) ||
+                      version_compare( $this->mVersion, Parser::VERSION, "lt" );
+       }               
+}
+class ParserOutput extends CacheTime
 {
        var $mText,                       # The output text
                $mLanguageLinks,              # List of the full text of language links, in the order they appear
                $mCategories,                 # Map of category names to sort keys
-               $mContainsOldMagic,           # Boolean variable indicating if the input contained variables like {{CURRENTDAY}}
                $mTitleText,                  # title text of the chosen language variant
-               $mCacheTime = '',             # Time when this object was generated, or -1 for uncacheable. Used in ParserCache.
-               $mCacheExpiry = null,         # Seconds after which the object should expire, use 0 for uncachable. Used in ParserCache.
-               $mVersion = Parser::VERSION,  # Compatibility check
                $mLinks = array(),            # 2-D map of NS/DBK to ID for the links in the document. ID=zero for broken.
                $mTemplates = array(),        # 2-D map of NS/DBK to ID for the template references. ID=zero for broken.
                $mTemplateIds = array(),      # 2-D map of NS/DBK to rev ID for the template references. ID=zero for broken.
@@ -45,7 +131,6 @@ class ParserOutput
        function getInterwikiLinks()         { return $this->mInterwikiLinks; }
        function getCategoryLinks()          { return array_keys( $this->mCategories ); }
        function &getCategories()            { return $this->mCategories; }
-       function getCacheTime()              { return $this->mCacheTime; }
        function getTitleText()              { return $this->mTitleText; }
        function getSections()               { return $this->mSections; }
        function &getLinks()                 { return $this->mLinks; }
@@ -60,71 +145,15 @@ class ParserOutput
        function getIndexPolicy()            { return $this->mIndexPolicy; }
        function getTOCHTML()                { return $this->mTOCHTML; }
 
-       function containsOldMagic()          { return $this->mContainsOldMagic; }
        function setText( $text )            { return wfSetVar( $this->mText, $text ); }
        function setLanguageLinks( $ll )     { return wfSetVar( $this->mLanguageLinks, $ll ); }
        function setCategoryLinks( $cl )     { return wfSetVar( $this->mCategories, $cl ); }
-       function setContainsOldMagic( $com ) { return wfSetVar( $this->mContainsOldMagic, $com ); }
 
-       /** setCacheTime() sets the timestamp expressing when the page has been rendered. 
-        * This doesn not control expiry, see updateCacheExpiry() for that!
-       */
-       function setCacheTime( $t )          { return wfSetVar( $this->mCacheTime, $t ); } 
        function setTitleText( $t )          { return wfSetVar( $this->mTitleText, $t ); }
        function setSections( $toc )         { return wfSetVar( $this->mSections, $toc ); }
        function setIndexPolicy( $policy )   { return wfSetVar( $this->mIndexPolicy, $policy ); }
        function setTOCHTML( $tochtml )      { return wfSetVar( $this->mTOCHTML, $tochtml ); }
 
-
-       /** Sets the number of seconds after which this object should expire.
-       * This value is used with the ParserCache.
-       * If called with a value greater than the value provided at any previous call, 
-       * the new call has no effect. The value returned by getCacheExpiry is smaller
-       * or equal to the smallest number that was provided as an argument to 
-       * updateCacheExpiry().
-       */
-       function updateCacheExpiry( $seconds ) { 
-               $seconds = (int)$seconds;
-
-               if ( $this->mCacheExpiry === null || $this->mCacheExpiry > $seconds ) 
-                       $this->mCacheExpiry = $seconds; 
-
-               // hack: set old-style marker for uncacheable entries.
-               if ( $this->mCacheExpiry !== null && $this->mCacheExpiry <= 0 ) 
-                       $this->mCacheTime = -1;
-       }
-
-       /** Returns the number of seconds after which this object should expire.
-       * This method is used by ParserCache to determine how long the ParserOutput can be cached.
-       * The timestamp of expiry can be calculated by adding getCacheExpiry() to getCacheTime().
-       * The value returned by getCacheExpiry is smaller or equal to the smallest number 
-       * that was provided to a call of updateCacheExpiry(), and smaller or equal to the
-       * value of $wgParserCacheExpireTime.
-       */
-       function getCacheExpiry() { 
-               global $wgParserCacheExpireTime;
-
-               if ( $this->mCacheTime < 0 ) return 0; // old-style marker for "not cachable"
-
-               $expire = $this->mCacheExpiry; 
-
-               if ( $expire === null ) 
-                       $expire = $wgParserCacheExpireTime;
-               else
-                       $expire = min( $expire, $wgParserCacheExpireTime );
-
-               if( $this->containsOldMagic() ) { //compatibility hack
-                       $expire = min( $expire, 3600 ); # 1 hour
-               } 
-
-               if ( $expire <= 0 ) return 0; // not cachable
-               else return $expire;
-       }
-
-       function isCacheable() { 
-               return $this->getCacheExpiry() > 0;
-       }
-
        function addCategory( $c, $sort )    { $this->mCategories[$c] = $sort; }
        function addLanguageLink( $t )       { $this->mLanguageLinks[] = $t; }
        function addWarning( $s )            { $this->mWarnings[$s] = 1; }
@@ -219,24 +248,6 @@ class ParserOutput
                $this->mInterwikiLinks[$prefix][$title->getDBkey()] = 1;
        }
 
-       /**
-        * Return true if this cached output object predates the global or
-        * per-article cache invalidation timestamps, or if it comes from
-        * an incompatible older version.
-        *
-        * @param $touched String: the affected article's last touched timestamp
-        * @return Boolean
-        */
-       public function expired( $touched ) {
-               global $wgCacheEpoch;
-               return !$this->isCacheable() || // parser says it's uncacheable
-                      $this->getCacheTime() < $touched ||
-                      $this->getCacheTime() <= $wgCacheEpoch ||
-                      $this->getCacheTime() < wfTimestamp( TS_MW, time() - $this->getCacheExpiry() ) || // expiry period has passed
-                      !isset( $this->mVersion ) ||
-                      version_compare( $this->mVersion, Parser::VERSION, "lt" );
-       }
-
        /**
         * Add some text to the <head>.
         * If $tag is set, the section with that tag will only be included once