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 );