src/WellCommerce/Bundle/AppBundle/EventListener/LocaleSubscriber.php line 62

Open in your IDE?
  1. <?php
  2. declare(strict_types=0);
  3. /*
  4.  * WellCommerce Foundation
  5.  *
  6.  * This file is part of the WellCommerce package.
  7.  *
  8.  * (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
  9.  *
  10.  * For the full copyright and license information,
  11.  * please view the LICENSE file that was distributed with this source code.
  12.  */
  13. namespace WellCommerce\Bundle\AppBundle\EventListener;
  14. use Symfony\Component\Console\ConsoleEvents;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  17. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  18. use Symfony\Component\HttpKernel\HttpKernelInterface;
  19. use Symfony\Component\HttpKernel\KernelEvents;
  20. use Symfony\Component\Messenger\Stamp\DelayStamp;
  21. use WellCommerce\Bundle\AppBundle\Controller\Front\ApiController;
  22. use WellCommerce\Bundle\AppBundle\Controller\Front\GraphController;
  23. use WellCommerce\Bundle\AppBundle\Entity\Locale;
  24. use WellCommerce\Bundle\AppBundle\Service\Messenger\CreateLocaleMessage;
  25. use WellCommerce\Bundle\AppBundle\Service\Messenger\DeleteLocaleMessage;
  26. use WellCommerce\Bundle\CoreBundle\Controller\Front\AbstractFrontController;
  27. use WellCommerce\Bundle\CoreBundle\DependencyInjection\AbstractServiceSubscriber;
  28. use WellCommerce\Bundle\CoreBundle\Doctrine\Event\EntityEvent;
  29. /**
  30.  * Class LocaleSubscriber
  31.  *
  32.  * @author  Adam Piotrowski <adam@wellcommerce.org>
  33.  */
  34. class LocaleSubscriber extends AbstractServiceSubscriber implements EventSubscriberInterface
  35. {
  36.     public static function getSubscribedEvents()
  37.     {
  38.         return [
  39.             'locale.post_create'     => ['onLocalePostCreate'0],
  40.             'locale.pre_remove'      => ['onLocalePreRemove'0],
  41.             KernelEvents::REQUEST    => ['onKernelRequest'15],
  42.             KernelEvents::CONTROLLER => ['onKernelController'15],
  43.             ConsoleEvents::COMMAND   => ['onConsoleCommand'0],
  44.         ];
  45.     }
  46.     public function onKernelController(ControllerEvent $event)
  47.     {
  48.         $locale $event->getRequest()->getLocale();
  49.         if (is_array($event->getController())) {
  50.             [$controller$action] = $event->getController();
  51.             if ($controller instanceof AbstractFrontController) {
  52.                 $this->getEntityManager()->getFilters()->enable('locale')->setParameter('locale'$locale);
  53.             }
  54.         }
  55.     }
  56.     public function onLocalePreRemove(EntityEvent $event)
  57.     {
  58.         $entity $event->getEntity();
  59.         if ($entity instanceof Locale) {
  60.             $this->getMessageBus()->dispatch(new DeleteLocaleMessage($entity->getId(), $entity->getCode()), [
  61.                 new DelayStamp($this->getKernel()->getContainer()->getParameter('messenger_delete_locale_message_delay')),
  62.             ]);
  63.         }
  64.     }
  65.     public function onLocalePostCreate(EntityEvent $event)
  66.     {
  67.         $entity $event->getEntity();
  68.         if ($entity instanceof Locale) {
  69.             $this->getMessageBus()->dispatch(new CreateLocaleMessage($entity->getId()), [
  70.                 new DelayStamp($this->getKernel()->getContainer()->getParameter('messenger_create_locale_message_delay')),
  71.             ]);
  72.         }
  73.     }
  74.     public function onConsoleCommand()
  75.     {
  76.         $filter $this->getEntityManager()->getFilters()->enable('locale');
  77.         $filter->setParameter('locale'$this->getParameterBag()->get('locale'));
  78.     }
  79.     public function onKernelRequest(GetResponseEvent $event)
  80.     {
  81.         if ($event->getRequestType() == HttpKernelInterface::SUB_REQUEST) {
  82.             return;
  83.         }
  84.         $request $event->getRequest();
  85.         if ($locale $request->attributes->get('_locale')) {
  86.             $request->getSession()->set('_locale'$locale);
  87.             $this->getTranslatorHelper()->forceLocale($locale);
  88.         } else {
  89.             if ($request->hasSession()) {
  90.                 $currentLocale $request->getSession()->get('_locale'$request->getDefaultLocale());
  91.                 $request->setLocale($currentLocale);
  92.                 $this->getTranslatorHelper()->forceLocale($currentLocale);
  93.             }
  94.         }
  95.     }
  96. }