From 086ae52d12011746a75f5588e877347bc0457352 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 21 Mar 2008 11:49:34 +0100 Subject: Update auf MediaWiki 1.12.0 --- includes/SiteConfiguration.php | 71 +++++++++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 22 deletions(-) (limited to 'includes/SiteConfiguration.php') diff --git a/includes/SiteConfiguration.php b/includes/SiteConfiguration.php index 353f5b3a..beeeaf15 100644 --- a/includes/SiteConfiguration.php +++ b/includes/SiteConfiguration.php @@ -19,34 +19,61 @@ class SiteConfiguration { var $localVHosts = array(); /** */ - function get( $setting, $wiki, $suffix, $params = array() ) { - if ( array_key_exists( $setting, $this->settings ) ) { - if ( array_key_exists( $wiki, $this->settings[$setting] ) ) { - $retval = $this->settings[$setting][$wiki]; - } elseif ( array_key_exists( $suffix, $this->settings[$setting] ) ) { - $retval = $this->settings[$setting][$suffix]; - } elseif ( array_key_exists( 'default', $this->settings[$setting] ) ) { - $retval = $this->settings[$setting]['default']; - } else { - $retval = NULL; - } + function get( $settingName, $wiki, $suffix, $params = array(), $wikiTags = array() ) { + if ( array_key_exists( $settingName, $this->settings ) ) { + $thisSetting =& $this->settings[$settingName]; + do { + if ( array_key_exists( $wiki, $thisSetting ) ) { + $retval = $thisSetting[$wiki]; + break; + } + foreach ( $wikiTags as $tag ) { + if ( array_key_exists( $tag, $thisSetting ) ) { + $retval = $thisSetting[$tag]; + break 2; + } + } + if ( array_key_exists( $suffix, $thisSetting ) ) { + $retval = $thisSetting[$suffix]; + break; + } + if ( array_key_exists( 'default', $thisSetting ) ) { + $retval = $thisSetting['default']; + break; + } + $retval = null; + } while ( false ); } else { $retval = NULL; } if ( !is_null( $retval ) && count( $params ) ) { foreach ( $params as $key => $value ) { - $retval = str_replace( '$' . $key, $value, $retval ); + $retval = $this->doReplace( '$' . $key, $value, $retval ); } } return $retval; } + + /** Type-safe string replace; won't do replacements on non-strings */ + function doReplace( $from, $to, $in ) { + if( is_string( $in ) ) { + return str_replace( $from, $to, $in ); + } elseif( is_array( $in ) ) { + foreach( $in as $key => $val ) { + $in[$key] = $this->doReplace( $from, $to, $val ); + } + return $in; + } else { + return $in; + } + } /** */ - function getAll( $wiki, $suffix, $params ) { + function getAll( $wiki, $suffix, $params, $wikiTags = array() ) { $localSettings = array(); foreach ( $this->settings as $varname => $stuff ) { - $value = $this->get( $varname, $wiki, $suffix, $params ); + $value = $this->get( $varname, $wiki, $suffix, $params, $wikiTags ); if ( !is_null( $value ) ) { $localSettings[$varname] = $value; } @@ -55,8 +82,8 @@ class SiteConfiguration { } /** */ - function getBool( $setting, $wiki, $suffix ) { - return (bool)($this->get( $setting, $wiki, $suffix )); + function getBool( $setting, $wiki, $suffix, $wikiTags = array() ) { + return (bool)($this->get( $setting, $wiki, $suffix, array(), $wikiTags ) ); } /** */ @@ -69,25 +96,25 @@ class SiteConfiguration { } /** */ - function extractVar( $setting, $wiki, $suffix, &$var, $params ) { - $value = $this->get( $setting, $wiki, $suffix, $params ); + function extractVar( $setting, $wiki, $suffix, &$var, $params, $wikiTags = array() ) { + $value = $this->get( $setting, $wiki, $suffix, $params, $wikiTags ); if ( !is_null( $value ) ) { $var = $value; } } /** */ - function extractGlobal( $setting, $wiki, $suffix, $params ) { - $value = $this->get( $setting, $wiki, $suffix, $params ); + function extractGlobal( $setting, $wiki, $suffix, $params, $wikiTags = array() ) { + $value = $this->get( $setting, $wiki, $suffix, $params, $wikiTags ); if ( !is_null( $value ) ) { $GLOBALS[$setting] = $value; } } /** */ - function extractAllGlobals( $wiki, $suffix, $params ) { + function extractAllGlobals( $wiki, $suffix, $params, $wikiTags = array() ) { foreach ( $this->settings as $varName => $setting ) { - $this->extractGlobal( $varName, $wiki, $suffix, $params ); + $this->extractGlobal( $varName, $wiki, $suffix, $params, $wikiTags ); } } -- cgit v1.2.2