<?php
namespace App\EventSubscriber;
use App\Util\EsUtil;
use App\Entity\Container;
use Doctrine\DBAL\Types\Type;
use Symfony\Component\Intl\Timezones;
use App\Doctrine\Types\UTCDateTimeType;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class RequestSubscriber implements EventSubscriberInterface
{
public function __construct(private Security $security)
{}
public function onKernelRequest(RequestEvent $event)
{
if (!$event->isMasterRequest()) {
return;
}
$request = $event->getRequest();
// Set current timezone as per user
$timezone = false;
$user = $this->security->getUser();
if ($user && $user->getTimezone()) {
$timezone = $user->getTimezone();
} else {
$timezone = $request->headers->get('ES-TIMEZONE', false);
}
if (empty($timezone)) {
$timezone = 'UTC';
}
if (!defined('_USER_TIMEZONE_')) {
define('_USER_TIMEZONE_', $timezone);
}
date_default_timezone_set(_USER_TIMEZONE_);
// Doctrine datetime type override
Type::overrideType('datetime', UTCDateTimeType::class);
Type::overrideType('datetimetz', UTCDateTimeType::class);
/*
$request = $event->getRequest();
$key = $request->headers->get('ES-KEY', null);
$domain = EsUtil::getDomainFromKey($key);
if (!$domain) {
$domain = $request->server->get('HTTP_HOST', null);
}
$client = null;
$user = $this->security->getUser();
if ($user) {
$client = $user->getClient();
$con = EsUtil::getContainerFromDomain($client, $domain);
$request->attributes->set('ES_CONTAINER', $con);
}
$request->attributes->set('ES_CLIENT', $client);
*/
}
public static function getSubscribedEvents(): array
{
return [
'kernel.request' => [
['onKernelRequest', 4]
]
];
}
}