src/EventSubscriber/EmailNotificationSubscriber.php line 36

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use App\Services\CallApiTab;
  5. use App\Services\CallApiService;
  6. use Symfony\Bundle\SecurityBundle\Security;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. class EmailNotificationSubscriber implements EventSubscriberInterface
  11. {
  12.     private Security $security;
  13.     private CallApiTab $callApiTab;
  14.     private CallApiService $callApiService;
  15.     public function __construct(
  16.         Security $security,
  17.         CallApiTab $callApiTab,
  18.         CallApiService $callApiService
  19.     ) {
  20.         $this->security $security;
  21.         $this->callApiTab $callApiTab;
  22.         $this->callApiService $callApiService;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             KernelEvents::CONTROLLER => 'onKernelController',
  28.         ];
  29.     }
  30.     public function onKernelController(ControllerEvent $event): void
  31.     {
  32.         // DÉSACTIVÉ TEMPORAIREMENT POUR ÉVITER LA BOUCLE INFINIE
  33.         return;
  34.         // Vérifier que c'est la requête principale
  35.         if (!$event->isMainRequest()) {
  36.             return;
  37.         }
  38.         $user $this->security->getUser();
  39.         // Vérifier que l'utilisateur est connecté et est un User
  40.         if (!$user instanceof User) {
  41.             return;
  42.         }
  43.         // Ne pas exécuter pour les routes internes/API
  44.         $request $event->getRequest();
  45.         $route $request->attributes->get('_route');
  46.         if ($route && (
  47.             str_starts_with($route'internal_') ||
  48.             str_starts_with($route'_') ||
  49.             str_starts_with($route'app_logout')
  50.         )) {
  51.             return;
  52.         }
  53.         try {
  54.             // Récupérer les emails mis à jour
  55.             $this->fetchUserEmails($user);
  56.         } catch (\Exception $e) {
  57.             // En cas d'erreur, on ne fait rien pour ne pas casser la navigation
  58.             // On pourrait logger l'erreur si nécessaire
  59.         }
  60.     }
  61.     private function fetchUserEmails(User $user): void
  62.     {
  63.         $apiToken $user->getApiToken();
  64.         $accountId $user->getAccountId();
  65.         $userId $user->getUserId();
  66.         $dataTab = [
  67.             "accountId" => $accountId,
  68.             "userId" => $userId
  69.         ];
  70.         $endpoint $this->callApiTab->endpoint();
  71.         $roles = [];
  72.         foreach ($user->getRoles() as $role) {
  73.             $roles[$role] = $role;
  74.             if (isset($roles['ROLE_SUPERADMIN']) || isset($roles['ROLE_ADMIN'])) {
  75.                 $questionsMailCompteEndpoint $endpoint['questionsMailCompte'];
  76.                 unset($dataTab['userId']);
  77.                 $questionsMailCompteTab $this->callApiTab->tab($apiToken$dataTab);
  78.                 $questionsMailConseiller $this->callApiService->postApi($questionsMailCompteEndpoint$questionsMailCompteTab);
  79.                 break;
  80.             } else {
  81.                 $questionsMailConseillerEndPoint $endpoint['questionsMailConseiller'];
  82.                 $questionsMailConseillerTab $this->callApiTab->tab($apiToken$dataTab);
  83.                 $questionsMailConseiller $this->callApiService->postApi($questionsMailConseillerEndPoint$questionsMailConseillerTab);
  84.             }
  85.         }
  86.         // Les emails sont récupérés via l'API, ils seront disponibles pour les prochaines requêtes
  87.         // Dans admin-pro, les emails ne sont pas stockés dans l'entité User comme dans demo2,
  88.         // mais récupérés à chaque fois depuis l'API
  89.     }
  90. }