src/EventSubscriber/EstablishmentSubscriber.php line 69

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Establishment;
  4. use App\Event\Establishment\EstablishmentCreatedEvent;
  5. use App\Event\Establishment\EstablishmentDeletedEvent;
  6. use App\Event\Establishment\EstablishmentUpdatedEvent;
  7. use App\Kimia;
  8. use App\Repository\EstablishmentRepository;
  9. use App\Service\Establishment\EstablishmentManager;
  10. use App\Service\NotificationService;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpKernel\Event\RequestEvent;
  15. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  16. class EstablishmentSubscriber implements EventSubscriberInterface
  17. {
  18.     public function __construct(
  19.         private NotificationService   $notificationService,
  20.         private UrlGeneratorInterface $urlGenerator,
  21.         private EstablishmentManager  $manager
  22.     ) {}
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             EstablishmentCreatedEvent::class => 'onCreated',
  27.             EstablishmentUpdatedEvent::class => 'onUpdated',
  28.             EstablishmentDeletedEvent::class => 'onDeleted',
  29.             RequestEvent::class => 'onKernelRequest',
  30.         ];
  31.     }
  32.     public function onCreated(EstablishmentCreatedEvent $event): void
  33.     {
  34.         $establishment $event->getEstablishment();
  35.         $establishment->setType(Kimia::TYPE_BILLING);
  36.         $this->manager->getRepository()->save($establishmenttrue);
  37.         $this->notificationService->notifyUser(
  38.             $establishment->getUser(),
  39.             'Établissement ajouté',
  40.             sprintf(
  41.                 "Vous venez d'ajouter l'établissement <strong>%s</strong>",
  42.                 $establishment->getName()
  43.             ),
  44.             $establishment
  45.         );
  46.     }
  47.     public function onUpdated(EstablishmentUpdatedEvent $event): void
  48.     {
  49.         $establishment $event->getEstablishment();
  50.         $this->notificationService->notifyUser(
  51.             $establishment->getUser(),
  52.             'Établissement modifié',
  53.             sprintf(
  54.                 "Vous venez de modifier l'établissement <strong>%s</strong>",
  55.                 $establishment->getName()
  56.             ),
  57.             $establishment
  58.         );
  59.     }
  60.     public function onDeleted(EstablishmentDeletedEvent $event): void
  61.     {
  62.         $establishment $event->getEstablishment();
  63.         $this->notificationService->notifyUser(
  64.             $establishment->getUser(),
  65.             'Établissement supprimé',
  66.             sprintf(
  67.                 "Vous venez de supprimer l'établissement <strong>%s</strong>",
  68.                 $establishment->getName()
  69.             ),
  70.             $establishment
  71.         );
  72.     }
  73.     public function onKernelRequest(RequestEvent $event): void
  74.     {
  75.         //$establishment = $this->manager->getConnected();
  76.         //dd($this->manager);
  77.         //TODO: a revoir s'il a le droit d'acceder ou pas une route en fonction de la souscription
  78.         /*if ($establishment?->checkSubscription()) {
  79.             $request = $event->getRequest();
  80.             if (!$this->isAutorisedRoute($request)) {
  81.                 $response = new RedirectResponse($this->urlGenerator->generate('app_establishment_expiry'), 302);
  82.                 $event->setResponse($response);
  83.             }
  84.         //}
  85.         //else //pas d'abonnement pour cet établissement*/
  86.     }
  87.     private function isAutorisedRoute(Request $request): bool
  88.     {
  89.         $currentRouteName $request->attributes->get('_route');
  90.         return in_array($currentRouteName, ['site_landing''app_self''app_establishment_new''app_establishment_expiry''app_invitation_show']);
  91.     }
  92. }