summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'MLEB/Translate/api/ApiQueryMessageCollection.php')
-rw-r--r--MLEB/Translate/api/ApiQueryMessageCollection.php65
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 ] );
}
}