X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=vendor%2Fdrupal%2Fconsole%2Fsrc%2FCommand%2FLocale%2FLanguageAddCommand.php;fp=vendor%2Fdrupal%2Fconsole%2Fsrc%2FCommand%2FLocale%2FLanguageAddCommand.php;h=2db2a1936ad174512bec37f546a304605bf146f5;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hp=4baf8ef9e418cec538d10f1b8337401e4b26c1cd;hpb=aea91e65e895364e460983b890e295aa5d5540a5;p=yaffs-website diff --git a/vendor/drupal/console/src/Command/Locale/LanguageAddCommand.php b/vendor/drupal/console/src/Command/Locale/LanguageAddCommand.php index 4baf8ef9e..2db2a1936 100644 --- a/vendor/drupal/console/src/Command/Locale/LanguageAddCommand.php +++ b/vendor/drupal/console/src/Command/Locale/LanguageAddCommand.php @@ -11,10 +11,7 @@ use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Drupal\language\Entity\ConfigurableLanguage; -use Symfony\Component\Console\Command\Command; -use Drupal\Console\Core\Style\DrupalStyle; -use Drupal\Console\Command\Shared\LocaleTrait; -use Drupal\Console\Core\Command\Shared\CommandTrait; +use Drupal\Console\Core\Command\Command; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Console\Utils\Site; use Drupal\Console\Annotations\DrupalCommand; @@ -27,8 +24,6 @@ use Drupal\Console\Annotations\DrupalCommand; */ class LanguageAddCommand extends Command { - use CommandTrait; - use LocaleTrait; /** * @var Site @@ -40,15 +35,20 @@ class LanguageAddCommand extends Command */ protected $moduleHandler; + /** + * @var array + */ + protected $missingLangues = []; + /** * LanguageAddCommand constructor. * - * @param Site $site + * @param Site $site * @param ModuleHandlerInterface $moduleHandler */ public function __construct( - Site $site, - ModuleHandlerInterface $moduleHandler + Site $site, + ModuleHandlerInterface $moduleHandler ) { $this->site = $site; $this->moduleHandler = $moduleHandler; @@ -58,52 +58,115 @@ class LanguageAddCommand extends Command protected function configure() { $this - ->setName('locale:language:add') - ->setDescription($this->trans('commands.locale.language.add.description')) - ->addArgument( - 'language', - InputArgument::REQUIRED, - $this->trans('commands.locale.translation.status.arguments.language') - ); + ->setName('locale:language:add') + ->setDescription($this->trans('commands.locale.language.add.description')) + ->addArgument( + 'language', + InputArgument::REQUIRED | InputArgument::IS_ARRAY, + $this->trans('commands.locale.translation.status.arguments.language') + ); } protected function execute(InputInterface $input, OutputInterface $output) { - $io = new DrupalStyle($input, $output); $moduleHandler = $this->moduleHandler; $moduleHandler->loadInclude('locale', 'inc', 'locale.translation'); $moduleHandler->loadInclude('locale', 'module'); - $language = $input->getArgument('language'); - $languages = $this->site->getStandardLanguages(); - - if (isset($languages[$language])) { - $langcode = $language; - } elseif (array_search($language, $languages)) { - $langcode = array_search($language, $languages); - } else { - $io->error( - sprintf( - $this->trans('commands.locale.language.add.messages.invalid-language'), - $language - ) - ); + $languageArguments = $this->checkLanguages($input->getArgument('language')); + $missingLanguages = $this->getMissingLangugaes(); + if (!empty($missingLanguages)) { + $translatableString = count($missingLanguages) == 1 ? 'commands.locale.language.add.messages.invalid-language' : 'commands.locale.language.add.messages.invalid-languages'; + $this->getIo()->error(sprintf( + $this->trans($translatableString), + implode(', ', $missingLanguages) + )); return 1; } try { - $language = ConfigurableLanguage::createFromLangcode($langcode); - $language->type = LOCALE_TRANSLATION_REMOTE; - $language->save(); - - $io->info(sprintf($this->trans('commands.locale.language.add.messages.language-add-successfully'), $language->getName())); + $installedLanguages = []; + foreach (array_keys($languageArguments) as $langcode) { + if (!($language = ConfigurableLanguage::load($langcode))) { + $language = ConfigurableLanguage::createFromLangcode($langcode); + $language->type = LOCALE_TRANSLATION_REMOTE; + $language->save(); + } else { + $installedLanguages[] = $languageArguments[$langcode]; + unset($languageArguments[$langcode]); + } + } + + if (!empty($languageArguments)) { + $translatableString = count($languageArguments) == 1 ? 'commands.locale.language.add.messages.language-add-successfully' : 'commands.locale.language.add.messages.languages-add-successfully'; + $this->getIo()->info(sprintf( + $this->trans($translatableString), + implode(', ', $languageArguments) + )); + } + + if (!empty($installedLanguages)) { + $translatableString = count($installedLanguages) == 1 ? 'commands.locale.language.add.messages.language-installed' : 'commands.locale.language.add.messages.languages-installed'; + $this->getIo()->note(sprintf( + $this->trans($translatableString), + implode(', ', $installedLanguages) + )); + } } catch (\Exception $e) { - $io->error($e->getMessage()); + $this->getIo()->error($e->getMessage()); return 1; } return 0; } + + /** + * Checks the existance of the languages in the system. + * + * @param array $languageArguments + * List of language arguments. + * + * @return array + * List of available languages. + */ + protected function checkLanguages($languageArguments) + { + $languages = $this->site->getStandardLanguages(); + $language_codes = array_keys($languages); + $buildLanguages = []; + foreach ($languageArguments as $language) { + if (array_search($language, $language_codes)) { + $buildLanguages[$language] = $languages[$language]; + } elseif ($language_code = array_search($language, $languages)) { + $buildLanguages[$language_code] = $language; + } else { + $this->addMissingLanguage($language); + } + } + return $buildLanguages; + } + + /** + * Add missing language. + * + * @param string $language + * Language code or name. + */ + private function addMissingLanguage($language) + { + $this->missingLangues[] = $language; + } + + /** + * Get list of missing languages. + * + * @return array + * Missing languges. + */ + private function getMissingLangugaes() + { + return $this->missingLangues; + } }