Ejemplo n.º 1
0
/**
 * 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;
}
Ejemplo n.º 3
0
/**
 * 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 ' ;

}
Ejemplo n.º 4
0
	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;
	}
Ejemplo n.º 5
0
function getLanguageSelect( $name, $languageIdsToExclude = array() ) {
	global $wgLang ;
	$userLanguageId = getLanguageIdForCode( $wgLang->getCode() ) ;

	return getSelect( $name, getLanguageOptions( $languageIdsToExclude ), $userLanguageId );
}