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