X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FSiteConfiguration.php;h=73aae1adc9e0040f17cb2d7a33b3f79a8d603759;hb=851eaecd50ad45dc0ff7c7b43dc1b5fad486c2e9;hp=89cf74654778d142241c259c81d96beb3a5218ea;hpb=054a83e77ee1197d62b9082b5e92e47c57574e53;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SiteConfiguration.php b/includes/SiteConfiguration.php index 89cf746547..73aae1adc9 100644 --- a/includes/SiteConfiguration.php +++ b/includes/SiteConfiguration.php @@ -1,87 +1,124 @@ 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, $wikiTags = array() ) { + $localSettings = array(); + foreach ( $this->settings as $varname => $stuff ) { + $value = $this->get( $varname, $wiki, $suffix, $params, $wikiTags ); + if ( !is_null( $value ) ) { + $localSettings[$varname] = $value; + } + } + return $localSettings; + } + /** */ - 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 ) ); } /** */ function &getLocalDatabases() { - return $this->localDatabases; + return $this->wikis; } /** */ function initialise() { - foreach ( $this->wikis as $db ) { - $this->localDatabases[$db] = $db; - } } /** */ - 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 ); } } @@ -93,7 +130,11 @@ class SiteConfiguration { $site = NULL; $lang = NULL; foreach ( $this->suffixes as $suffix ) { - if ( substr( $db, -strlen( $suffix ) ) == $suffix ) { + if ( $suffix === '' ) { + $site = ''; + $lang = $db; + break; + } elseif ( substr( $db, -strlen( $suffix ) ) == $suffix ) { $site = $suffix == 'wiki' ? 'wikipedia' : $suffix; $lang = substr( $db, 0, strlen( $db ) - strlen( $suffix ) ); break; @@ -109,5 +150,3 @@ class SiteConfiguration { } } } - -?>