<?php
namespace App\EventSubscriber;
use App\Entity\AccountingFirm;
use App\Services\SellsyService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Twig\Environment;
class TwigGlobalSubscriber implements EventSubscriberInterface
{
private Environment $twig;
private TokenStorageInterface $tokenStorage;
private SellsyService $sellsyService;
public function __construct(
Environment $twig,
TokenStorageInterface $tokenStorage,
SellsyService $sellsyService
) {
$this->twig = $twig;
$this->tokenStorage = $tokenStorage;
$this->sellsyService = $sellsyService;
}
public function onKernelController(ControllerEvent $event): void
{
$token = $this->tokenStorage->getToken();
$user = $token ? $token->getUser() : null;
$hasWebsite = false;
$hasInternWebsite = false;
$platformEnabled = false;
if (is_object($user) && method_exists($user, 'getAccountingFirm')) {
$firm = $user->getAccountingFirm();
if ($firm instanceof AccountingFirm) {
$siteInternetValue = $this->sellsyService->getWebsiteModuleValue($firm);
$hasWebsite = $firm->getWebsiteCreatedAt() !== null;
// Site interne uniquement
$hasInternWebsite = $siteInternetValue === 'Interne';
$platformEnabled = $hasInternWebsite || $firm->isPlatformEnabled();
}
}
$this->twig->addGlobal('has_website', $hasWebsite);
$this->twig->addGlobal('has_intern_website', $hasInternWebsite);
$this->twig->addGlobal('platform_enabled', $platformEnabled);
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
}