<?php
namespace Products\NotificationsBundle\Subscriber;
use Cms\CoreBundle\Util\Doctrine\EntityManager;
use Products\NotificationsBundle\Entity\Profile;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
final class LanguageSubscriber implements EventSubscriberInterface
{
/**
* @var EntityManager
*/
private EntityManager $em;
/**
* @var TokenStorageInterface
*/
private TokenStorageInterface $tokenStorage;
/**
* @param EntityManager $em
* @param TokenStorageInterface $tokenStorage
*/
public function __construct(EntityManager $em, TokenStorageInterface $tokenStorage)
{
$this->em = $em;
$this->tokenStorage = $tokenStorage;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 0],
];
}
/**
* @param RequestEvent $event
*/
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$route = $request->attributes->get('_route');
if (empty($route) || ! str_starts_with($route, 'app.notifications.portal.')) {
return;
}
$user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
if ( ! $user instanceof Profile) {
return;
}
$googtransCookie = $request->cookies->get('googtrans');
if (empty($googtransCookie)) {
return;
}
$cookieLang = explode('/', $googtransCookie)[2] ?? null;
if (empty($cookieLang)) {
return;
}
if ($user->getLanguageOverride() === $cookieLang) {
return;
}
$user->setLanguageOverride($cookieLang);
$this->em->save($user);
}
}