PHP Classes

File: Command/TranslationsUploadYmlCommand.php

Recommend this page to a friend!
  Classes of Joseluis Laso   Tradukoj.com Translations API Bundle   Command/TranslationsUploadYmlCommand.php   Download  
File: Command/TranslationsUploadYmlCommand.php
Role: Class source
Content type: text/plain
Description: Class source
Class: Tradukoj.com Translations API Bundle
Get remote translations for Symfony projects
Author: By
Last change:
Date: 9 years ago
Size: 5,438 bytes
 

Contents

Class file image Download
<?php

namespace JLaso\TranslationsApiBundle\Command;

use
Doctrine\ORM\EntityManager;
use
JLaso\TranslationsApiBundle\Entity\Repository\TranslationRepository;
use
JLaso\TranslationsApiBundle\Entity\Translation;
use
JLaso\TranslationsApiBundle\Service\ClientApiService;
use
JLaso\TranslationsApiBundle\Service\ClientSocketService;
use
JLaso\TranslationsApiBundle\Tools\ArrayTools;
use
Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use
Symfony\Component\Console\Helper\DialogHelper;
use
Symfony\Component\Console\Input\InputArgument;
use
Symfony\Component\Console\Input\InputDefinition;
use
Symfony\Component\Console\Input\InputInterface;
use
Symfony\Component\Console\Input\InputOption;
use
Symfony\Component\Console\Output\OutputInterface;
use
Symfony\Component\Finder\Finder;
use
Symfony\Component\Finder\SplFileInfo;
use
Symfony\Component\HttpKernel\Bundle\BundleInterface;
use
Symfony\Component\Translation\MessageCatalogueInterface;
use
Symfony\Component\HttpKernel\Kernel;
use
Symfony\Bundle\FrameworkBundle\Translation\Translator;
use
Symfony\Component\Yaml\Yaml;


/**
 * Sync translations files - translations server.
 *
 * @author Joseluis Laso <jlaso@joseluislaso.es>
 */
class TranslationsUploadYmlCommand extends TranslationsBaseCommand
{
   
/** @var InputInterface */
   
private $input;
   
/** @var OutputInterface */
   
private $output;
   
/** @var EntityManager */
   
private $em;
   
/** @var ClientSocketService */
   
private $clientApiService;
   
/** @var TranslationRepository */
   
private $translationsRepository;

    private
$rootDir;

    const
THROWS_EXCEPTION = true;

   
/**
     * {@inheritdoc}
     */
   
protected function configure()
    {
       
$this->setName('jlaso:translations:upload-yml');
       
$this->setDescription('Sync all translations from translations server.');
       
$this->addOption('port', null, InputArgument::OPTIONAL, 'port');
       
$this->addOption('address', null, InputArgument::OPTIONAL, 'address');
       
//$this->addOption('bundle', null, InputArgument::OPTIONAL, 'bundle');
       
$this->addOption('yml', null, InputOption::VALUE_REQUIRED, 'yml file to upload', null);
    }

    protected function
init($server = null, $port = null)
    {
       
/** @var EntityManager */
       
$this->em = $this->getContainer()->get('doctrine.orm.default_entity_manager');
       
/** @var ClientSocketService $clientApiService */
       
$clientApiService = $this->getContainer()->get('jlaso_translations.client.socket');
       
$this->clientApiService = $clientApiService;
       
$this->translationsRepository = $this->em->getRepository('TranslationsApiBundle:Translation');
       
$this->clientApiService->init($server, $port);
       
$this->rootDir = $this->getContainer()->get('kernel')->getRootDir();
    }

   
/**
     * {@inheritdoc}
     */
   
protected function execute(InputInterface $input, OutputInterface $output)
    {
       
$this->input = $input;
       
$this->output = $output;

       
$yml = $this->input->getOption('yml');
        if(!
$yml){
            die(
'yml to upload is mandatory');
        }

       
$this->init($input->getOption('address'), $input->getOption('port'));

       
$config = $this->getContainer()->getParameter('translations_api');
       
$managedLocales = $config['managed_locales'];

       
$this->output->writeln(PHP_EOL . '<info>*** Uploading yml file ***</info>');

       
$parts = explode('/', $yml);
       
$lastPart = $parts[count($parts)-1];
       
preg_match("/^(?<catalog>[^\.]*?)\.(?<locale>[^\.]*?)\.yml$/i", $lastPart, $match);
       
$locale = isset($match['locale']) ? $match['locale'] : 'en';
       
$catalog = isset($match['catalog']) ? $match['catalog'] : 'messages';
       
preg_match("/(?<bundle>\w*?Bundle)\//i", $yml, $match);
       
//$bundle = $input->getOption('bundle');
       
$bundle = (isset($match['bundle']) ? $match['bundle'] : '');
       
//var_dump($match, $locale, $catalog, $bundle); die;
       
if(!$bundle){
            die(
'Incorrect file, it must be in a Bundle folder to deduce its name and the filename');
        }

       
$messages = $this->getYamlAsArray($yml);
       
//print_r($localKeys); die;

        //$bundles = $this->clientApiService->getBundleIndex();
        //var_dump($bundles); die;

        // data para enviar al servidor
       
$data = array();
       
$date = date('c');

       
$this->output->writeln(PHP_EOL . sprintf('<info>Processing catalog %s ...</info>', $catalog));

       
$fileName = preg_replace("/.*\/?src\//", "", $yml);

        foreach(
$messages as $key => $message){

           
$data[$key][$locale] = array(
               
'message' => $message,
               
'updatedAt' => $date,
               
'fileName' => $fileName,
               
'bundle' => $bundle,
            );

        }

       
//print_r($data); die;
       
$this->output->writeln('uploadKeys("' . $catalog . '", $data)');

       
$result = $this->clientApiService->uploadKeys($catalog, $data);

       
$this->output->writeln('');
    }

    protected function
center($text, $width = 120)
    {
       
$len = strlen($text);
        if(
$len<$width){
           
$w = (intval($width - $len)/2);
           
$left = str_repeat('·', $w);
           
$right = str_repeat('·', $width - $len - $w);
            return
$left . $text . $right;
        }else{
            return
$text;
        }
    }

}