src/EventSubscriber/EmailNotificationSubscriber.php line 36
<?phpnamespace App\EventSubscriber;use App\Entity\User;use App\Services\CallApiTab;use App\Services\CallApiService;use Symfony\Bundle\SecurityBundle\Security;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpKernel\Event\ControllerEvent;use Symfony\Component\HttpKernel\KernelEvents;class EmailNotificationSubscriber implements EventSubscriberInterface{private Security $security;private CallApiTab $callApiTab;private CallApiService $callApiService;public function __construct(Security $security,CallApiTab $callApiTab,CallApiService $callApiService) {$this->security = $security;$this->callApiTab = $callApiTab;$this->callApiService = $callApiService;}public static function getSubscribedEvents(): array{return [KernelEvents::CONTROLLER => 'onKernelController',];}public function onKernelController(ControllerEvent $event): void{// DÉSACTIVÉ TEMPORAIREMENT POUR ÉVITER LA BOUCLE INFINIEreturn;// Vérifier que c'est la requête principaleif (!$event->isMainRequest()) {return;}$user = $this->security->getUser();// Vérifier que l'utilisateur est connecté et est un Userif (!$user instanceof User) {return;}// Ne pas exécuter pour les routes internes/API$request = $event->getRequest();$route = $request->attributes->get('_route');if ($route && (str_starts_with($route, 'internal_') ||str_starts_with($route, '_') ||str_starts_with($route, 'app_logout'))) {return;}try {// Récupérer les emails mis à jour$this->fetchUserEmails($user);} catch (\Exception $e) {// En cas d'erreur, on ne fait rien pour ne pas casser la navigation// On pourrait logger l'erreur si nécessaire}}private function fetchUserEmails(User $user): void{$apiToken = $user->getApiToken();$accountId = $user->getAccountId();$userId = $user->getUserId();$dataTab = ["accountId" => $accountId,"userId" => $userId];$endpoint = $this->callApiTab->endpoint();$roles = [];foreach ($user->getRoles() as $role) {$roles[$role] = $role;if (isset($roles['ROLE_SUPERADMIN']) || isset($roles['ROLE_ADMIN'])) {$questionsMailCompteEndpoint = $endpoint['questionsMailCompte'];unset($dataTab['userId']);$questionsMailCompteTab = $this->callApiTab->tab($apiToken, $dataTab);$questionsMailConseiller = $this->callApiService->postApi($questionsMailCompteEndpoint, $questionsMailCompteTab);break;} else {$questionsMailConseillerEndPoint = $endpoint['questionsMailConseiller'];$questionsMailConseillerTab = $this->callApiTab->tab($apiToken, $dataTab);$questionsMailConseiller = $this->callApiService->postApi($questionsMailConseillerEndPoint, $questionsMailConseillerTab);}}// Les emails sont récupérés via l'API, ils seront disponibles pour les prochaines requêtes// Dans admin-pro, les emails ne sont pas stockés dans l'entité User comme dans demo2,// mais récupérés à chaque fois depuis l'API}}