Index: trunk/extensions/Configure/Configure.obj.php
===================================================================
--- trunk/extensions/Configure/Configure.obj.php (revision 44111)
+++ trunk/extensions/Configure/Configure.obj.php (revision 44112)
@@ -147,6 +147,8 @@
* @return array
*/
public function getOldSettings( $ts ) {
+ if ($ts == 'default')
+ return array( 'default' => $this->getDefaults() );
return $this->mHandler->getOldSettings( $ts );
}
@@ -159,6 +161,15 @@
public function getWikisInVersion( $ts ) {
return $this->mHandler->getWikisInVersion( $ts );
}
+
+ /** Recursive doohicky for normalising variables so we can compare them. */
+ public static function filterVar( $var ) {
+ if (is_array($var)) {
+ return array_filter( array_map( array( __CLASS__, 'filterVar' ), $var ) );
+ }
+
+ return $var;
+ }
/**
* Returns a pager for this handler
Index: trunk/extensions/Configure/Configure.page.php
===================================================================
--- trunk/extensions/Configure/Configure.page.php (revision 44111)
+++ trunk/extensions/Configure/Configure.page.php (revision 44112)
@@ -306,12 +306,16 @@
if ( $version = $wgRequest->getVal( 'version' ) ) {
$versions = $wgConf->listArchiveVersions();
- if ( in_array( $version, $versions ) ) {
+ if ( in_array( $version, $versions ) || $version == 'default' ) {
$conf = $wgConf->getOldSettings( $version );
+
+ if ($version == 'default') { ## Hacky special case.
+ $conf[$this->mWiki] = $conf['default'];
+ }
+
$this->conf = $conf[$this->mWiki];
if ( !isset( $conf[$this->mWiki] ) ) {
- $wgOut->addWikiText( '<div class="errorbox">$1</div>',
- array( 'configure-old-not-available', $version ) );
+ $wgOut->addHtml( Xml::tags( 'div', array( 'class' => 'errorbox' ), wfMsgExt( 'configure-old-not-available', 'parseinline', $version ) ) );
return false;
}
$current = null;
@@ -397,7 +401,8 @@
$text .= "</li>\n</ul>\n";
}
$link = SpecialPage::getTitleFor( 'ViewConfig' );
- $text .= $skin->makeKnownLinkObj( $link, wfMsgHtml( 'configure-view-all-versions' ) );
+ $text .= Xml::tags( 'p', null, $skin->makeKnownLinkObj( $link, wfMsgHtml( 'configure-view-all-versions' ) ) );
+ $text .= Xml::tags( 'p', null, $skin->link( SpecialPage::getTitleFor( 'ViewConfig' ), wfMsgHtml( 'configure-view-default' ), array(), array( 'version' => 'default' ) ) );
$text .= '</fieldset>';
return $text;
@@ -611,15 +616,6 @@
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
@@ -633,12 +629,12 @@
foreach ( $defaultValues as $name => $default ) {
## Normalise the two, to avoid false "changes"
if (is_array($default))
- $default = self::filterVar( $default );
+ $default = WebConfiguration::filterVar( $default );
if ( isset( $settings[$name] ) ) {
$settingCompare = $settings[$name];
if (is_array($settingCompare))
- $settingCompare = self::filterVar($settingCompare);
+ $settingCompare = WebConfiguration::filterVar($settingCompare);
if ( $settingCompare == $default ) {
unset( $settings[$name] );
@@ -1113,10 +1109,16 @@
*/
protected function buildTableRow( $conf, $params ) {
global $wgContLang;
+
+ $rowClasses = array();
+
+ if ($params['customised'])
+ $rowClasses[] = 'configure-customised';
$msg = isset( $params['msg'] ) ? $params['msg'] : 'configure-setting-' . $conf;
$showLink = isset( $params['link'] ) ? $params['link'] : true;
+ ## First TD
$attribs = array();
$attribs['align'] = $wgContLang->isRtl() ? 'right' : 'left';
$attribs['valign'] = 'top';
@@ -1132,16 +1134,20 @@
$msgVal = $link;
else
$msgVal = "$msgVal ($link)";
+
+ if ($params['customised'])
+ $msgVal = Xml::tags( 'p', null, $msgVal ).wfMsgExt( 'configure-customised', 'parse' );
$attribs['class'] = 'configure-left-column';
- $td1 = Xml::openElement( 'td', $attribs ) . $msgVal . '</td>';
+ $td1 = Xml::tags( 'td', $attribs, $msgVal );
+
+ ## Only the class is customised per-cell, so we'll just redefine that.
$attribs['class'] = 'configure-right-column';
if ( $this->isSettingAvailable( $conf ) )
- $td2 = Xml::openElement( 'td', $attribs ) . $this->buildInput( $conf, $params ) . '</td>';
+ $td2 = Xml::tags( 'td', $attribs, $this->buildInput( $conf, $params ) );
else
- $td2 = Xml::openElement( 'td', $attribs ) .
- wfMsgExt( 'configure-setting-not-available', array( 'parseinline' ) ) . '</td>';
+ $td2 = Xml::tags( 'td', $attribs, wfMsgExt( 'configure-setting-not-available', array( 'parseinline' ) ) );
- return '<tr>' . $td1 . $td2 . "</tr>\n";
+ return Xml::tags( 'tr', array( 'class' => implode( ' ', $rowClasses ) ), $td1 . $td2 ) . "\n";
}
/**
@@ -1153,6 +1159,9 @@
*/
protected function buildSettings( $settings, $param = array() ) {
wfLoadExtensionMessages( 'ConfigureSettings' );
+
+ global $wgConf;
+ $defaults = $wgConf->getDefaults();
$ret = '';
$perms = array();
@@ -1209,6 +1218,9 @@
'value' => $this->getSettingValue( $setting ),
'link' => $showlink,
);
+
+ $params['customised'] = ( WebConfiguration::filterVar($defaults[$setting]) != WebConfiguration::filterVar($params['value']) );
+
$show = $this->mCanEdit ?
( isset( $params['edit'] ) ? $params['edit'] : $this->userCanEdit( $setting ) ) :
( isset( $params['read'] ) ? $params['read'] : $this->userCanRead( $setting ) );
Index: trunk/extensions/Configure/SpecialViewConfig.php
===================================================================
--- trunk/extensions/Configure/SpecialViewConfig.php (revision 44111)
+++ trunk/extensions/Configure/SpecialViewConfig.php (revision 44112)
@@ -30,8 +30,13 @@
if ( $this->isWebConfig && $version = $wgRequest->getVal( 'version' ) ) {
$versions = $wgConf->listArchiveVersions();
- if ( in_array( $version, $versions ) ) {
+ if ( in_array( $version, $versions ) || $version == 'default' ) {
$conf = $wgConf->getOldSettings( $version );
+
+ if ($version == 'default') { ## Yucky special case.
+ $conf[$this->mWiki] = $conf['default'];
+ }
+
if ( $this->isUserAllowedAll() ) {
$wiki = $wgRequest->getVal( 'wiki', $wgConf->getWiki() );
} else {
@@ -42,7 +47,7 @@
$this->wiki = $wiki;
if ( $diff = $wgRequest->getVal( 'diff' ) ) {
- if ( !in_array( $diff, $versions ) ) {
+ if ( !in_array( $diff, $versions ) && $diff != 'default' ) {
$msg = wfMsgNoTrans( 'configure-old-not-available', $diff );
$wgOut->addWikiText( "<div class='errorbox'>$msg</div>" );
return;
@@ -240,7 +245,8 @@
Xml::element( 'input', array_merge(
array( 'type' => 'radio', 'name' => 'version', 'value' => $ts ),
$versionCheck ) );
-
+
+ $actions[] = $skin->link( $this->getTitle(), wfMsgHtml( 'configure-viewconfig-default-diff' ), array(), array( 'version' => $ts, 'diff' => 'default' ) );
} else {
$buttons = '';
}
Index: trunk/extensions/Configure/Configure.diff.php
===================================================================
--- trunk/extensions/Configure/Configure.diff.php (revision 44111)
+++ trunk/extensions/Configure/Configure.diff.php (revision 44112)
@@ -198,8 +198,8 @@
else
$msgVal = "$msgVal ($rawVal)";
- $oldSet = $this->getSettingAsArray( $old, $name, $type );
- $newSet = $this->getSettingAsArray( $new, $name, $type );
+ $oldSet = WebConfiguration::filterVar( $this->getSettingAsArray( $old, $name, $type ) );
+ $newSet = WebConfiguration::filterVar( $this->getSettingAsArray( $new, $name, $type ) );
$diffs = new Diff( $oldSet, $newSet );
$formatter = new TableDiffFormatter();
@@ -327,12 +327,33 @@
protected function getOldVersion() {
global $wgConf;
- return $wgConf->getOldSettings( $this->diff );
+
+ $settings = $wgConf->getOldSettings( $this->diff );
+
+ if ($this->diff == 'default') { ## Special case: Replicate settings across all wikis for a fair comparison.
+ $new = $this->getNewVersion();
+
+ $defaultSettings = array();
+
+ ## This is kinda annoying. We can't copy ALL settings over, because not all settings are stored.
+ foreach( $new as $wiki => $newSettings ) {
+ $defaultSettings[$wiki] = array();
+
+ foreach( $newSettings as $key => $value ) {
+ $defaultSettings[$wiki][$key] = $settings['default'][$key];
+ }
+ }
+
+ $settings = $defaultSettings;
+ }
+
+ return $settings;
}
protected function getNewVersion() {
global $wgConf;
- return $wgConf->getOldSettings( $this->version );
+ $settings = $wgConf->getOldSettings( $this->version );
+ return $settings;
}
protected function getSettings() {
Index: trunk/extensions/Configure/Configure.i18n.php
===================================================================
--- trunk/extensions/Configure/Configure.i18n.php (revision 44111)
+++ trunk/extensions/Configure/Configure.i18n.php (revision 44112)
@@ -18,6 +18,7 @@
'configure-edit-core' => 'MediaWiki',
'configure-edit-ext' => 'Extensions',
+ 'configure-viewconfig-default-diff' => 'Changes from default settings',
'configure-ext-doc' => 'See online documentation',
'configure-ext-schemachange' => "'''Warning:''' this extension requires a database update to work correctly!",
@@ -25,6 +26,7 @@
'configure-ext-use-extension' => 'Use this extension',
'configure-ext-use' => 'Use',
'configure-form-reason' => 'Reason for change:',
+ 'configure-customised' => "''This setting has been customised''",
'configure-arrayinput-oneperline' => "''(one per line)''",
'configure-summary' => 'This special page allows you to configure this wiki, see [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings] for more information.',
@@ -134,6 +136,7 @@
'configure-transwiki-not-in-range' => 'The requested wiki, $1, is not in allowed values ($2).',
'configure-view' => 'View',
'configure-view-all-versions' => 'Full list of versions',
+ 'configure-view-default' => 'Default settings',
'configure-view-not-allowed' => 'You are not allowed to see this setting',
'configure-viewconfig-line' => '$1 $2 by $3 $5: $4',
'extensions' => 'Configure the extensions',
Index: trunk/extensions/Configure/Configure.js
===================================================================
--- trunk/extensions/Configure/Configure.js (revision 44111)
+++ trunk/extensions/Configure/Configure.js (revision 44112)
@@ -170,7 +170,8 @@
button.onclick = createImageUrlCallback( textbox, img );
textbox.parentNode.insertBefore( button, img );
- textbox.parentNode.appendChild( document.createTextNode( '\u00A0' ), textbox ); // nbsp
+ textbox.parentNode.insertBefore( document.createTextNode( '\u00A0' ), button ); // nbsp
+ img.parentNode.insertBefore( document.createTextNode( '\u00A0' ), img ); // nbsp
}
// $wgGroupPermissions stuff, only if ajax is enabled
Index: trunk/extensions/Configure/Configure.css
===================================================================
--- trunk/extensions/Configure/Configure.css (revision 44111)
+++ trunk/extensions/Configure/Configure.css (revision 44112)
@@ -142,6 +142,10 @@
color: #0318d8;
}
+.configure-customised {
+ background-color: #eef;
+}
+
/**
* disabled settings
*/