summaryrefslogtreecommitdiff
path: root/includes/SiteConfiguration.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/SiteConfiguration.php')
-rw-r--r--includes/SiteConfiguration.php71
1 files changed, 49 insertions, 22 deletions
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 );
}
}