Add a hook into LanguageConverter#getPreferredVariant() to allow extensions to pull...
authorJack Phoenix <jack@countervandalism.net>
Sun, 23 Jul 2017 13:35:09 +0000 (16:35 +0300)
committerJack Phoenix <jack@countervandalism.net>
Sun, 23 Jul 2017 13:35:09 +0000 (16:35 +0300)
Example implementation using this hook: wikiHow's ChineseVariantSelector
extension, installed on zh.wikihow.com, which uses cookies to store the
preferred language variant, allowing anonymous users to change the
language variant without registering/logging in.

Change-Id: I5295a26578b45a8d51f2b7550938088fec18404f

docs/hooks.txt
languages/LanguageConverter.php

index 3ff3365..c21ce8a 100644 (file)
@@ -1662,6 +1662,13 @@ $query: query options passed to Title::getInternalURL()
 'GetIP': modify the ip of the current user (called only once).
 &$ip: string holding the ip as determined so far
 
+'GetLangPreferredVariant': Called in LanguageConverter#getPreferredVariant() to
+  allow fetching the language variant code from cookies or other such
+  alternative storage.
+&$req: language variant from the URL (string) or boolean false if no variant
+  was specified in the URL; the value of this variable comes from
+  LanguageConverter#getURLVariant()
+
 'GetLinkColours': modify the CSS class of an array of page links.
 $linkcolour_ids: array of prefixed DB keys of the pages linked to,
   indexed by page_id.
index 6d0368c..d9e64b4 100644 (file)
@@ -160,6 +160,8 @@ class LanguageConverter {
 
                $req = $this->getURLVariant();
 
+               Hooks::run( 'GetLangPreferredVariant', [ &$req ] );
+
                if ( $wgUser->isSafeToLoad() && $wgUser->isLoggedIn() && !$req ) {
                        $req = $this->getUserVariant();
                } elseif ( !$req ) {