From 8a6428a3f57ca9506b8366341a90d21bb7bf4716 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Sun, 27 Jul 2014 22:27:29 +0200 Subject: [PATCH] Preferences: Disable the 'skin' preference if there are no skins Having a radio field with no valid values makes MediaWiki sad and causes exceptions. Also make double-sure that the global default value is not invalid. That causes exceptions too. Change-Id: I90cc9e6f40303aa5771c265948a0be4a4ce2e42c --- includes/Preferences.php | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/includes/Preferences.php b/includes/Preferences.php index 084d6ab2e5..eb29e41508 100644 --- a/includes/Preferences.php +++ b/includes/Preferences.php @@ -579,12 +579,16 @@ class Preferences { ## Skin ##################################### global $wgAllowUserCss, $wgAllowUserJs; - $defaultPreferences['skin'] = array( - 'type' => 'radio', - 'options' => self::generateSkinOptions( $user, $context ), - 'label' => ' ', - 'section' => 'rendering/skin', - ); + // Skin selector, if there is at least one valid skin + $skinOptions = self::generateSkinOptions( $user, $context ); + if ( $skinOptions ) { + $defaultPreferences['skin'] = array( + 'type' => 'radio', + 'options' => $skinOptions, + 'label' => ' ', + 'section' => 'rendering/skin', + ); + } # Create links to user CSS/JS pages for all skins # This code is basically copied from generateSkinOptions(). It'd @@ -1064,12 +1068,14 @@ class Preferences { } asort( $validSkinNames ); + $foundDefault = false; foreach ( $validSkinNames as $skinkey => $sn ) { $linkTools = array(); # Mark the default skin if ( $skinkey == $wgDefaultSkin ) { $linkTools[] = $context->msg( 'default' )->escaped(); + $foundDefault = true; } # Create preview link @@ -1094,6 +1100,12 @@ class Preferences { $ret[$display] = $skinkey; } + if ( !$foundDefault ) { + // If the default skin is not available, things are going to break horribly because the + // default value for skin selector will not be a valid value. Let's just not show it then. + return array(); + } + return $ret; } -- 2.20.1