/** * Returns one spelling of an expression corresponding to a given DM * - in a given language if it exists * - or else in English * - or else in any language * @param $definedMeaningId */ function definedMeaningExpression( $definedMeaningId ) { global $wgLang; $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ; 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 ); if ( $result == "" ) { $result = definedMeaningExpressionForAnyLanguage( $definedMeaningId ); if ( $result == "" ) { $result = $definingExpression; } } } return $result; }
function getDefinedMeaningReferenceRecords( array $definedMeaningIds, $usedAs ) { global $wgLang ; $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ; // $startTime = microtime(true); $result = array(); $definedMeaningIdsForExpressions = $definedMeaningIds; if ( count( $definedMeaningIds ) > 0 ) { global $wgRecordSetLanguage; if ( $wgRecordSetLanguage > 0 ) { $userLanguage = $wgRecordSetLanguage; } else { $userLanguage = getLanguageIdForCode( $wgLang->getCode() ); } if ( $userLanguage > 0 ) $definingLanguage = $userLanguage; else $definingLanguage = 85; fetchDefinedMeaningReferenceRecords( getDefiningSQLForLanguage( $definingLanguage, $definedMeaningIds ), $definedMeaningIds, $result, $usedAs ); if ( count( $definedMeaningIds ) > 0 ) { if ( $userLanguage > 0 ) fetchDefinedMeaningReferenceRecords( getSynonymSQLForLanguage( $userLanguage, $definedMeaningIds ), $definedMeaningIds, $result, $usedAs ); if ( count( $definedMeaningIds ) > 0 ) { fetchDefinedMeaningReferenceRecords( getSynonymSQLForLanguage( 85, $definedMeaningIds ), $definedMeaningIds, $result, $usedAs ); if ( count( $definedMeaningIds ) > 0 ) { fetchDefinedMeaningReferenceRecords( getSynonymSQLForAnyLanguage( $definedMeaningIds ), $definedMeaningIds, $result, $usedAs ); } } } fetchDefinedMeaningDefiningExpressions( $definedMeaningIdsForExpressions, $result ); $result[0] = getNullDefinedMeaningReferenceRecord(); } // $queriesTime = microtime(true) - $startTime; // echo "<!-- Defined meaning reference queries: " . $queriesTime . " -->\n"; return $result; }
/** * Returns a SQL query string for fetching language names in a given language. * @param $lang_code the language in which to retrieve the language names **/ function getSQLForLanguageNames( $lang_code ) { /* Use a simpler query if the user's language is English. */ /* getLanguageIdForCode( 'en' ) = 85 */ if ( $lang_code == 'en' || !( $lang_id = getLanguageIdForCode( $lang_code ) ) ) return 'SELECT language_id AS row_id, language_name' . ' FROM language_names' . ' WHERE name_language_id = 85' ; /* Fall back on English in cases where a language name is not present in the user's preferred language. */ else return 'SELECT language.language_id AS row_id, COALESCE(ln1.language_name,ln2.language_name) AS language_name' . ' FROM language' . ' LEFT JOIN language_names AS ln1 ON language.language_id = ln1.language_id' . ' AND ln1.name_language_id = ' . $lang_id . ' JOIN language_names AS ln2 ON language.language_id = ln2.language_id AND ln2.name_language_id = 85 ' ; }
function execute( $par ) { require_once( 'languages.php' ); require_once( 'Transaction.php' ); global $wgOut, $wgLang, $wgRequest, $wgOptionAttribute; $wgOut->disable(); $dc = wdGetDataSetContext(); $optionAttribute = $wgRequest->getVal( $wgOptionAttribute ); $attributeObject = $wgRequest->getVal( 'attribute-object' ); $lang_code = $wgLang->getCode(); $dbr = wfGetDB( DB_SLAVE ); $sql = 'SELECT language_id' . " FROM {$dc}_syntrans" . " JOIN {$dc}_expression ON {$dc}_expression.expression_id = {$dc}_syntrans.expression_id" . " WHERE {$dc}_syntrans.syntrans_sid = " . $attributeObject . ' AND ' . getLatestTransactionRestriction( "{$dc}_syntrans" ) . ' AND ' . getLatestTransactionRestriction( "{$dc}_expression" ); $lang_res = $dbr->query( $sql ); $objectLanguage = $dbr->fetchObject( $lang_res )->language_id; // language is not always defined, for example for a DM Option Attribute if ( ! $objectLanguage ) $objectLanguage = 0 ; $sql = "SELECT {$dc}_option_attribute_options.option_id,{$dc}_option_attribute_options.option_mid" . " FROM {$dc}_option_attribute_options" . " WHERE {$dc}_option_attribute_options.attribute_id = " . $optionAttribute . " AND ({$dc}_option_attribute_options.language_id = " . $objectLanguage . " OR {$dc}_option_attribute_options.language_id = 0)" . ' AND ' . getLatestTransactionRestriction( "{$dc}_option_attribute_options" ) ; $options_res = $dbr->query( $sql ); $optionsString = ''; $optionsArray = array() ; while ( $options_row = $dbr->fetchObject( $options_res ) ) { /* Use a simpler query if the user's language is English. */ if ( $lang_code == 'en' || !( $lang_id = getLanguageIdForCode( $lang_code ) ) ) { $sql = "SELECT {$dc}_expression.spelling" . " FROM {$dc}_syntrans" . " JOIN {$dc}_expression ON {$dc}_expression.expression_id = {$dc}_syntrans.expression_id" . " WHERE {$dc}_syntrans.defined_meaning_id = " . $options_row->option_mid . " AND {$dc}_expression.language_id = " . getLanguageIdForCode( 'en' ) . ' AND ' . getLatestTransactionRestriction( "{$dc}_syntrans" ) . ' AND ' . getLatestTransactionRestriction( "{$dc}_expression" ); } /* Fall back on English in cases where an option name is not present in the user's preferred language. */ else { /* XXX: This setup is really hacked together. It NEEDS to be improved. */ $sql = "SELECT {$dc}_expression.spelling" . " FROM {$dc}_syntrans" . " JOIN {$dc}_expression ON {$dc}_expression.expression_id = {$dc}_syntrans.expression_id" . " WHERE {$dc}_syntrans.defined_meaning_id = " . $options_row->option_mid . " AND {$dc}_expression.language_id = " . $lang_id . ' AND ' . getLatestTransactionRestriction( "{$dc}_syntrans" ) . ' AND ' . getLatestTransactionRestriction( "{$dc}_expression" ); $res = $dbr->query( $sql ); if ( !$dbr->fetchObject( $res )->spelling ) $sql = "SELECT {$dc}_expression.spelling" . " FROM {$dc}_syntrans" . " JOIN {$dc}_expression ON {$dc}_expression.expression_id = {$dc}_syntrans.expression_id" . " WHERE {$dc}_syntrans.defined_meaning_id = " . $options_row->option_mid . " AND {$dc}_expression.language_id = " . getLanguageIdForCode( 'en' ) . ' AND ' . getLatestTransactionRestriction( "{$dc}_syntrans" ) . ' AND ' . getLatestTransactionRestriction( "{$dc}_expression" ); } $spelling_res = $dbr->query( $sql ); $spelling_row = $dbr->fetchObject( $spelling_res ); $optionsArray[$options_row->option_id] = $spelling_row->spelling ; } asort( $optionsArray ) ; foreach ($optionsArray as $option_id => $spelling ) { if ( $optionsString != '' ) $optionsString .= "\n"; $optionsString .= $option_id . ';' . $spelling ; } echo $optionsString; }
function getLanguageSelect( $name, $languageIdsToExclude = array() ) { global $wgLang ; $userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ; return getSelect( $name, getLanguageOptions( $languageIdsToExclude ), $userLanguageId ); }