X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fapi%2FApiQuerySiteinfo.php;h=2e9e69c9a5968176b6c81e0b9d70c72241f0449e;hp=a8c037ec6a862fc3ca6ffdd845c928423e2502fb;hb=b9b1e863d9eddf15fd8c7f7b7f61ecb781bb6823;hpb=1e584948edcd21fc6d28da86d876650dd472743e diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php index a8c037ec6a..2e9e69c9a5 100644 --- a/includes/api/ApiQuerySiteinfo.php +++ b/includes/api/ApiQuerySiteinfo.php @@ -88,6 +88,9 @@ class ApiQuerySiteinfo extends ApiQueryBase { case 'languages': $fit = $this->appendLanguages( $p ); break; + case 'languagevariants': + $fit = $this->appendLanguageVariants( $p ); + break; case 'skins': $fit = $this->appendSkins( $p ); break; @@ -280,6 +283,8 @@ class ApiQuerySiteinfo extends ApiQueryBase { $data['interwikimagic'] = (bool)$config->get( 'InterwikiMagic' ); $data['magiclinks'] = $config->get( 'EnableMagicLinks' ); + $data['categorycollation'] = $config->get( 'CategoryCollation' ); + Hooks::run( 'APIQuerySiteInfoGeneralInfo', [ $this, &$data ] ); return $this->getResult()->addValue( 'query', $property, $data ); @@ -713,6 +718,49 @@ class ApiQuerySiteinfo extends ApiQueryBase { return $this->getResult()->addValue( 'query', $property, $data ); } + // Export information about which page languages will trigger + // language conversion. (T153341) + public function appendLanguageVariants( $property ) { + $langNames = LanguageConverter::$languagesWithVariants; + if ( $this->getConfig()->get( 'DisableLangConversion' ) ) { + // Ensure result is empty if language conversion is disabled. + $langNames = []; + } + sort( $langNames ); + + $data = []; + foreach ( $langNames as $langCode ) { + $lang = Language::factory( $langCode ); + if ( $lang->getConverter() instanceof FakeConverter ) { + // Only languages which do not return instances of + // FakeConverter implement language conversion. + continue; + } + $data[$langCode] = []; + ApiResult::setIndexedTagName( $data[$langCode], 'variant' ); + ApiResult::setArrayType( $data[$langCode], 'kvp', 'code' ); + + $variants = $lang->getVariants(); + sort( $variants ); + foreach ( $variants as $v ) { + $fallbacks = $lang->getConverter()->getVariantFallbacks( $v ); + if ( !is_array( $fallbacks ) ) { + $fallbacks = [ $fallbacks ]; + } + $data[$langCode][$v] = [ + 'fallbacks' => $fallbacks, + ]; + ApiResult::setIndexedTagName( + $data[$langCode][$v]['fallbacks'], 'variant' + ); + } + } + ApiResult::setIndexedTagName( $data, 'lang' ); + ApiResult::setArrayType( $data, 'kvp', 'code' ); + + return $this->getResult()->addValue( 'query', $property, $data ); + } + public function appendSkins( $property ) { $data = []; $allowed = Skin::getAllowedSkins(); @@ -851,6 +899,7 @@ class ApiQuerySiteinfo extends ApiQueryBase { 'rightsinfo', 'restrictions', 'languages', + 'languagevariants', 'skins', 'extensiontags', 'functionhooks', @@ -886,6 +935,6 @@ class ApiQuerySiteinfo extends ApiQueryBase { } public function getHelpUrls() { - return 'https://www.mediawiki.org/wiki/API:Siteinfo'; + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Siteinfo'; } }