private function updateLanguageTranslationToken(LanguageTranslationToken $languageTranslationToken)
 {
     $id = $languageTranslationToken->getId();
     $translation = $languageTranslationToken->getTranslation();
     $languageTranslationToken->setTranslation($translation . $id);
     $languageTranslationToken->setNew(false);
     self::$em->persist($languageTranslationToken);
     self::$em->flush();
     return $languageTranslationToken;
 }
 /**
  * @return array
  */
 public function getConfig()
 {
     return array('entity' => LanguageTranslationToken::clazz(), 'hydration' => array('groups' => array('main-form' => function (LanguageTranslationToken $ltt) {
         return array('id' => $ltt->getId(), 'translation' => $ltt->getTranslation(), 'languageName' => $ltt->getLanguage()->getName(), 'bundleName' => $ltt->getTranslationToken()->getBundleName(), 'tokenName' => $ltt->getTranslationToken()->getTokenName());
     }), 'profiles' => array('main-form')), 'map_data_on_update' => function (array $params, LanguageTranslationToken $entity, DataMapperInterface $defaultMapper, ContainerInterface $container) {
         $defaultMapper->mapData($params, $entity);
         $key = 'modera_backend_translations_tool';
         /* @var \Doctrine\Common\Cache\Cache $cache */
         $cache = $container->get($key . '.cache');
         $data = array('isCompileNeeded' => true);
         if ($string = $cache->fetch($key)) {
             $data = array_merge(unserialize($string), $data);
         }
         $cache->save($key, serialize($data));
     });
 }
 public static function dropDatabase()
 {
     self::$st->dropSchema([self::$em->getClassMetadata(Language::clazz())]);
     self::$st->dropSchema([self::$em->getClassMetadata(TranslationToken::clazz())]);
     self::$st->dropSchema([self::$em->getClassMetadata(LanguageTranslationToken::clazz())]);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     /* @var EntityManager $em */
     $em = $this->getContainer()->get('doctrine.orm.entity_manager');
     /* @var TranslationHandlersChain $thc */
     $thc = $this->getContainer()->get('modera_translations.service.translation_handlers_chain');
     $languages = $em->getRepository(Language::clazz())->findBy(array('isEnabled' => true));
     if (!count($languages)) {
         $defaultLocale = $this->getContainer()->getParameter('locale');
         $language = new Language();
         $language->setLocale($defaultLocale);
         $language->setEnabled(true);
         $em->persist($language);
         $em->flush();
         $languages = array($language);
     }
     $handlers = $thc->getHandlers();
     if (count($handlers) > 0) {
         $imported = false;
         /* @var TranslationHandlerInterface $handler */
         foreach ($handlers as $handler) {
             $bundleName = $handler->getBundleName();
             foreach ($handler->getSources() as $source) {
                 $tokens = $em->getRepository(TranslationToken::clazz())->findBy(array('source' => $source, 'bundleName' => $bundleName));
                 /* @var Language $language */
                 foreach ($languages as $language) {
                     $locale = $language->getLocale();
                     $extractedCatalogue = $handler->extract($source, $locale);
                     if (null === $extractedCatalogue) {
                         continue;
                     }
                     $currentCatalogue = new MessageCatalogue($locale);
                     /* @var TranslationToken $token */
                     foreach ($tokens as $token) {
                         if ($token->isObsolete()) {
                             continue;
                         }
                         /* @var LanguageTranslationToken $ltt */
                         foreach ($token->getLanguageTranslationTokens() as $ltt) {
                             $lang = $ltt->getLanguage();
                             if ($lang && $lang->getLocale() == $locale) {
                                 $currentCatalogue->set($token->getTokenName(), $ltt->getTranslation(), $token->getDomain());
                                 break;
                             }
                         }
                     }
                     // process catalogues
                     $operation = new DiffOperation($currentCatalogue, $extractedCatalogue);
                     foreach ($operation->getDomains() as $domain) {
                         $newMessages = $operation->getNewMessages($domain);
                         $obsoleteMessages = $operation->getObsoleteMessages($domain);
                         if (count($newMessages) || count($obsoleteMessages)) {
                             $imported = true;
                             $output->writeln('>>> ' . $bundleName . ' : ' . $source . ' : ' . $locale . ' : ' . $domain);
                         }
                         if (count($newMessages)) {
                             $output->writeln(sprintf('    <fg=green>New messages: %s</>', count($newMessages)));
                             foreach ($newMessages as $tokenName => $translation) {
                                 $token = $this->findOrCreateTranslationToken($source, $bundleName, $domain, $tokenName);
                                 $token->setObsolete(false);
                                 $ltt = $em->getRepository(LanguageTranslationToken::clazz())->findOneBy(array('language' => $language, 'translationToken' => $token, 'translation' => $translation));
                                 if (!$ltt) {
                                     $ltt = new LanguageTranslationToken();
                                     $ltt->setLanguage($language);
                                     $token->addLanguageTranslationToken($ltt);
                                 }
                                 if ($ltt->isNew()) {
                                     $ltt->setTranslation($translation);
                                 }
                                 $em->persist($token);
                             }
                             $em->flush();
                         }
                         if (count($obsoleteMessages)) {
                             $output->writeln(sprintf('    <fg=red>Obsolete messages: %s</>', count($obsoleteMessages)));
                             foreach ($obsoleteMessages as $tokenName => $translation) {
                                 $token = $this->findOrCreateTranslationToken($source, $bundleName, $domain, $tokenName);
                                 $token->setObsolete(true);
                                 $em->persist($token);
                             }
                             $em->flush();
                         }
                     }
                 }
             }
         }
     }
     if ($imported) {
         $output->writeln('>>> Translations have been successfully imported');
     } else {
         $output->writeln('>>> Nothing to import');
     }
 }