<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class LocaleSubscriber implements EventSubscriberInterface
{
private $defaultLocale;
public function __construct($defaultLocale = 'en')
{
$this->defaultLocale = $defaultLocale;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
$editMode = $request->get("editmode", '');
if ($editMode != '') {
if ($editMode == "1") {
$request->getSession()->set("editmode", true);
}
if ($editMode == "0") {
$request->getSession()->set("editmode", false);
}
}
/*
if (!$request->hasPreviousSession()) {
return;
}
*/
// overwrite _locale if language was sent by parameter
if ($language = $request->get('language', false)) {
$request->getSession()->set('_locale', $language);
$request->setLocale($language);
setCookie("language", $language, time() + (60 * 60 * 24 * 30), "/", ".menu.engineer", true, true);
} else {
// try to load language from cookie first
if (isset($_COOKIE["language"])) {
$language = $_COOKIE["language"];
$request->getSession()->set('_locale', $language);
$request->setLocale($language);
} // try to see if the locale has been set as a _locale routing parameter
else if ($locale = $request->attributes->get('_locale')) {
$request->getSession()->set('_locale', $locale);
} else {
// if no explicit locale has been set on this request, use one from the session
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
}
}
public static function getSubscribedEvents()
{
return [
// must be registered before (i.e. with a higher priority than) the default Locale listener
KernelEvents::REQUEST => [['onKernelRequest', 20]],
];
}
}