<?php
namespace App\EventSubscriber;
use App\Entity\Aviso;
use App\Enum\ParticipantesGrupoEstado;
use App\Enum\TipoAvisoEnum;
use App\Interfaces\AvisoRepositoryInterface;
use App\Interfaces\PropietarioContenidoRepositoryInterface;
use App\Services\AsymmetricEncryptionService;
use App\Services\EventDomain\InscripcionRejectedEvent;
use App\Services\EventDomain\InteresMarkedEvent;
use DateTime;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Translation\Translator;
class InscripcionRechazadaEventSubscriber implements EventSubscriberInterface
{
public function __construct(
private AsymmetricEncryptionService $asymmetricEncryptionService,
private PropietarioContenidoRepositoryInterface $propietarioContenidoRepository,
private AvisoRepositoryInterface $avisoRepository,
private Translator $translator,
private UrlGeneratorInterface $urlGenerator,
private RequestStack $requestStack,
)
{
}
public static function getSubscribedEvents()
{
return [
InscripcionRejectedEvent::class => 'onRejectedInscripcion',
];
}
public function onRejectedInscripcion(InscripcionRejectedEvent $event): void
{
$participanteGrupo = $event->getParticipanteGrupo();
$propietario = $participanteGrupo->getParticipanteGrupoDetalle()->getParticipante();
$solicitud = $participanteGrupo->getGrupo()->getSolicitudAccionFormativa();
$curso = $solicitud->getCurso();
$entidadColaboradora = $solicitud->getExpediente()->getExpedientePerteneAEntidad()->getEntidadColaboradora();
$aviso = new Aviso();
$aviso->setTipo(TipoAvisoEnum::AVISO_CURSO_INSCRIPCION_RECHAZADA);
$aviso->setFecha(new DateTime());
$aviso->setAsunto($this->translator->trans('new.ads.curso.inscripcion.rejected', ['%curso%' => $curso->getNombre()[$this->requestStack->getCurrentRequest()->getLocale()]], 'ads'));
$aviso->setPropietarioContenido($propietario);
$aviso->setObject($participanteGrupo);
$aviso->setEntidad($entidadColaboradora);
$aviso->setCurso($curso);
$aviso->setDeletedAt(null);
$token = $this->asymmetricEncryptionService->hybridEncrypt([
'tipoAviso' => TipoAvisoEnum::AVISO_CURSO_INSCRIPCION_RECHAZADA,
'propietarioId' => $aviso->getPropietarioContenido()?->getId(),
'url' => $this->urlGenerator->generate('course_detail', ['tipo' => 'grupo', 'id' => $participanteGrupo->getGrupo()->getId()], UrlGeneratorInterface::ABSOLUTE_URL),
]);
$aviso->setTokenHash($token);
$this->avisoRepository->save($aviso);
}
}