MediaWiki r44068 - Code Review

Jump to: navigation, search
Repository:MediaWiki
Revision:r44067‎ | r44068 (on ViewVC)‎ | r44069 >
Date:13:34, 30 November 2008
Author:werdna
Status:ok
Tags:
Comment:
Make sure only vars that are actually *changed* from pre-efConfigureSetup() are saved to the handler.
Modified paths:

Diff [purge]

Index: trunk/extensions/Configure/Configure.obj.php
===================================================================
--- trunk/extensions/Configure/Configure.obj.php	(revision 44067)
+++ trunk/extensions/Configure/Configure.obj.php	(revision 44068)
@@ -89,6 +89,15 @@
 		// Include files before so that customized settings won't be overriden
 		// by the default ones
 		$this->includeFiles();
+		
+		## Snapshot current settings before overriding.
+		## ialex tells me this weird contraption will work
+		$allSettings = array_keys( ConfigurationSettings::singleton( CONF_SETTINGS_BOTH )->getAllSettings() );
+		
+		foreach( $allSettings as $setting ) {
+			if (isset($GLOBALS[$setting]))
+				$this->defaults[$setting] = $GLOBALS[$setting];
+		}
 
 		list( $site, $lang ) = $this->siteFromDB( $this->mWiki );
 		$rewrites = array( 'wiki' => $this->mWiki, 'site' => $site, 'lang' => $lang );
@@ -166,22 +175,13 @@
 	}
 
 	/**
-	 * Get the defalut values for all settings
-	 * Very, very hacky...
+	 * Get the default values for all settings
+	 * Works by recording any overridden values when extracting globals.
 	 *
 	 * @return array
 	 */
 	public function getDefaults() {
-		if ( count( $this->mDefaults ) )
-			return $this->mDefaults;
-
-		global $IP;
-		require( "$IP/includes/DefaultSettings.php" );
-		foreach ( get_defined_vars() as $name => $var ) {
-			if ( substr( $name, 0, 2 ) == 'wg' && $name != 'wgConf' )
-				$this->mDefaults[$name] = $var;
-		}
-		return $this->mDefaults;
+		return $this->defaults;
 	}
 
 	/**
Index: trunk/extensions/Configure/Configure.page.php
===================================================================
--- trunk/extensions/Configure/Configure.page.php	(revision 44067)
+++ trunk/extensions/Configure/Configure.page.php	(revision 44068)
@@ -119,10 +119,17 @@
 	 * @return mixed value of $setting
 	 */
 	protected function getSettingValue( $setting ) {
+		static $defaults;
+		
+		if (!$defaults) {
+			global $wgConf;
+			$defaults = $wgConf->getDefaultsForWiki( $this->mWiki );
+		}
+		
 		if ( isset( $this->conf[$setting] ) ) {
 			return $this->conf[$setting];
 		} else {
-			return isset( $GLOBALS[$setting] ) ? $GLOBALS[$setting] : null;
+			return isset( $defaults[$setting] ) ? $defaults[$setting] : null;
 		}
 	}
 
@@ -439,7 +446,7 @@
 				$arrType = $this->getArrayType( $name );
 				switch( $arrType ) {
 				case 'simple':
-					$text = $wgRequest->getText( 'wp' . $name );
+					$text = trim($wgRequest->getText( 'wp' . $name ));
 					if ( $text == '' )
 						$arr = array();
 					else
@@ -486,7 +493,7 @@
 					global $wgContLang;
 					$arr = array();
 					foreach ( $wgContLang->getNamespaces() as $ns => $unused ) {
-						$arr[$ns] = $wgRequest->getVal( 'wp' . $name . '-ns' . strval( $ns ) );
+						$arr[$ns] = trim( $wgRequest->getVal( 'wp' . $name . '-ns' . strval( $ns ) ) );
 					}
 					$settings[$name] = $arr;
 					break;
@@ -505,7 +512,7 @@
 					foreach ( $wgContLang->getNamespaces() as $ns => $unused ) {
 						if ( $ns < 0 )
 							continue;
-						$text = $wgRequest->getText( 'wp' . $name . '-ns' . strval( $ns ) );
+						$text = trim( $wgRequest->getText( 'wp' . $name . '-ns' . strval( $ns ) ) );
 						if ( $text == '' )
 							$nsProtection = array();
 						else
@@ -518,7 +525,7 @@
 				case 'group-array':
 					$all = array();
 					if ( isset( $_REQUEST['wp' . $name . '-vals'] ) ) {
-						$iter = explode( "\n", $_REQUEST['wp' . $name . '-vals'] );
+						$iter = explode( "\n", trim($wgRequest->getText( 'wp' . $name . '-vals' ) ) );
 						foreach ( $iter as &$group ) {
 							// Our own Sanitizer::unescapeId() :)
 							$group = urldecode( str_replace( array( '.', "\r" ), array( '%', '' ),
@@ -556,7 +563,7 @@
 			case 'text':
 			case 'lang':
 			case 'image-url':
-				$settings[$name] = $wgRequest->getVal( 'wp' . $name );
+				$settings[$name] = trim( $wgRequest->getVal( 'wp' . $name ) );
 				break;
 			case 'int':
 				$settings[$name] = $wgRequest->getInt( 'wp' . $name );
@@ -602,6 +609,15 @@
 		else
 			return $val;
 	}
+	
+	/** Recursive doohicky for normalising variables so we can compare them. */
+	protected static function filterVar( $var ) {
+		if (is_array($var)) {
+			return array_filter( array_map( array( __CLASS__, 'filterVar' ), $var ) );
+		}
+		
+		return $var;
+	}
 
 	/**
 	 * Removes the defaults values from settings
@@ -613,8 +629,16 @@
 		global $wgConf;
 		$defaultValues = $wgConf->getDefaultsForWiki( $this->mWiki );
 		foreach ( $defaultValues as $name => $default ) {
+			## Normalise the two, to avoid false "changes"
+			if (is_array($default))
+				$default = self::filterVar( $default );
+				
 			if ( isset( $settings[$name] ) ) {
-				if ( $settings[$name] === $default ) {
+				$settingCompare = $settings[$name];
+				if (is_array($settingCompare))
+					$settingCompare = self::filterVar($settingCompare);
+			
+				if ( $settingCompare == $default ) {
 					unset( $settings[$name] );
 				} elseif ( $this->canBeMerged( $name, $default ) ) {
 					$value = $settings[$name];
Index: trunk/extensions/Configure/Configure.settings-core.php
===================================================================
--- trunk/extensions/Configure/Configure.settings-core.php	(revision 44067)
+++ trunk/extensions/Configure/Configure.settings-core.php	(revision 44068)
@@ -263,7 +263,6 @@
 			'wgDefaultSkin' => 'text',
 			'wgSkipSkin' => 'text',
 			'wgSkipSkins' => 'array',
-			'wgValidSkinNames' => 'array',
 		),
 	),
 	'category' => array(
@@ -750,7 +749,6 @@
 	'wgArticleRobotPolicies' => 'assoc',
 # Skins
 	'wgSkipSkins' => 'simple',
-	'wgValidSkinNames' => 'assoc',
 # Cache
 	'wgMemCachedServers' => 'simple',
 # Interwiki
Index: trunk/extensions/Configure/Configure.css
===================================================================
--- trunk/extensions/Configure/Configure.css	(revision 44067)
+++ trunk/extensions/Configure/Configure.css	(revision 44068)
@@ -36,7 +36,6 @@
 ul.configtoc {
 	vertical-align: top;
 	max-height: 500px;
-	overflow: auto;
 }
 
 ul.configtoc, ul.configtoc > li > ul {

Status & tagging log

Personal tools
Namespaces
Variants
Views
Actions
Site
Support
Download
Development
Communication
Toolbox