![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/CoreBundle/Command/ |
<?php declare(strict_types=1); namespace Mautic\CoreBundle\Command; use Mautic\CoreBundle\Factory\TransifexFactory; use Mautic\CoreBundle\Helper\LanguageHelper; use Mautic\CoreBundle\Helper\UrlHelper; use Mautic\Transifex\Connector\Resources; use Mautic\Transifex\Exception\InvalidConfigurationException; use Mautic\Transifex\Exception\ResponseException; use Mautic\Transifex\Exception\TransifexException; use Mautic\Transifex\Promise; use Psr\Http\Message\ResponseInterface; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Contracts\Translation\TranslatorInterface; /** * CLI Command to push language resources to Transifex. */ class PushTransifexCommand extends Command { public const NAME = 'mautic:transifex:push'; public function __construct( private TransifexFactory $transifexFactory, private TranslatorInterface $translator, private LanguageHelper $languageHelper ) { parent::__construct(); } protected function configure(): void { $this->setName(self::NAME) ->addOption('bundle', null, InputOption::VALUE_OPTIONAL, 'Optional bundle to pull. Example value: WebhookBundle', null) ->setHelp(<<<'EOT' The <info>%command.name%</info> command is used to push translation resources to Transifex <info>php %command.full_name%</info> You can optionally choose to update resources for one bundle only with the --bundle option: <info>php %command.full_name% --bundle AssetBundle</info> EOT ); } protected function execute(InputInterface $input, OutputInterface $output): int { $bundleFilter = $input->getOption('bundle'); $files = $this->languageHelper->getLanguageFiles($bundleFilter ? [$bundleFilter] : []); try { $transifex = $this->transifexFactory->getTransifex(); } catch (InvalidConfigurationException) { $output->writeln($this->translator->trans( 'mautic.core.command.transifex_no_credentials') ); return Command::FAILURE; } $resources = $transifex->getConnector(Resources::class); \assert($resources instanceof Resources); $existingResources = json_decode((string) $resources->getAll()->getBody(), true); $promises = new \SplQueue(); foreach ($files as $bundle => $stringFiles) { foreach ($stringFiles as $file) { $name = $bundle.' '.str_replace('.ini', '', basename($file)); $alias = UrlHelper::stringURLUnicodeSlug($name); $content = file_get_contents($file); $output->writeln( $this->translator->trans( 'mautic.core.command.transifex_processing_resource', ['%resource%' => $name] ) ); try { if (false === $content) { throw new \RuntimeException('Unable to read file '.$file); } if (!$resources->resourceExists($existingResources['data'], $alias)) { $resources->create($name, $alias, 'INI'); $output->writeln( $this->translator->trans('mautic.core.command.transifex_resource_created') ); } $promise = $transifex->getApiConnector()->createPromise( $resources->uploadContent($alias, $content, true) ); $promise->setFilePath($file); $promises->enqueue($promise); } catch (TransifexException $exception) { $output->writeln( $this->translator->trans( 'mautic.core.command.transifex_error_pushing_data', ['%message%' => $exception->getMessage()] ) ); } } } $transifex->getApiConnector()->fulfillPromises( $promises, function (ResponseInterface $response, Promise $promise) use ($output): void { $output->writeln( $this->translator->trans( 'mautic.core.command.transifex_resource_updated', ['%file%' => $promise->getFilePath()] ) ); }, function (ResponseException $exception, Promise $promise) use ($output): void { $output->writeln($promise->getFilePath()); $output->writeln($exception->getMessage()); } ); return Command::SUCCESS; } protected static $defaultDescription = 'Pushes Mautic translation resources to Transifex'; }