From: Tim Starling Date: Sun, 4 Jun 2006 05:18:52 +0000 (+0000) Subject: support for array overrides and appends X-Git-Tag: 1.31.0-rc.0~56902 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/banques/?a=commitdiff_plain;h=f65abf71c94ff8f8b4ffb07b2bacb0bd10971e07;p=lhc%2Fweb%2Fwiklou.git support for array overrides and appends --- diff --git a/includes/SiteConfiguration.php b/includes/SiteConfiguration.php index 8fd5d6b6bd..06a7fa08a5 100644 --- a/includes/SiteConfiguration.php +++ b/includes/SiteConfiguration.php @@ -20,22 +20,48 @@ class SiteConfiguration { var $settings = array(); var $localVHosts = array(); - /** */ + /** + * Get a setting + */ 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; + # Keys in order of increasing specificity + $keys = array( 'default', $suffix, $wiki ); + + # Process ordinary settings + if ( isset( $this->settings[$setting] ) ) { + $retval = NULL; + foreach ( $keys as $key ) { + if ( isset( $this->settings[$setting][$key] ) ) { + $retval = $this->settings[$setting][$key]; + } } } else { $retval = NULL; } + if ( is_array( $retval ) ) { + # Array overrides + $skey = "+$setting"; + if ( isset( $this->settings[$skey] ) ) { + foreach ( $keys as $key ) { + if ( isset( $this->settings[$skey][$key] ) ) { + $retval = $this->settings[$skey][$key] + $retval; + } + } + } + + # Array appends + $skey = ".$setting"; + if ( isset( $this->settings[$skey] ) ) { + foreach ( $keys as $key ) { + if ( isset( $this->settings[$skey][$key] ) ) { + $retval = array_merge( $retval, $this->settings[$skey][$key] ); + } + } + } + } + + # Replace parameters if ( !is_null( $retval ) && count( $params ) ) { foreach ( $params as $key => $value ) { $retval = str_replace( '$' . $key, $value, $retval );