26 use Wikimedia\Timestamp\ConvertibleTimestamp;
44 private const MAX_EXECUTE_SECONDS = 2;
47 private $languageFactory;
50 private $languageNameUtils;
53 private $languageFallback;
56 private $languageConverterFactory;
74 parent::__construct( $queryModule, $moduleName,
'li' );
75 $this->languageFactory = $languageFactory;
76 $this->languageNameUtils = $languageNameUtils;
77 $this->languageFallback = $languageFallback;
78 $this->languageConverterFactory = $languageConverterFactory;
83 $endTime = ConvertibleTimestamp::time() + self::MAX_EXECUTE_SECONDS;
85 $props = array_fill_keys( $this->
getParameter(
'prop' ),
true );
86 $includeCode = isset( $props[
'code'] );
87 $includeBcp47 = isset( $props[
'bcp47'] );
88 $includeDir = isset( $props[
'dir'] );
89 $includeAutonym = isset( $props[
'autonym'] );
90 $includeName = isset( $props[
'name'] );
91 $includeFallbacks = isset( $props[
'fallbacks'] );
92 $includeVariants = isset( $props[
'variants'] );
94 $targetLanguageCode = $this->
getLanguage()->getCode();
97 $availableLanguageCodes = array_keys( $this->languageNameUtils->getLanguageNames(
106 if ( $selectedLanguageCodes === [
'*' ] ) {
107 $languageCodes = $availableLanguageCodes;
109 $languageCodes = array_values( array_intersect(
110 $availableLanguageCodes,
111 $selectedLanguageCodes
113 $unrecognizedCodes = array_values( array_diff(
114 $selectedLanguageCodes,
115 $availableLanguageCodes
117 if ( $unrecognizedCodes !== [] ) {
119 'apiwarn-unrecognizedvalues',
122 count( $unrecognizedCodes ),
130 if ( $continue ===
null ) {
131 $continue = reset( $languageCodes );
139 $result->addArrayType( $rootPath,
'assoc' );
141 foreach ( $languageCodes as $languageCode ) {
142 if ( $languageCode < $continue ) {
146 $now = ConvertibleTimestamp::time();
147 if ( $now >= $endTime ) {
155 if ( $includeCode ) {
156 $info[
'code'] = $languageCode;
159 if ( $includeBcp47 ) {
161 $info[
'bcp47'] = $bcp47;
165 $dir = $this->languageFactory->getLanguage( $languageCode )->getDir();
169 if ( $includeAutonym ) {
170 $autonym = $this->languageNameUtils->getLanguageName(
172 LanguageNameUtils::AUTONYMS,
175 $info[
'autonym'] = $autonym;
178 if ( $includeName ) {
179 $name = $this->languageNameUtils->getLanguageName(
184 $info[
'name'] = $name;
187 if ( $includeFallbacks ) {
188 $fallbacks = $this->languageFallback->getAll(
191 LanguageFallback::STRICT
194 $info[
'fallbacks'] = $fallbacks;
197 if ( $includeVariants ) {
198 $language = $this->languageFactory->getLanguage( $languageCode );
199 $converter = $this->languageConverterFactory->getLanguageConverter( $language );
200 $variants = $converter->getVariants();
202 $info[
'variants'] = $variants;
205 $fit = $result->addValue( $rootPath, $languageCode, $info );
220 ParamValidator::PARAM_DEFAULT =>
'code',
221 ParamValidator::PARAM_ISMULTI =>
true,
222 ParamValidator::PARAM_TYPE => [
231 self::PARAM_HELP_MSG_PER_VALUE => [],
234 ParamValidator::PARAM_DEFAULT =>
'*',
235 ParamValidator::PARAM_ISMULTI =>
true,
238 self::PARAM_HELP_MSG =>
'api-help-param-continue',
244 $pathUrl =
'action=' . $this->
getQuery()->getModuleName() .
251 =>
"apihelp-$pathMsg-example-simple",
252 "$pathUrl&{$prefix}prop=autonym|name&uselang=de"
253 =>
"apihelp-$pathMsg-example-autonym-name-de",
254 "$pathUrl&{$prefix}prop=fallbacks|variants&{$prefix}code=oc"
255 =>
"apihelp-$pathMsg-example-fallbacks-variants-oc",
256 "$pathUrl&{$prefix}prop=bcp47|dir"
257 =>
"apihelp-$pathMsg-example-bcp47-dir",
getModulePrefix()
Get parameter prefix (usually two letters or an empty string).
getParameter( $paramName, $parseLimit=true)
Get a value for the given parameter.
encodeParamName( $paramName)
This method mangles parameter name based on the prefix supplied to the constructor.
getResult()
Get the result object.
getModulePath()
Get the path to this module.
addWarning( $msg, $code=null, $data=null)
Add a warning for this module.
getModuleName()
Get the name of the module being executed by this instance.
This is a base class for all Query modules.
setContinueEnumParameter( $paramName, $paramValue)
Set a query-continue value.
getQuery()
Get the main Query module.
API module to enumerate language information.
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
getExamplesMessages()
Returns usage examples for this module.
__construct(ApiQuery $queryModule, $moduleName, LanguageFactory $languageFactory, LanguageNameUtils $languageNameUtils, LanguageFallback $languageFallback, LanguageConverterFactory $languageConverterFactory)
getCacheMode( $params)
Get the cache mode for the data generated by this module.
getAllowedParams()
Returns an array of allowed parameters (parameter name) => (default value) or (parameter name) => (ar...
This is the main query class.
static setArrayType(array &$arr, $type, $kvpKeyName=null)
Set the array data type.
static setIndexedTagName(array &$arr, $tag)
Set the tag name for numeric-keyed values in XML format.
static bcp47( $code)
Get the normalised IETF language tag See unit test for examples.
static listParam(array $list, $type='text')