support for array overrides and appends
authorTim Starling <tstarling@users.mediawiki.org>
Sun, 4 Jun 2006 05:18:52 +0000 (05:18 +0000)
committerTim Starling <tstarling@users.mediawiki.org>
Sun, 4 Jun 2006 05:18:52 +0000 (05:18 +0000)
includes/SiteConfiguration.php

index 8fd5d6b..06a7fa0 100644 (file)
@@ -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 );