<?php
namespace App\EventListener;
use App\Event\PortalUserEvent;
use App\Services\Portal\PortalService;
use Exception;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Response;
/**
* Classe PortalUserEventListener
* Cette classe est responsable de l'écoute des événements liés aux utilisateurs du portail.
*/
class PortalUserEventListener
{
/**
* @var PortalService $portalService
* Service pour gérer les opérations liées au portail.
*/
private PortalService $portalService;
private LoggerInterface $logger;
public function __construct(PortalService $portalService, LoggerInterface $logger)
{
$this->portalService = $portalService;
$this->logger = $logger;
}
/**
* Méthode pour gérer la création ou la mise à jour des utilisateurs du portail.
*
* @param PortalUserEvent $event L'événement contenant les informations de l'utilisateur.
*
* @throws Exception
*/
public function onPortalUserCreateOrUpdate(PortalUserEvent $event): void
{
if($this->portalService->isOnPortal())
{
// Split le tableau en pack de 200 utilisateurs
$chunks = array_chunk($event->getUsers(), 150);
foreach ($chunks as $users)
{
if ($this->portalService->isAParent())
{
// Envoyer les utilisateurs mis à jour au référent
$response = $this->portalService->sendUpdatedUserToReferent($users);
if ($response->getStatusCode() !== Response::HTTP_OK && $response->getStatusCode() !== Response::HTTP_CREATED)
{
$this->logger->error(
'Erreur lors de la mise à jour utilisateur sur le site référent',
[
'response' => json_decode($response->getContent(), TRUE) ?? $response->getContent(),
]
);
}
$this->portalService->createOrUpdateUserOnNanReferentUrls($users);
} else {
// Si le service du portail est un parent
$isNew = $event->isNew();
// Envoyer l'utilisateur mis à jour au portail
$response = $this->portalService->sendUpdatedUserToPortal($users, $isNew, $event->getNewStatus(), $event->getOldStatus());
if ($response->getStatusCode() !== Response::HTTP_OK && $response->getStatusCode() !== Response::HTTP_CREATED) {
$this->logger->error(
'Erreur lors de la mise à jour de l\'utilisateur sur le portail',
[
'response' => json_decode($response->getContent(), TRUE) ?? $response->getContent(),
]
);
}
}
}
}
}
}