From 63601400e476c6cf43d985f3e7b9864681695ed4 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 18 Jan 2013 16:46:04 +0100 Subject: Update to MediaWiki 1.20.2 this update includes: * adjusted Arch Linux skin * updated FluxBBAuthPlugin * patch for https://bugzilla.wikimedia.org/show_bug.cgi?id=44024 --- includes/SiteConfiguration.php | 149 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 136 insertions(+), 13 deletions(-) (limited to 'includes/SiteConfiguration.php') diff --git a/includes/SiteConfiguration.php b/includes/SiteConfiguration.php index 8a977fb3..6a861d8e 100644 --- a/includes/SiteConfiguration.php +++ b/includes/SiteConfiguration.php @@ -1,6 +1,118 @@ wikis = array( 'de', 'en', 'beta' ); + * @endcode + * + * When configuring the MediaWiki global settings (the $wg variables), + * the identifiers will be available to specify settings on a per wiki basis. + * + * @code + * $conf->settings = array( + * 'wgSomeSetting' => array( + * + * # production: + * 'de' => false, + * 'en' => false, + * + * # test: + * 'beta => true, + * ), + * ); + * @endcode + * + * With three wikis, that is easy to manage. But what about a farm with + * hundreds of wikis? Site configuration provides a special keyword named + * 'default' which is the value used when a wiki is not found. Hence + * the above code could be written: + * + * @code + * $conf->settings = array( + * 'wgSomeSetting' => array( + * + * 'default' => false, + * + * # Enable feature on test + * 'beta' => true, + * ), + * ); + * @endcode + * + * + * Since settings can contain arrays, site configuration provides a way + * to merge an array with the default. This is very useful to avoid + * repeating settings again and again while still maintaining specific changes + * on a per wiki basis. + * + * @code + * $conf->settings = array( + * 'wgMergeSetting' = array( + * # Value that will be shared among all wikis: + * 'default' => array( NS_USER => true ), + * + * # Leading '+' means merging the array of value with the defaults + * '+beta' => array( NS_HELP => true ), + * ), + * ); + * + * # Get configuration for the German site: + * $conf->get( 'wgMergeSetting', 'de' ); + * // --> array( NS_USER => true ); + * + * # Get configuration for the testing site: + * $conf->get( 'wgMergeSetting', 'beta' ); + * // --> array( NS_USER => true, NS_HELP => true ); + * @endcode + * + * Finally, to load all configuration settings, extract them in global context: + * + * @code + * # Name / identifier of the wiki as set in $conf->wikis + * $wikiID = 'beta'; + * $globals = $conf->getAll( $wikiID ); + * extract( $globals ); + * @endcode + * + * TODO: give examples for, + * suffixes: + * $conf->suffixes = array( 'wiki' ); + * localVHosts + * callbacks! */ class SiteConfiguration { @@ -26,6 +138,7 @@ class SiteConfiguration { /** * Optional callback to load full configuration data. + * @var string|array */ public $fullLoadCallback = null; @@ -43,6 +156,8 @@ class SiteConfiguration { * argument and the wiki in the second one. * if suffix and lang are passed they will be used for the return value of * self::siteFromDB() and self::$suffixes will be ignored + * + * @var string|array */ public $siteParamsCallback = null; @@ -77,7 +192,7 @@ class SiteConfiguration { if( array_key_exists( $wiki, $thisSetting ) ) { $retval = $thisSetting[$wiki]; break; - } elseif( array_key_exists( "+$wiki", $thisSetting ) && is_array( $thisSetting["+$wiki"] ) ) { + } elseif ( array_key_exists( "+$wiki", $thisSetting ) && is_array( $thisSetting["+$wiki"] ) ) { $retval = $thisSetting["+$wiki"]; } @@ -91,8 +206,9 @@ class SiteConfiguration { } break 2; } elseif( array_key_exists( "+$tag", $thisSetting ) && is_array($thisSetting["+$tag"]) ) { - if( !isset( $retval ) ) + if( !isset( $retval ) ) { $retval = array(); + } $retval = self::arrayMerge( $retval, $thisSetting["+$tag"] ); } } @@ -106,9 +222,10 @@ class SiteConfiguration { $retval = $thisSetting[$suffix]; } break; - } elseif( array_key_exists( "+$suffix", $thisSetting ) && is_array($thisSetting["+$suffix"]) ) { - if (!isset($retval)) + } elseif ( array_key_exists( "+$suffix", $thisSetting ) && is_array($thisSetting["+$suffix"]) ) { + if ( !isset( $retval ) ) { $retval = array(); + } $retval = self::arrayMerge( $retval, $thisSetting["+$suffix"] ); } } @@ -175,8 +292,9 @@ class SiteConfiguration { } $value = $this->getSetting( $varname, $wiki, $params ); - if ( $append && is_array( $value ) && is_array( $GLOBALS[$var] ) ) + if ( $append && is_array( $value ) && is_array( $GLOBALS[$var] ) ) { $value = self::arrayMerge( $value, $GLOBALS[$var] ); + } if ( !is_null( $value ) ) { $localSettings[$var] = $value; } @@ -210,7 +328,7 @@ class SiteConfiguration { * @param $setting String ID of the setting name to retrieve * @param $wiki String Wiki ID of the wiki in question. * @param $suffix String The suffix of the wiki in question. - * @param $var Reference The variable to insert the value into. + * @param $var array Reference The variable to insert the value into. * @param $params Array List of parameters. $.'key' is replaced by $value in all returned data. * @param $wikiTags Array The tags assigned to the wiki. */ @@ -296,8 +414,9 @@ class SiteConfiguration { } foreach( $default as $name => $def ){ - if( !isset( $ret[$name] ) || ( is_array( $default[$name] ) && !is_array( $ret[$name] ) ) ) + if( !isset( $ret[$name] ) || ( is_array( $default[$name] ) && !is_array( $ret[$name] ) ) ) { $ret[$name] = $default[$name]; + } } return $ret; @@ -318,18 +437,21 @@ class SiteConfiguration { protected function mergeParams( $wiki, $suffix, /*array*/ $params, /*array*/ $wikiTags ){ $ret = $this->getWikiParams( $wiki ); - if( is_null( $ret['suffix'] ) ) + if( is_null( $ret['suffix'] ) ) { $ret['suffix'] = $suffix; + } $ret['tags'] = array_unique( array_merge( $ret['tags'], $wikiTags ) ); $ret['params'] += $params; // Automatically fill that ones if needed - if( !isset( $ret['params']['lang'] ) && !is_null( $ret['lang'] ) ) + if( !isset( $ret['params']['lang'] ) && !is_null( $ret['lang'] ) ){ $ret['params']['lang'] = $ret['lang']; - if( !isset( $ret['params']['site'] ) && !is_null( $ret['suffix'] ) ) + } + if( !isset( $ret['params']['site'] ) && !is_null( $ret['suffix'] ) ) { $ret['params']['site'] = $ret['suffix']; + } return $ret; } @@ -343,8 +465,9 @@ class SiteConfiguration { public function siteFromDB( $db ) { // Allow override $def = $this->getWikiParams( $db ); - if( !is_null( $def['suffix'] ) && !is_null( $def['lang'] ) ) + if( !is_null( $def['suffix'] ) && !is_null( $def['lang'] ) ) { return array( $def['suffix'], $def['lang'] ); + } $site = null; $lang = null; @@ -401,7 +524,7 @@ class SiteConfiguration { } public function loadFullData() { - if ($this->fullLoadCallback && !$this->fullLoadDone) { + if ( $this->fullLoadCallback && !$this->fullLoadDone ) { call_user_func( $this->fullLoadCallback, $this ); $this->fullLoadDone = true; } -- cgit v1.2.2