X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fparser%2FParserOutput.php;h=b6bcf63264504a51d82e0457fdee4c4bd9a7d143;hb=e5f5e951378352028169011a2482681aae0f181a;hp=62d3bfdc4f76c532a23a8dbaf5010038a1ffb3d1;hpb=7585947f8c946804b8e79a6dffeb2f63822bd54f;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php index 62d3bfdc4f..b6bcf63264 100644 --- a/includes/parser/ParserOutput.php +++ b/includes/parser/ParserOutput.php @@ -1,6 +1,7 @@ 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! - * @param $t string - * @return string - */ - 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(). - * - * @param $seconds number - */ - 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. - * @return int|mixed|null - */ - 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; - } - } - - /** - * @return bool - */ - 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 @@ -157,7 +50,7 @@ class ParserOutput extends CacheTime { $mTimestamp; # Timestamp of the revision private $mIndexPolicy = ''; # 'index' or 'noindex'? Any other value will result in no change. private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys) - private $mSecondaryDataUpdates = array(); # List of instances of SecondaryDataObject(), used to cause some information extracted from the page in a custom place. + private $mSecondaryDataUpdates = array(); # List of DataUpdate, used to save info from the page somewhere else. const EDITSECTION_REGEX = '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)())#'; @@ -182,6 +75,8 @@ class ParserOutput extends CacheTime { /** * callback used by getText to replace editsection tokens * @private + * @param $m + * @throws MWException * @return mixed */ function replaceEditSectionLinksCallback( $m ) { @@ -257,11 +152,35 @@ class ParserOutput extends CacheTime { return (bool)$this->mNewSection; } + /** + * Checks, if a url is pointing to the own server + * + * @param $internal String the server to check against + * @param $url String the url to check + * @return bool + */ + static function isLinkInternal( $internal, $url ) { + return (bool)preg_match( '/^' . + # If server is proto relative, check also for http/https links + ( substr( $internal, 0, 2 ) === '//' ? '(?:https?:)?' : '' ) . + preg_quote( $internal, '/' ) . + # check for query/path/anchor or end of link in each case + '(?:[\?\/\#]|$)/i', + $url + ); + } + function addExternalLink( $url ) { # We don't register links pointing to our own server, unless... :-) global $wgServer, $wgRegisterInternalExternals; - if( $wgRegisterInternalExternals or stripos($url,$wgServer.'/')!==0) + + $registerExternalLink = true; + if( !$wgRegisterInternalExternals ) { + $registerExternalLink = !self::isLinkInternal( $wgServer, $url ); + } + if( $registerExternalLink ) { $this->mExternalLinks[$url] = 1; + } } /** @@ -469,7 +388,9 @@ class ParserOutput extends CacheTime { * Adds an update job to the output. Any update jobs added to the output will eventually bexecuted in order to * store any secondary information extracted from the page's content. * - * @param StorageUpdate $update + * @since 1.20 + * + * @param DataUpdate $update */ public function addSecondaryDataUpdate( DataUpdate $update ) { $this->mSecondaryDataUpdates[] = $update; @@ -480,19 +401,25 @@ class ParserOutput extends CacheTime { * extracted from the page's content, including a LinksUpdate object for all links stored in * this ParserOutput object. * - * @param $title Title of the page we're updating. If not given, a title object will be created based on $this->getTitleText() + * @note: Avoid using this method directly, use ContentHandler::getSecondaryDataUpdates() instead! The content + * handler may provide additional update objects. + * + * @since 1.20 + * + * @param $title Title The title of the page we're updating. If not given, a title object will be created + * based on $this->getTitleText() * @param $recursive Boolean: queue jobs for recursive updates? * * @return Array. An array of instances of DataUpdate */ public function getSecondaryDataUpdates( Title $title = null, $recursive = true ) { - if ( !$title ) { + if ( is_null( $title ) ) { $title = Title::newFromText( $this->getTitleText() ); } $linksUpdate = new LinksUpdate( $title, $this, $recursive ); - if ( !$this->mSecondaryDataUpdates ) { + if ( $this->mSecondaryDataUpdates === array() ) { return array( $linksUpdate ); } else { $updates = array_merge( $this->mSecondaryDataUpdates, array( $linksUpdate ) ); @@ -500,4 +427,5 @@ class ParserOutput extends CacheTime { return $updates; } + }