From: Ævar Arnfjörð Bjarmason Date: Sat, 26 Nov 2005 23:04:05 +0000 (+0000) Subject: * Support a third paramater to Parser::setHook() that can contain the object X-Git-Tag: 1.6.0~1117 X-Git-Url: http://git.cyclocoop.org/url?a=commitdiff_plain;h=c08da372bcadcf4778e37a2b8f7792aee8561165;p=lhc%2Fweb%2Fwiklou.git * Support a third paramater to Parser::setHook() that can contain the object that contains the callback function to use * Add a hook to Parser::getVariableValue() (ParserGetVariableValueVarCache') that allows overriding of the variable cache * Add a hook to Parser::getVariableValue() (ParserGetVariableValueTs) that allows overriding of the timestamp * Add a hook to Parser::getVariableValue() (ParserGetVariableValueRevid) that allows overriding of the revision id * Changed Parser::getVariableValue() to use timestamps in such a way that they can be overriden with the ParserGetVariableValueTs hook --- diff --git a/includes/Parser.php b/includes/Parser.php index f64faaf84f..4d532b53bf 100644 --- a/includes/Parser.php +++ b/includes/Parser.php @@ -97,6 +97,7 @@ class Parser */ # Persistent: var $mTagHooks; + var $mTagHookObjects; # Cleared with clearState(): var $mOutput, $mAutonumber, $mDTopen, $mStripState = array(); @@ -123,6 +124,7 @@ class Parser $this->mTemplates = array(); $this->mTemplatePath = array(); $this->mTagHooks = array(); + $this->mTagHookObjects = array(); $this->clearState(); } @@ -432,7 +434,16 @@ class Parser $full_tag = $ext_tags[$tag][$marker]; $params = $ext_params[$tag][$marker]; if ( $render ) { - $ext_content[$tag][$marker] = $callback( $content, $params, $this ); + if ( isset( $this->mTagHookObjects[$tag] ) ) + $ext_content[$tag][$marker] = call_user_func_array( + array( &$this->mTagHookObjects[$tag], $callback ), + array( $content, $params, $this ) + ); + else + $ext_content[$tag][$marker] = call_user_func_array( + $callback, + array( $content, $params, $this ) + ); } else { if ( is_null( $content ) ) { // Empty element tag @@ -1889,19 +1900,26 @@ class Parser * expensive to check many times. */ static $varCache = array(); - if( isset( $varCache[$index] ) ) return $varCache[$index]; + if ( wfRunHooks( 'ParserGetVariableValueVarCache', array( &$this, &$varCache ) ) ) + if ( isset( $varCache[$index] ) ) + return $varCache[$index]; + + $ts = time(); + wfRunHooks( 'ParserGetVariableValueTs', array( &$this, &$ts ) ); + $revid = $wgArticle->getRevIdFetched(); + wfRunHooks( 'ParserGetVariableValueRevid', array( &$this, &$revid ) ); switch ( $index ) { case MAG_CURRENTMONTH: - return $varCache[$index] = $wgContLang->formatNum( date( 'm' ) ); + return $varCache[$index] = $wgContLang->formatNum( date( 'm', $ts ) ); case MAG_CURRENTMONTHNAME: - return $varCache[$index] = $wgContLang->getMonthName( date('n') ); + return $varCache[$index] = $wgContLang->getMonthName( date( 'n', $ts ) ); case MAG_CURRENTMONTHNAMEGEN: - return $varCache[$index] = $wgContLang->getMonthNameGen( date('n') ); + return $varCache[$index] = $wgContLang->getMonthNameGen( date( 'n', $ts ) ); case MAG_CURRENTMONTHABBREV: - return $varCache[$index] = $wgContLang->getMonthAbbreviation( date('n') ); + return $varCache[$index] = $wgContLang->getMonthAbbreviation( date( 'n', $ts ) ); case MAG_CURRENTDAY: - return $varCache[$index] = $wgContLang->formatNum( date('j') ); + return $varCache[$index] = $wgContLang->formatNum( date( 'j', $ts ) ); case MAG_PAGENAME: return $this->mTitle->getText(); case MAG_PAGENAMEE: @@ -1911,21 +1929,21 @@ class Parser case MAG_FULLPAGENAMEE: return wfUrlencode( $this->mTitle->getPrefixedText() ); case MAG_REVISIONID: - return $wgArticle->getRevIdFetched(); + return $revid; case MAG_NAMESPACE: return $wgContLang->getNsText( $this->mTitle->getNamespace() ); case MAG_NAMESPACEE: return wfUrlencode( $wgContLang->getNsText( $this->mTitle->getNamespace() ) ); case MAG_CURRENTDAYNAME: - return $varCache[$index] = $wgContLang->getWeekdayName( date('w')+1 ); + return $varCache[$index] = $wgContLang->getWeekdayName( date( 'w', $ts ) + 1 ); case MAG_CURRENTYEAR: - return $varCache[$index] = $wgContLang->formatNum( date( 'Y' ), true ); + return $varCache[$index] = $wgContLang->formatNum( date( 'Y', $ts ), true ); case MAG_CURRENTTIME: - return $varCache[$index] = $wgContLang->time( wfTimestampNow(), false ); + return $varCache[$index] = $wgContLang->time( wfTimestamp( TS_MW, $ts ), false, false ); case MAG_CURRENTWEEK: - return $varCache[$index] = $wgContLang->formatNum( date('W') ); + return $varCache[$index] = $wgContLang->formatNum( date( 'W', $ts ) ); case MAG_CURRENTDOW: - return $varCache[$index] = $wgContLang->formatNum( date('w') ); + return $varCache[$index] = $wgContLang->formatNum( date( 'w', $ts ) ); case MAG_NUMBEROFARTICLES: return $varCache[$index] = $wgContLang->formatNum( wfNumberOfArticles() ); case MAG_NUMBEROFFILES: @@ -3265,11 +3283,24 @@ class Parser * Create an HTML-style tag, e.g. special text * Callback will be called with the text within * Transform and return the text within + * * @access public + * + * @param mixed $tag The tag to use, e.g. 'hook' for + * @param mixed $callback The callback function to use for the tag + * @param mixed $object The object which contains the callback function, optional + * + * @return The old value of the mTagHooks array associated with the hook */ - function setHook( $tag, $callback ) { + function setHook( $tag, $callback, $object = null ) { $oldVal = @$this->mTagHooks[$tag]; $this->mTagHooks[$tag] = $callback; + + if ( isset( $object ) ) + $this->mTagHookObjects[$tag] =& $object; + else + $this->mTagHookObjects[$tag] = null; + return $oldVal; }