From f65abf71c94ff8f8b4ffb07b2bacb0bd10971e07 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Sun, 4 Jun 2006 05:18:52 +0000 Subject: [PATCH] support for array overrides and appends --- includes/SiteConfiguration.php | 46 ++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 10 deletions(-) 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 ); -- 2.20.1