diff options
Diffstat (limited to 'MLEB/Translate/api/ApiQueryMessageCollection.php')
-rw-r--r-- | MLEB/Translate/api/ApiQueryMessageCollection.php | 65 |
1 files changed, 36 insertions, 29 deletions
diff --git a/MLEB/Translate/api/ApiQueryMessageCollection.php b/MLEB/Translate/api/ApiQueryMessageCollection.php index 85b4a498..62b109f5 100644 --- a/MLEB/Translate/api/ApiQueryMessageCollection.php +++ b/MLEB/Translate/api/ApiQueryMessageCollection.php @@ -7,19 +7,24 @@ * @license GPL-2.0-or-later */ +use MediaWiki\Extension\Translate\Utilities\ConfigHelper; + /** * Api module for querying MessageCollection. * * @ingroup API TranslateAPI */ class ApiQueryMessageCollection extends ApiQueryGeneratorBase { - - /** - * @param ApiQuery $query - * @param string $moduleName - */ - public function __construct( $query, $moduleName ) { + /** @var ConfigHelper */ + private $configHelper; + + public function __construct( + ApiQuery $query, + string $moduleName, + ConfigHelper $configHelper + ) { parent::__construct( $query, $moduleName, 'mc' ); + $this->configHelper = $configHelper; } public function execute() { @@ -34,15 +39,13 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase { $this->run( $resultPageSet ); } - private function validateLanguageCode( $code ) { - if ( !Language::isValidBuiltInCode( $code ) ) { - $this->dieWithError( [ 'apierror-translate-invalidlanguage' ] ); + private function validateLanguageCode( string $code ): void { + if ( !TranslateUtils::isSupportedLanguageCode( $code ) ) { + $this->dieWithError( [ 'apierror-translate-invalidlanguage', $code ] ); } } private function run( ApiPageSet $resultPageSet = null ) { - global $wgTranslateBlacklist; - $params = $this->extractRequestParams(); $group = MessageGroups::getGroup( $params['group'] ); @@ -52,29 +55,33 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase { $languageCode = $params[ 'language' ]; $this->validateLanguageCode( $languageCode ); + + // Even though translation to source language maybe disabled, we still want to + // fetch the message collections for the source language. if ( $group->getSourceLanguage() === $languageCode ) { $name = Language::fetchLanguageName( $languageCode, $this->getLanguage()->getCode() ); $this->addWarning( [ 'apiwarn-translate-language-disabled-source', wfEscapeWikiText( $name ) ] ); - } - $languages = $group->getTranslatableLanguages(); - if ( $languages !== null ) { - if ( !isset( $languages[ $languageCode ] ) ) { - $name = Language::fetchLanguageName( $languageCode, $this->getLanguage()->getCode() ); - $this->dieWithError( [ 'apierror-translate-language-disabled', $name ] ); - } } else { - $checks = [ - $group->getId(), - strtok( $group->getId(), '-' ), - '*' - ]; - - foreach ( $checks as $check ) { - if ( isset( $wgTranslateBlacklist[ $check ][ $languageCode ] ) ) { - $name = Language::fetchLanguageName( $languageCode, $this->getLanguage()->getCode() ); - $reason = $wgTranslateBlacklist[ $check ][ $languageCode ]; - $this->dieWithError( [ 'apierror-translate-language-disabled-reason', $name, $reason ] ); + $languages = $group->getTranslatableLanguages(); + if ( $languages === null ) { + $checks = [ + $group->getId(), + strtok( $group->getId(), '-' ), + '*' + ]; + + $disabledLanguages = $this->configHelper->getDisabledTargetLanguages(); + foreach ( $checks as $check ) { + if ( isset( $disabledLanguages[ $check ][ $languageCode ] ) ) { + $name = Language::fetchLanguageName( $languageCode, $this->getLanguage()->getCode() ); + $reason = $disabledLanguages[ $check ][ $languageCode ]; + $this->dieWithError( [ 'apierror-translate-language-disabled-reason', $name, $reason ] ); + } } + } elseif ( !isset( $languages[ $languageCode ] ) ) { + // Not a translatable language + $name = Language::fetchLanguageName( $languageCode, $this->getLanguage()->getCode() ); + $this->dieWithError( [ 'apierror-translate-language-disabled', $name ] ); } } |