<?php
namespace App\Event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Security;
class TimezoneSubscriber implements EventSubscriberInterface {
public function __construct(private Security $security, private string $appTimezone) {
}
public static function getSubscribedEvents(): array {
return [
KernelEvents::CONTROLLER => ['onKernelController', 20],
];
}
public function onKernelController(ControllerEvent $event): void {
if (!$event->isMainRequest()) {
return;
}
if (!$this->security->getUser()) {
date_default_timezone_set($this->appTimezone);
return;
}
$customer = $this->security->getUser()->getCustomer() ?? null;
if ($customer && $customer->getTimezone()) {
date_default_timezone_set($customer->getTimezone());
} else {
date_default_timezone_set($this->appTimezone);
}
}
}