John Erling Blad has submitted this change and it was merged.

Change subject: Add fywiki sort order and allow custom order in settings
......................................................................


Add fywiki sort order and allow custom order in settings

Change-Id: I07c3448b253330a2f834e48e565dd0eb28aa45d9
---
M client/config/WikibaseClient.default.php
M client/includes/InterwikiSorter.php
M client/tests/phpunit/includes/InterwikiSorterTest.php
M docs/options.wiki
4 files changed, 51 insertions(+), 15 deletions(-)

Approvals:
  John Erling Blad: Verified; Looks good to me, approved



diff --git a/client/config/WikibaseClient.default.php 
b/client/config/WikibaseClient.default.php
index c2da880..1a564c1 100644
--- a/client/config/WikibaseClient.default.php
+++ b/client/config/WikibaseClient.default.php
@@ -62,7 +62,7 @@
 
 /**
  * @todo this is a bit wikimedia-specific and need to find a better place for 
this stuff,
- * such as mediawiki-config or somewhere.
+ * such as mediawiki-config, mediawiki messages for custom orders, or 
somewhere.
  *
  * alphabetic and alphabetic revised come from:
  * 
http://meta.wikimedia.org/w/index.php?title=MediaWiki:Interwiki_config-sorting_order-native-languagename
@@ -151,5 +151,32 @@
         'tk', 'tw', 'udm', 'uk', 'ur', 'ug', 'za', 'vec', 'vep', 'vo', 
'fiu-vro',
         'wa', 'vls', 'war', 'wo', 'wuu', 'ts', 'xmf', 'yi', 'yo', 'diq', 
'zea', 'zh',
         'zh-tw', 'zh-cn', 'zh-classical', 'zh-yue', 'bat-smg'
-    )
+    ),
+       'alphabetic_fy' => array(
+               'aa', 'ab', 'ace', 'af', 'ay', 'ak', 'als', 'am', 'an', 'ang', 
'ar', 'arc',
+               'arz', 'as', 'ast', 'av', 'az', 'ba', 'bar', 'bat-smg', 'bcl', 
'be', 'be-x-old',
+               'bg', 'bh', 'bi', 'bjn', 'bm', 'bn', 'bo', 'bpy', 'br', 'bs', 
'bug', 'bxr',
+               'ca', 'cbk-zam', 'cdo', 'ce', 'ceb', 'ch', 'chy', 'cho', 'chr', 
'cy', 'ckb',
+               'co', 'cr', 'crh', 'cs', 'csb', 'cu', 'cv', 'da', 'de', 'diq', 
'dk', 'dsb', 'dv',
+               'dz', 'ee', 'el', 'eml', 'en', 'eo', 'es', 'et', 'eu', 'ext', 
'fa', 'ff', 'fi',
+               'fy', 'fiu-vro', 'fj', 'fo', 'fr', 'frp', 'frr', 'fur', 'ga', 
'gag', 'gan', 'gd',
+               'gl', 'glk', 'gn', 'got', 'gu', 'gv', 'ha', 'hak', 'haw', 'he', 
'hi', 'hy',
+               'hif', 'ho', 'hr', 'hsb', 'ht', 'hu', 'hz', 'ia', 'id', 'ie', 
'ig', 'ii', 'yi',
+               'ik', 'ilo', 'io', 'yo', 'is', 'it', 'iu', 'ja', 'jbo', 'jv', 
'ka', 'kaa', 'kab',
+               'kbd', 'kg', 'ki', 'ky', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 
'koi', 'kr', 'krc',
+               'ks', 'ksh', 'ku', 'kv', 'kw', 'la', 'lad', 'lb', 'lbe', 'lez', 
'lg', 'li',
+               'lij', 'lmo', 'ln', 'lo', 'lt', 'ltg', 'lv', 'map-bms', 'mdf', 
'mg', 'mh', 'mhr',
+               'mi', 'my', 'min', 'myv', 'mk', 'ml', 'mn', 'mo', 'mr', 'mrj', 
'ms', 'mt', 'mus',
+               'mwl', 'mzn', 'na', 'nah', 'nan', 'nap', 'nds', 'nds-nl', 'ne', 
'new', 'ng', 'ny',
+               'nl', 'nn', 'no', 'nov', 'nrm', 'nso', 'nv', 'oc', 'om', 'or', 
'os', 'pa', 'pag',
+               'pam', 'pap', 'pcd', 'pdc', 'pfl', 'pi', 'pih', 'pl', 'pms', 
'pnb', 'pnt', 'ps',
+               'pt', 'qu', 'rm', 'rmy', 'rn', 'ro', 'roa-rup', 'roa-tara', 
'ru', 'rue', 'rw',
+               'sa', 'sah', 'sc', 'scn', 'sco', 'sd', 'se', 'sg', 'sh', 'shi', 
'si', 'simple',
+               'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'srn', 'ss', 'st', 
'stq', 'su', 'sv',
+               'sw', 'szl', 'ta', 'te', 'tet', 'tg', 'th', 'ti', 'ty', 'tk', 
'tl', 'tn', 'to',
+               'tokipona', 'tp', 'tpi', 'tr', 'ts', 'tt', 'tum', 'tw', 'udm', 
'ug', 'uk', 'ur',
+               'uz', 've', 'vec', 'vep', 'vi', 'vls', 'vo', 'wa', 'war', 'wo', 
'wuu', 'xal',
+               'xh', 'xmf', 'za', 'zea', 'zh', 'zh-classical', 'zh-cn', 
'zh-yue', 'zh-min-nan',
+               'zh-tw', 'zu'
+       ),
 );
diff --git a/client/includes/InterwikiSorter.php 
b/client/includes/InterwikiSorter.php
index 7313bb8..f4955be 100644
--- a/client/includes/InterwikiSorter.php
+++ b/client/includes/InterwikiSorter.php
@@ -123,26 +123,29 @@
         *
         * @return array
         */
-       protected function buildSortOrder( $sort, array $sortOrders, 
$sortPrepend ) {
+       protected function buildSortOrder( $sort, array $sortOrders, array 
$sortPrepend ) {
+               if ( !array_key_exists( 'alphabetic', $sortOrders ) ) {
+                       throw new \MWException( 'alphabetic interwiki sorting 
order is missing from Wikibase Client settings.' );
+               }
+
                $sortOrder = $sortOrders['alphabetic'];
 
                if ( $sort === 'alphabetic' ) {
                        // do nothing
-               } else if ( $sort === 'alphabetic_revised' ) {
-                       $sortOrder = $sortOrders['alphabetic_revised'];
-               } else if ( $sort === 'alphabetic_sr' ) {
-                       $sortOrder = $sortOrders['alphabetic_sr'];
                } else if ( $sort === 'code' ) {
-                       // default code sort order
                        sort( $sortOrder );
                } else {
-                       // something went wrong but we can use default order
-                       trigger_error( __CLASS__
-                               . ' : invalid sort order specified for 
interwiki links.', E_USER_WARNING );
-           sort( $sortOrder );
+                       if ( array_key_exists( $sort, $sortOrders ) ) {
+                               $sortOrder = $sortOrders[$sort];
+                       } else {
+                               // something went wrong but we can use default 
order
+                               trigger_error( __CLASS__
+                                       . ' : invalid or unknown sort order 
specified for interwiki links.', E_USER_WARNING );
+                               sort( $sortOrder );
+                       }
                }
 
-               if( !empty( $sortPrepend ) ) {
+               if ( $sortPrepend !== array() ) {
                        $sortOrder = array_unique( array_merge( $sortPrepend, 
$sortOrder ) );
                }
 
diff --git a/client/tests/phpunit/includes/InterwikiSorterTest.php 
b/client/tests/phpunit/includes/InterwikiSorterTest.php
index 04f319f..2a6f28b 100644
--- a/client/tests/phpunit/includes/InterwikiSorterTest.php
+++ b/client/tests/phpunit/includes/InterwikiSorterTest.php
@@ -37,7 +37,8 @@
                return array(
                        'alphabetic' => array( 'ar', 'de', 'en', 'fr', 'ks', 
'rn', 'ky', 'hu', 'ja', 'pt' ),
                        'alphabetic_revised' => array( 'ar', 'de', 'en', 'fr', 
'ks', 'ky', 'rn', 'hu', 'ja', 'pt' ),
-                       'alphabetic_sr' => array( 'ar', 'de', 'en', 'fr', 'ky', 
'rn', 'ks', 'ja', 'hu', 'pt' )
+                       'alphabetic_sr' => array( 'ar', 'de', 'en', 'fr', 'ky', 
'rn', 'ks', 'ja', 'hu', 'pt' ),
+                       'mycustomorder' => array( 'de', 'ja', 'pt', 'hu', 'en' 
),
                );
        }
 
@@ -85,7 +86,11 @@
                        array(
                                $links, 'alphabetic_revised', $sortOrders, 
array( 'hu' ),
                                array( 'hu', 'ar', 'de', 'en', 'fr', 'ks', 
'ky', 'rn', 'ja', 'pt' )
-                       )
+                       ),
+                       array(
+                               array( 'ja', 'de', 'pt', 'en', 'hu' ), 
'mycustomorder', $sortOrders, array(),
+                               $sortOrders['mycustomorder']
+                       ),
                );
        }
 
diff --git a/docs/options.wiki b/docs/options.wiki
index e383cba..705b763 100644
--- a/docs/options.wiki
+++ b/docs/options.wiki
@@ -73,6 +73,7 @@
 :;<code>'none'</code>: Don't sort. Basically, the order of the links is not 
guaranteed. '''Deprecated''' and dysfunctional.
 : Default is <code>'code'</code>.
 ;sortPrepend: List of language codes to put on top of the language links in 
the side bar. Default: <code>array()</code>. '''Note''': this may change to use 
global wiki IDs instead of language codes in the future.
+;interwikiSortOrder: Specify a custom sort order for interwiki links; default 
options provided include alphabetic, code, alphabetic revised, alphabetic_sr, 
and alphabetic_fy.
 ;alwaysSort: Sort links from wikitext even if 
<code><nowiki>{{noexternallanglinks:*}}</nowiki></code> is used. Default: 
<code>true</code>.
 ;siteGlobalID: This site's global ID (e.g. <code>'itwiki'</code>), as used in 
the sites table. Default: <code>$wgDBname</code>.
 ;siteLocalID: This site's local ID resp. language code (e.g. 
<code>'it'</code>). Default: <code>$wgLanguageCode</code>. '''Note:''' this 
setting will be removed once we can take this information from the sites table.

-- 
To view, visit https://gerrit.wikimedia.org/r/52417
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I07c3448b253330a2f834e48e565dd0eb28aa45d9
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <aude.w...@gmail.com>
Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de>
Gerrit-Reviewer: John Erling Blad <john.b...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to