From: Platonides Date: Mon, 9 Aug 2010 14:58:08 +0000 (+0000) Subject: Move pieces related to ParserOutput expiry into a new CacheTime class. X-Git-Tag: 1.31.0-rc.0~35586 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_aide%28?a=commitdiff_plain;h=0825b757f61991cb77290e6c62a835ec25c7d3a1;p=lhc%2Fweb%2Fwiklou.git Move pieces related to ParserOutput expiry into a new CacheTime class. --- diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index fcf022f62c..20fd5477f3 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -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', diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php index cc11049400..38671fb099 100644 --- a/includes/parser/ParserOutput.php +++ b/includes/parser/ParserOutput.php @@ -3,16 +3,102 @@ * @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 . * If $tag is set, the section with that tag will only be included once