src/Twig/AppGlobals.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Twig;
  3. use App\Entity\Magasin;
  4. use App\Entity\Ticket;
  5. use App\Entity\Utilisateur;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  9. use Twig\Extension\AbstractExtension;
  10. use Twig\Extension\GlobalsInterface;
  11. class AppGlobals extends AbstractExtension implements GlobalsInterface
  12. {
  13.     public function __construct(
  14.         private RequestStack $requestStack,
  15.         private EntityManagerInterface $em,
  16.         private TokenStorageInterface $tokenStorage
  17.     ) {}
  18.     public function getGlobals(): array
  19.     {
  20.         $magasin $this->resolveMagasin();
  21.         $utilisateur $this->resolveUtilisateur();
  22.         $ticketCounts $this->resolveTicketCounts($magasin$utilisateur);
  23.         return [
  24.             'magasin' => $magasin,
  25.             'network' => (bool) ($magasin?->getNetwork() ?? false),
  26.             'ticket_counts' => $ticketCounts,
  27.         ];
  28.     }
  29.     private function resolveMagasin(): ?Magasin
  30.     {
  31.         $request $this->requestStack->getCurrentRequest();
  32.         if (!$request) {
  33.             return null// e.g., CLI context
  34.         }
  35.         $session $request->getSession();
  36.         $id $session?->get('magasin');
  37.         if (!$id) {
  38.             return null;
  39.         }
  40.         return $this->em->getRepository(Magasin::class)->find($id);
  41.     }
  42.     private function resolveUtilisateur(): ?Utilisateur
  43.     {
  44.         $token $this->tokenStorage->getToken();
  45.         $user $token $token->getUser() : null;
  46.         if (!$user instanceof Utilisateur) {
  47.             return null;
  48.         }
  49.         return $user;
  50.     }
  51.     private function resolveTicketCounts(?Magasin $magasin, ?Utilisateur $utilisateur): array
  52.     {
  53.         if (!$magasin || !$utilisateur) {
  54.             return [
  55.                 'open' => 0,
  56.                 'mode' => null,
  57.             ];
  58.         }
  59.         $repo $this->em->getRepository(Ticket::class);
  60.         if ($utilisateur->getSuperAdmin()) {
  61.             return [
  62.                 'open' => $repo->countOpenByMagasin($magasin),
  63.                 'mode' => 'superadmin',
  64.             ];
  65.         }
  66.         return [
  67.             'open' => $repo->countOpenByMagasinAndUser($magasin$utilisateur),
  68.             'mode' => 'user',
  69.         ];
  70.     }
  71. }