Preferences: Display the default skin first in the list
authorBartosz Dziewoński <matma.rex@gmail.com>
Thu, 7 Dec 2017 18:56:48 +0000 (19:56 +0100)
committerBartosz Dziewoński <matma.rex@gmail.com>
Thu, 7 Dec 2017 19:01:11 +0000 (20:01 +0100)
Bug: T181112
Change-Id: If3de084b2a5f214f7d6d05b86daed151a23678a4

includes/Preferences.php

index e6a8bcc..878462d 100644 (file)
@@ -1177,15 +1177,25 @@ class Preferences {
                                $skinname = htmlspecialchars( $msg->text() );
                        }
                }
-               # Sort by the internal name, so that the ordering is the same for each display language,
-               # especially if some skin names are translated to use a different alphabet and some are not.
-               ksort( $validSkinNames );
 
                $config = $context->getConfig();
                $defaultSkin = $config->get( 'DefaultSkin' );
                $allowUserCss = $config->get( 'AllowUserCss' );
                $allowUserJs = $config->get( 'AllowUserJs' );
 
+               # Sort by the internal name, so that the ordering is the same for each display language,
+               # especially if some skin names are translated to use a different alphabet and some are not.
+               uksort( $validSkinNames, function ( $a, $b ) use ( $defaultSkin ) {
+                       # Display the default first in the list by comparing it as lesser than any other.
+                       if ( strcasecmp( $a, $defaultSkin ) === 0 ) {
+                               return -1;
+                       }
+                       if ( strcasecmp( $b, $defaultSkin ) === 0 ) {
+                               return 1;
+                       }
+                       return strcasecmp( $a, $b );
+               } );
+
                $foundDefault = false;
                foreach ( $validSkinNames as $skinkey => $sn ) {
                        $linkTools = [];