From 225fa832273411f61960a3d6165774689d643623 Mon Sep 17 00:00:00 2001 From: "Mr. E23" Date: Sat, 10 Jan 2004 22:49:37 +0000 Subject: [PATCH] Cleaned up OutputPage::replaceVariables() a bit. Some performance gain by doing several replacements at once in MagicWord::replaceMultiple() --- includes/MagicWord.php | 18 ++++++++++++++++ includes/OutputPage.php | 46 ++++++++++------------------------------- 2 files changed, 29 insertions(+), 35 deletions(-) diff --git a/includes/MagicWord.php b/includes/MagicWord.php index 4cc3c90283..f0ed86d72a 100644 --- a/includes/MagicWord.php +++ b/includes/MagicWord.php @@ -147,6 +147,24 @@ class MagicWord { function getWasModified(){ return $this->mModified; } + + # $magicarr is an associative array of (magic word ID => replacement) + # This method uses the php feature to do several replacements at the same time, + # thereby gaining some efficiency. The result is placed in the out variable + # $result. The return value is true if something was replaced. + + /* static */ function replaceMultiple( $magicarr, $subject, &$result ){ + $search = array(); + $replace = array(); + foreach( $magicarr as $id => $replacement ){ + $mw = MagicWord::get( $id ); + $search[] = $mw->getRegex(); + $replace[] = $replacement; + } + + $result = preg_replace( $search, $replace, $subject ); + return !($result === $subject); + } } # Used in matchAndRemove() diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 307148a389..7006ab9709 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -1232,46 +1232,22 @@ $t[] = "" ; $fname = "OutputPage::replaceVariables"; wfProfileIn( $fname ); - + $magic = array(); + # Basic variables # See Language.php for the definition of each magic word - # As with sigs, this uses the server's local time -- ensure # this is appropriate for your audience! - $v = date( "m" ); - $mw =& MagicWord::get( MAG_CURRENTMONTH ); - $text = $mw->replace( $v, $text ); - if( $mw->getWasModified() ) { $this->mContainsOldMagic++; } - - $v = $wgLang->getMonthName( date( "n" ) ); - $mw =& MagicWord::get( MAG_CURRENTMONTHNAME ); - $text = $mw->replace( $v, $text ); - if( $mw->getWasModified() ) { $this->mContainsOldMagic++; } - - $v = $wgLang->getMonthNameGen( date( "n" ) ); - $mw =& MagicWord::get( MAG_CURRENTMONTHNAMEGEN ); - $text = $mw->replace( $v, $text ); - if( $mw->getWasModified() ) { $this->mContainsOldMagic++; } - - $v = date( "j" ); - $mw = MagicWord::get( MAG_CURRENTDAY ); - $text = $mw->replace( $v, $text ); - if( $mw->getWasModified() ) { $this->mContainsOldMagic++; } - - $v = $wgLang->getWeekdayName( date( "w" )+1 ); - $mw =& MagicWord::get( MAG_CURRENTDAYNAME ); - $text = $mw->replace( $v, $text ); - if( $mw->getWasModified() ) { $this->mContainsOldMagic++; } + + $magic[MAG_CURRENTMONTH] = date( "m" ); + $magic[MAG_CURRENTMONTHNAME] = $wgLang->getMonthName( date("n") ); + $magic[MAG_CURRENTMONTHNAMEGEN] = $wgLang->getMonthNameGen( date("n") ); + $magic[MAG_CURRENTDAY] = date("j"); + $magic[MAG_CURRENTDAYNAME] = $wgLang->getWeekdayName( date("w")+1 ); + $magic[MAG_CURRENTYEAR] = date( "Y" ); + $magic[MAG_CURRENTTIME] = $wgLang->time( wfTimestampNow(), false ); - $v = date( "Y" ); - $mw =& MagicWord::get( MAG_CURRENTYEAR ); - $text = $mw->replace( $v, $text ); - if( $mw->getWasModified() ) { $this->mContainsOldMagic++; } - - $v = $wgLang->time( wfTimestampNow(), false ); - $mw =& MagicWord::get( MAG_CURRENTTIME ); - $text = $mw->replace( $v, $text ); - if( $mw->getWasModified() ) { $this->mContainsOldMagic++; } + $this->mContainsOldMagic += MagicWord::replaceMultiple($magic, $text, $text); $mw =& MagicWord::get( MAG_NUMBEROFARTICLES ); if ( $mw->match( $text ) ) { -- 2.20.1