src/EventListener/PortalUserEventListener.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Event\PortalUserEvent;
  4. use App\Services\Portal\PortalService;
  5. use Exception;
  6. use Psr\Log\LoggerInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. /**
  9. * Classe PortalUserEventListener
  10. * Cette classe est responsable de l'écoute des événements liés aux utilisateurs du portail.
  11. */
  12. class PortalUserEventListener
  13. {
  14. /**
  15. * @var PortalService $portalService
  16. * Service pour gérer les opérations liées au portail.
  17. */
  18. private PortalService $portalService;
  19. private LoggerInterface $logger;
  20. public function __construct(PortalService $portalService, LoggerInterface $logger)
  21. {
  22. $this->portalService = $portalService;
  23. $this->logger = $logger;
  24. }
  25. /**
  26. * Méthode pour gérer la création ou la mise à jour des utilisateurs du portail.
  27. *
  28. * @param PortalUserEvent $event L'événement contenant les informations de l'utilisateur.
  29. *
  30. * @throws Exception
  31. */
  32. public function onPortalUserCreateOrUpdate(PortalUserEvent $event): void
  33. {
  34. if($this->portalService->isOnPortal())
  35. {
  36. // Split le tableau en pack de 200 utilisateurs
  37. $chunks = array_chunk($event->getUsers(), 150);
  38. foreach ($chunks as $users)
  39. {
  40. if ($this->portalService->isAParent())
  41. {
  42. // Envoyer les utilisateurs mis à jour au référent
  43. $response = $this->portalService->sendUpdatedUserToReferent($users);
  44. if ($response->getStatusCode() !== Response::HTTP_OK && $response->getStatusCode() !== Response::HTTP_CREATED)
  45. {
  46. $this->logger->error(
  47. 'Erreur lors de la mise à jour utilisateur sur le site référent',
  48. [
  49. 'response' => json_decode($response->getContent(), TRUE) ?? $response->getContent(),
  50. ]
  51. );
  52. }
  53. $this->portalService->createOrUpdateUserOnNanReferentUrls($users);
  54. } else {
  55. // Si le service du portail est un parent
  56. $isNew = $event->isNew();
  57. // Envoyer l'utilisateur mis à jour au portail
  58. $response = $this->portalService->sendUpdatedUserToPortal($users, $isNew, $event->getNewStatus(), $event->getOldStatus());
  59. if ($response->getStatusCode() !== Response::HTTP_OK && $response->getStatusCode() !== Response::HTTP_CREATED) {
  60. $this->logger->error(
  61. 'Erreur lors de la mise à jour de l\'utilisateur sur le portail',
  62. [
  63. 'response' => json_decode($response->getContent(), TRUE) ?? $response->getContent(),
  64. ]
  65. );
  66. }
  67. }
  68. }
  69. }
  70. }
  71. }