Kipcool has submitted this change and it was merged.

Change subject: Defined Meaning Namespace + lang/user global fixes
......................................................................


Defined Meaning Namespace + lang/user global fixes

When a preferred language is not found in wgLang, the preferred language
is searched at wgUser first, before defaulting to English, and then any
other language.

Patch 2:
Restructured two database API functions to display both the expression and
definition to the user language preference, if available. removed a @todo.

Patch 3:
Special page Suggest now outputs in the preferred language in some languages
like Min Nan and German. Using $wgUser global instead of $wgLang seems to
be preferred, since this fixed the Min Nan and German problem of always
seeing English.

Patch 4:
created more lang/user global safety net, so more data will be displayed
under the user's language preference.

Patch 5:
an error at WikiDataAPI, fixed.

Patch 6:
additional note on the lang/user global issue.

Patch 7:
additional lang/user safety nets created.

I think I have covered most of them. Kindly check and merge when there are
no more issues and/or suggestions. Thanks!

Change-Id: Id7e6d73eab24285797569dbefd904e5424543452
---
M OmegaWiki/DefinedMeaning.php
M OmegaWiki/Editor.php
M OmegaWiki/OmegaWikiRecordSets.php
M OmegaWiki/SpecialSelect.php
M OmegaWiki/SpecialSuggest.php
M OmegaWiki/WikiDataAPI.php
M OmegaWiki/Wikidata.php
M OmegaWiki/forms.php
M OmegaWiki/languages.php
M Wikidata.hooks.php
10 files changed, 116 insertions(+), 57 deletions(-)

Approvals:
  Kipcool: Verified; Looks good to me, approved



diff --git a/OmegaWiki/DefinedMeaning.php b/OmegaWiki/DefinedMeaning.php
index 3fbfc98..dfd1da1 100644
--- a/OmegaWiki/DefinedMeaning.php
+++ b/OmegaWiki/DefinedMeaning.php
@@ -91,8 +91,6 @@
                // @note Since the defined meaning expression can be misleading 
and
                // the software is now able to redirect using the dm id only, 
it seems logical
                // to replace the full dm title and replace it with the id. ~he
-               // @todo Maybe in the future, $expressionTranslated will 
default to the user
-               // language or preferred language. ~he
                $wgOut->setPageTitle( "DefinedMeaning:{$dmInfo['id']} - 
$expressionTranslated" ) ;
 
                $editor = getDefinedMeaningEditor( $this->viewInformation );
diff --git a/OmegaWiki/Editor.php b/OmegaWiki/Editor.php
index e22911c..0503ea9 100644
--- a/OmegaWiki/Editor.php
+++ b/OmegaWiki/Editor.php
@@ -1150,7 +1150,7 @@
        }
 
        public function getViewHTML( IdStack $idPath, $definedMeaningId ) {
-               global $wgOut, $wgLang, $wgUser;
+               global $wgOut, $wgUser;
 
                /**
                 * the first definition will be used as a meta descriptor for 
search engines
@@ -1160,7 +1160,10 @@
 
                $output = "";
 
-               $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ;
+               if ( !$userLanguageId = getLanguageIdForCode( 
$wgUser->mOptionOverrides['language'] ) ) {
+                       global $wgLang;
+                       $userLanguageId = getLanguageIdForCode( 
$wgLang->getCode() ) ;
+               }
                $definition = getDefinedMeaningDefinition( $definedMeaningId );
                $definingExpression = definingExpression( $definedMeaningId );
 
diff --git a/OmegaWiki/OmegaWikiRecordSets.php 
b/OmegaWiki/OmegaWikiRecordSets.php
index 388f6eb..38950e9 100644
--- a/OmegaWiki/OmegaWikiRecordSets.php
+++ b/OmegaWiki/OmegaWikiRecordSets.php
@@ -169,8 +169,11 @@
 }
 
 function getDefinedMeaningReferenceRecords( array $definedMeaningIds, $usedAs 
) {
-       global $wgLang ;
-       $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ;
+       global $wgUser;
+       if ( !$userLanguageId = getLanguageIdForCode( 
$wgUser->mOptionOverrides['language'] ) ) {
+               global $wgLang;
+               $userLanguageId = getLanguageIdForCode( $wgLang->getCode() );
+       }
 
 //     $startTime = microtime(true);
 
@@ -486,7 +489,7 @@
  */
 function getExpressionsRecordSet( $spelling, ViewInformation $viewInformation, 
$dc = null ) {
        wfProfileIn( __METHOD__ );
-       global $wgLang;
+       global $wgUser;
        $o = OmegaWikiAttributes::getInstance();
 
        $queryResult = null;
@@ -501,7 +504,10 @@
 
        } else {
                // default: is there an expression in the user language?
-               $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ;
+               if ( !$userLanguageId = getLanguageIdForCode( 
$wgUser->mOptionOverrides['language'] ) ) {
+                       global $wgLang;
+                       $userLanguageId = getLanguageIdForCode( 
$wgLang->getCode() );
+               }
                if ( $userLanguageId ) {
                        $expressionLang = $userLanguageId;
                }
diff --git a/OmegaWiki/SpecialSelect.php b/OmegaWiki/SpecialSelect.php
index 53b5d77..1c4592d 100644
--- a/OmegaWiki/SpecialSelect.php
+++ b/OmegaWiki/SpecialSelect.php
@@ -13,14 +13,19 @@
        function execute( $par ) {
                require_once( 'languages.php' );
                require_once( 'Transaction.php' );
-               global $wgOut, $wgLang, $wgRequest;
+               global $wgOut, $wgUser, $wgRequest;
 
                $wgOut->disable();
 
                $dc = wdGetDataSetContext();
                $optionAttribute = $wgRequest->getVal( WLD_OPTION_ATTRIBUTE );
                $attributeObject = $wgRequest->getVal( 'attribute-object', 0 );
-               $lang_code = $wgLang->getCode();
+               $lang_code = $wgUser->mOptionOverrides['language'];
+               if ( !$lang_id = getLanguageIdForCode( $lang_code ) ) {
+                       global $wgLang;
+                       $lang_code == $wgLang->getCode();
+                       $lang_id = getLanguageIdForCode( $lang_code );
+               }
 
                $dbr = wfGetDB( DB_SLAVE );
 
@@ -84,7 +89,7 @@
                                        'exp.spelling',
                                        array(
                                                'synt.defined_meaning_id' => 
$options_row->option_mid,
-                                               'exp.language_id' => 
getLanguageIdForCode( 'en' ),
+                                               'exp.language_id' => 
WLD_ENGLISH_LANG_ID,
                                                'exp.expression_id = 
synt.expression_id',
                                                'exp.remove_transaction_id' => 
null,
                                                'synt.remove_transaction_id' => 
null
diff --git a/OmegaWiki/SpecialSuggest.php b/OmegaWiki/SpecialSuggest.php
index ada2c84..be97043 100644
--- a/OmegaWiki/SpecialSuggest.php
+++ b/OmegaWiki/SpecialSuggest.php
@@ -15,11 +15,12 @@
        }
 
        function execute( $par ) {
-               global $wgOut, $wgLang, $wgDBprefix;
+               global $wgOut, $wgUser, $wgDBprefix;
                require_once( "Attribute.php" );
                require_once( "WikiDataBootstrappedMeanings.php" );
                require_once( "RecordSet.php" );
-               require_once( "Editor.php" );
+               // This made my local copy useless, I do not know why. ~he
+       //      require_once( "Editor.php" );
                require_once( "HTMLtable.php" );
                require_once( "Transaction.php" );
                require_once( "OmegaWikiEditors.php" );
@@ -42,16 +43,17 @@
                $attributesLevel = $request->getVal( 'attributesLevel' );
                $annotationAttributeId = $request->getVal( 
'annotationAttributeId' );
                $syntransId = $request->getVal( 'syntransId' );
-               $langCode = $wgLang->getCode();
 
+               // retrieve languageCode from user global else from lang global
+               $langCode = $wgUser->mOptionOverrides['language'];
+               $this->userLangId = getLanguageIdForCode( $langCode );
+               if ( !$this->userLangId ) {
+                       global $wgLang;
+                       $langCode = $wgLang->getCode();
+                       $this->userLangId = getLanguageIdForCode( $langCode );
+               }
                $sql = '';
 
-               $this->userLangId = $this->dbr->selectField(
-                       'language',
-                       'language_id',
-                       array( 'wikimedia_key' => $langCode ),
-                       __METHOD__
-               );
                if ( !$this->userLangId ) {
                        // English default
                        $this->userLangId = WLD_ENGLISH_LANG_ID ;
diff --git a/OmegaWiki/WikiDataAPI.php b/OmegaWiki/WikiDataAPI.php
index 6ccad7d..e7e02b6 100644
--- a/OmegaWiki/WikiDataAPI.php
+++ b/OmegaWiki/WikiDataAPI.php
@@ -1868,21 +1868,28 @@
  * @param $definedMeaningId
  */
 function getDefinedMeaningDefinition( $definedMeaningId ) {
-       global $wgLang;
-       $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ;
+       global $wgLang, $wgUser;
+       $userLanguageId[] = getLanguageIdForCode( 
$wgUser->mOptionOverrides['language'] );
+       $userLanguageId[] = getLanguageIdForCode( $wgLang->getCode() ) ;
 
-       if ( $userLanguageId > 0 ) {
-               $result = getDefinedMeaningDefinitionForLanguage( 
$definedMeaningId, $userLanguageId );
-       } else {
-               $result = "";
+       $result = '';
+       foreach( $userLanguageId as $uLid ) {
+               if ( $uLid > 0 ) {
+                       $result = getDefinedMeaningDefinitionForLanguage( 
$definedMeaningId, $uLid );
+               }
+               if ( $result ) {
+                       $userLanguageId = array();
+               }
        }
+
        if ( $result == "" ) {
-               $result = getDefinedMeaningDefinitionForLanguage( 
$definedMeaningId, 85 );
+               $result = getDefinedMeaningDefinitionForLanguage( 
$definedMeaningId, WLD_ENGLISH_LANG_ID );
 
                if ( $result == "" ) {
                        $result = getDefinedMeaningDefinitionForAnyLanguage( 
$definedMeaningId );
                }
        }
+
        return $result;
 }
 
@@ -1953,10 +1960,27 @@
 function getSpellingForLanguage( $definedMeaningId, $languageCode, 
$fallbackLanguageCode = WLD_ENGLISH_LANG_WMKEY, $dc = null ) {
 
        $userLanguageId = getLanguageIdForCode( $languageCode );
+
        $fallbackLanguageId = getLanguageIdForCode( $fallbackLanguageCode );
 
        return getSpellingForLanguageId( $definedMeaningId, $userLanguageId, 
$fallbackLanguageId, $dc );
 
+}
+
+function getSpellingForUserLanguage( $definedMeaningId, $languageCode, 
$fallbackLanguageCode = WLD_ENGLISH_LANG_WMKEY, $dc = null ) {
+
+       // @note There are functions that need this check due to user and lang 
globals issue. ~he
+       if ( !$userLanguageId = getLanguageIdForCode( $languageCode ) ) {
+               global $wgLang;
+               if ( $languageCode == $wgLang->getCode() ) {
+                       global $wgUser;
+                       $userLanguageId = getLanguageIdForCode( 
$wgUser->mOptionOverrides['language'] );
+               } else {
+                       $userLanguageId = getLanguageIdForCode( 
$wgLang->getCode() );
+               }
+       }
+
+       return getSpellingForLanguage( $definedMeaningId, $languageCode, 
$fallbackLanguageCode, $dc );
 }
 
 /**
@@ -2571,20 +2595,25 @@
  * @param $definedMeaningId
  */
 function definedMeaningExpression( $definedMeaningId ) {
-       global $wgLang;
+       global $wgLang, $wgUser;
+       $userLanguageId[] = getLanguageIdForCode( 
$wgUser->mOptionOverrides['language'] );
+       $userLanguageId[] = getLanguageIdForCode( $wgLang->getCode() ) ;
 
-       $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ;
+       $result = '';
+       foreach( $userLanguageId as $uLid ) {
+               if ( $uLid > 0 ) {
+                       $result = definedMeaningExpressionForLanguage( 
$definedMeaningId, $uLid );
+               }
+               if ( $result ) {
+                       $userLanguageId = array();
+               }
+       }
 
        list( $definingExpressionId, $definingExpression, 
$definingExpressionLanguage ) = definingExpressionRow( $definedMeaningId );
 
-       if ( $userLanguageId > 0 ) {
-               $result = definedMeaningExpressionForLanguage( 
$definedMeaningId, $userLanguageId );
-       } else {
-               $result = "";
-       }
        if ( $result == "" ) {
                // if no expression exists for the specified language : look 
for an expression in English
-               $result = definedMeaningExpressionForLanguage( 
$definedMeaningId, 85 );
+               $result = definedMeaningExpressionForLanguage( 
$definedMeaningId, WLD_ENGLISH_LANG_ID );
 
                if ( $result == "" ) {
                        $result = definedMeaningExpressionForAnyLanguage( 
$definedMeaningId );
diff --git a/OmegaWiki/Wikidata.php b/OmegaWiki/Wikidata.php
index 91d2273..c1c7eff 100644
--- a/OmegaWiki/Wikidata.php
+++ b/OmegaWiki/Wikidata.php
@@ -327,8 +327,9 @@
        function fetchName() {
                global $wgLang, $wdTermDBDataSet;
                if ( $wdTermDBDataSet ) {
-                       $userLanguage = $wgLang->getCode() ;
-                       $spelling = getSpellingForLanguage( $this->dmId, 
$userLanguage, 'en', $wdTermDBDataSet );
+                       $userLanguage = $wgLang->getCode();
+                       // @note any user/lang global problem here is solved by 
the getSpellingForUserLanguage() function.
+                       $spelling = getSpellingForUserLanguage( $this->dmId, 
$userLanguage, 'en', $wdTermDBDataSet );
                        if ( $spelling ) return $spelling;
                }
                return $this->getFallbackName();
diff --git a/OmegaWiki/forms.php b/OmegaWiki/forms.php
index d65919f..1107006 100644
--- a/OmegaWiki/forms.php
+++ b/OmegaWiki/forms.php
@@ -76,7 +76,7 @@
        } else {
                $onChangeAttribute = '';
        }
-       
+
        $result = '<select id="' . $name . '" name="' . $name . '"' . 
$onChangeAttribute . '>';
  
        asort( $options );
@@ -86,7 +86,7 @@
                        $selected = ' selected="selected"';
                else
                        $selected = '';
-                       
+
                $result .= '<option value="' . $value . '"' . $selected . '>' . 
htmlspecialchars( $text ) . '</option>';
        }
 
@@ -117,7 +117,7 @@
 */
 function getSuggest( $name, $query, $parameters = array(), $value = 0, $label 
= '', $displayLabelColumns = array( 0 ), DataSet $dc = null ) {
        global
-               $wgScriptPath, $wgLang;
+               $wgScriptPath;
 
        if ( is_null( $dc ) ) {
                $dc = wdGetDataSetContext();
@@ -201,23 +201,32 @@
 }
 
 function getLanguageOptions( $languageIdsToExclude = array() ) {
-       global $wgLang ;
-               
-       $userLanguage = $wgLang->getCode();
+       global $wgUser;
+
+       $userLanguage = $wgUser->mOptionOverrides['language'];
+       if ( !$userLanguageId = getLanguageIdForCode( $userLanguage ) ) {
+               global $wgLang;
+               $userLanguage = $wgLang->getCode();
+       }
+
        $idNameIndex = getLangNames( $userLanguage );
-       
+
        $result = array();
-       
+
        foreach ( $idNameIndex as $id => $name )
                if ( !in_array( $id, $languageIdsToExclude ) )
                        $result[$id] = $name;
-       
+
        return $result;
 }
-       
+
+// @note unused        function
 function getLanguageSelect( $name, $languageIdsToExclude = array() ) {
-       global $wgLang ;
-       $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ;
+       global $wgUser;
+       if ( !$userLanguageId = getLanguageIdForCode( 
$wgUser->mOptionOverrides['language'] ) ) {
+               global $wgLang;
+               $userLanguageId = getLanguageIdForCode( $wgLang->getCode() );
+       }
 
        return getSelect( $name, getLanguageOptions( $languageIdsToExclude ), 
$userLanguageId );
 }
@@ -243,7 +252,7 @@
                $result .= '<tr><th>' . $caption . '</th><td 
class="option-field">' . $field . '</td></tr>';
 
        $buttonHTML = "";
-       
+
        foreach ( $buttons as $name => $caption )
        {
                if ( $caption == null ) {
@@ -252,13 +261,13 @@
                }
                $buttonHTML .= getSubmitButton( $name, $caption );
        }
-       
+
        $result .=
                                        '<tr><th/><td>' . $buttonHTML . 
'</td></tr>' .
                                '</table>' .
                        '</form>' .
                '</div>';
-               
+
        return $result;
 }
 
@@ -279,7 +288,7 @@
                $result .= '<tr><th>' . $caption . '</th><td 
class="option-field">' . $field . '</td></tr>';
 
        $buttonHTML = "";
-       
+
        foreach ( $buttons as $name => $caption )
        {
                if ( $caption == null ) {
@@ -288,13 +297,13 @@
                }
                $buttonHTML .= getSubmitButton( $name, $caption );
        }
-       
+
        $result .=
                                        '<tr><th/><td>' . $buttonHTML . 
'</td></tr>' .
                                '</table>' .
                        '</form>' .
                '</div>';
-               
+
        return $result;
 }
 
diff --git a/OmegaWiki/languages.php b/OmegaWiki/languages.php
index 7a355bd..8345e79 100644
--- a/OmegaWiki/languages.php
+++ b/OmegaWiki/languages.php
@@ -7,10 +7,13 @@
  * @return array of language names for the user's language preference
  **/
 function getOwLanguageNames( $purge = false ) {
-       global $wgLang ;
+       global $wgUser;
        static $owLanguageNames = null;
        if ( is_null( $owLanguageNames ) && !$purge ) {
-               $owLanguageNames = getLangNames( $wgLang->getCode() );
+               if ( !$owLanguageNames = getLangNames( 
$wgUser->mOptionOverrides['language'] ) ) {
+                       global $wgLang;
+                       $owLanguageNames = getLangNames( $wgLang->getCode() );
+               }
        }
        return $owLanguageNames;
 }
diff --git a/Wikidata.hooks.php b/Wikidata.hooks.php
index 9ad0f2a..0391ea0 100644
--- a/Wikidata.hooks.php
+++ b/Wikidata.hooks.php
@@ -161,6 +161,9 @@
                return true; // no match
        }
 
+       /** @note There is a language code difference between globals $wgLang 
and $wgUser.
+        *      I do not know if this issue affects this function. ~he
+        */
        public static function onPageContentLanguage( $title, &$pageLang ) {
                if ( $title->getNamespace() === NS_EXPRESSION || 
$title->getNamespace() === NS_DEFINEDMEANING ) {
                        global $wgLang;

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Id7e6d73eab24285797569dbefd904e5424543452
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/WikiLexicalData
Gerrit-Branch: master
Gerrit-Owner: Hiong3-eng5 <[email protected]>
Gerrit-Reviewer: Hiong3-eng5 <[email protected]>
Gerrit-Reviewer: Kipcool <[email protected]>
Gerrit-Reviewer: Purodha <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to