src/EventSubscriber/AccessibleCategoriesSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Security\AppUser;
  4. use App\Repository\CategoryRepository;
  5. use App\Repository\GroupRepository;
  6. use App\Repository\MalletteFileRepository;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\Security\Core\Security;
  11. use Twig\Environment;
  12. class AccessibleCategoriesSubscriber implements EventSubscriberInterface
  13. {
  14.     public function __construct(
  15.         private Environment $twig,
  16.         private Security $security,
  17.         private MalletteFileRepository $malletteFileRepository,
  18.         private CategoryRepository $categoryRepository,
  19.         private GroupRepository $groupRepository,
  20.     ) {
  21.     }
  22.     public static function getSubscribedEvents(): array
  23.     {
  24.         return [
  25.             KernelEvents::CONTROLLER => 'onKernelController',
  26.         ];
  27.     }
  28.     public function onKernelController(ControllerEvent $event): void
  29.     {
  30.         if (!$event->isMainRequest()) {
  31.             return;
  32.         }
  33.         $user $this->security->getUser();
  34.         if (!$user instanceof AppUser) {
  35.             return;
  36.         }
  37.         $groups $this->groupRepository->findByClient($user->getClient());
  38.         $allAccessibleFiles $this->malletteFileRepository->findByCategoryAccess($groups$user);
  39.         $accessibleCategories $this->categoryRepository->findByGroupsAndMalletteFiles($groups$allAccessibleFiles);
  40.         $categoryFileCounts = [];
  41.         foreach ($allAccessibleFiles as $file) {
  42.             foreach ($file->getCategories() as $category) {
  43.                 $categoryId $category->getId();
  44.                 if (!isset($categoryFileCounts[$categoryId])) {
  45.                     $categoryFileCounts[$categoryId] = 0;
  46.                 }
  47.                 $categoryFileCounts[$categoryId]++;
  48.             }
  49.         }
  50.         $this->twig->addGlobal('accessibleCategories'$accessibleCategories);
  51.         $this->twig->addGlobal('categoryFileCounts'$categoryFileCounts);
  52.     }
  53. }