src/Service/CustomTranslation/EventListener/SetCustomTranslationListener.php line 95

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\CustomTranslation\EventListener;
  3. use Exception;
  4. use Harmonizely\Repository\Company\Contract\IOrganizationRepository;
  5. use Harmonizely\Repository\Company\Contract\IUserRepository;
  6. use Harmonizely\Service\CustomTranslation\Contract\IGetCustomTranslationCatalogService;
  7. use Harmonizely\Service\CustomTranslation\Event\SetCustomTranslationEvent;
  8. use Psr\Log\LoggerInterface;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\Translation\MessageCatalogue;
  12. use Symfony\Contracts\Translation\TranslatorInterface;
  13. class SetCustomTranslationListener implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var TranslatorInterface
  17.      */
  18.     private TranslatorInterface $translator;
  19.     /**
  20.      * @var IGetCustomTranslationCatalogService
  21.      */
  22.     private IGetCustomTranslationCatalogService $getCustomTranslationCatalogService;
  23.     /**
  24.      * @var array
  25.      */
  26.     private array $messageCatalogueList = [];
  27.     /**
  28.      * @var IUserRepository
  29.      */
  30.     private IUserRepository $userRepository;
  31.     /**
  32.      * @var IOrganizationRepository
  33.      */
  34.     private IOrganizationRepository $organizationRepository;
  35.     /**
  36.      * @var LoggerInterface
  37.      */
  38.     private LoggerInterface $logger;
  39.     /**
  40.      * @var RequestStack
  41.      */
  42.     private RequestStack $requestStack;
  43.     /**
  44.      * @param TranslatorInterface $translator
  45.      * @param IGetCustomTranslationCatalogService $getCustomTranslationCatalogService
  46.      * @param IUserRepository $userRepository
  47.      * @param IOrganizationRepository $organizationRepository
  48.      * @param LoggerInterface $logger
  49.      * @param RequestStack $requestStack
  50.      */
  51.     public function __construct(
  52.         TranslatorInterface $translator,
  53.         IGetCustomTranslationCatalogService $getCustomTranslationCatalogService,
  54.         IUserRepository $userRepository,
  55.         IOrganizationRepository $organizationRepository,
  56.         LoggerInterface $logger,
  57.         RequestStack $requestStack
  58.     )
  59.     {
  60.         $this->translator $translator;
  61.         $this->getCustomTranslationCatalogService $getCustomTranslationCatalogService;
  62.         $this->userRepository $userRepository;
  63.         $this->organizationRepository $organizationRepository;
  64.         $this->logger $logger;
  65.         $this->requestStack $requestStack;
  66.     }
  67.     /**
  68.      * @return array
  69.      */
  70.     public static function getSubscribedEvents(): array
  71.     {
  72.         return [
  73.             SetCustomTranslationEvent::NAME => 'onSetCustomTranslation',
  74.         ];
  75.     }
  76.     /**
  77.      * @param SetCustomTranslationEvent $event
  78.      * @throws Exception
  79.      */
  80.     public function onSetCustomTranslation(SetCustomTranslationEvent $event): void
  81.     {
  82.         $customTranslationCatalog $this->getCustomTranslationCatalogService->perform(
  83.             $event->getUserId(),
  84.             $event->getOrganizationId()
  85.         );
  86.         if ($event->getUserId()) {
  87.             $user $this->userRepository->find($event->getUserId());
  88.             $accountLocale $user->getLocale();
  89.         } elseif ($event->getOrganizationId()) {
  90.             $organization $this->organizationRepository->find($event->getOrganizationId());
  91.             $accountLocale $organization->getLocale();
  92.         } else {
  93.             $accountLocale $this->translator->getLocale();
  94.         }
  95.         if ($accountLocale === 'auto') {
  96.             $accountLocale 'en';
  97.         }
  98.         /** @var MessageCatalogue $catalogue */
  99.         $catalogue $this->translator->getCatalogue();
  100.         $autoCatalogue $this->translator->getCatalogue($accountLocale);
  101.         $domains $catalogue->getDomains();
  102.         $this->setDefaultCatalog($catalogue$this->translator->getLocale());
  103.         $this->setDefaultCatalog($autoCatalogue$accountLocale);
  104.         foreach ($customTranslationCatalog->getEntries() as $entry) {
  105.             foreach ($domains as $domain) {
  106.                 $catalogue->set($entry->getMsgId(), $entry->getMsgStr(), $domain);
  107.                 $autoCatalogue->set($entry->getMsgId(), $entry->getMsgStr(), $domain);
  108.             }
  109.         }
  110.         if (!$this->requestStack->getCurrentRequest()) {
  111.             $this->logger->critical('Custom translations set for user ID: ' $event->getUserId());
  112.             $this->logger->critical($this->translator->trans('user_email.reschedule', [], 'messages'$accountLocale));
  113.             if (isset($this->messageCatalogueList[$accountLocale])) {
  114.                 $this->logger->critical($this->messageCatalogueList[$accountLocale]->get('user_email.reschedule'));
  115.             }
  116.         }
  117.     }
  118.     /**
  119.      * @param MessageCatalogue $catalogue
  120.      * @param string $locale
  121.      * @return void
  122.      */
  123.     public function setDefaultCatalog(MessageCatalogue $cataloguestring $locale): void
  124.     {
  125.         if (!isset($this->messageCatalogueList[$locale])) {
  126.             $this->messageCatalogueList[$locale] = new MessageCatalogue($locale$catalogue->all());
  127.         } else {
  128.             $defaultCatalogue $this->messageCatalogueList[$locale];
  129.             foreach ($defaultCatalogue->all() as $domain => $messages) {
  130.                 $catalogue->replace($messages$domain);
  131.             }
  132.         }
  133.     }
  134. }