src/EventSubscriber/InscripcionRechazadaEventSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Aviso;
  4. use App\Enum\ParticipantesGrupoEstado;
  5. use App\Enum\TipoAvisoEnum;
  6. use App\Interfaces\AvisoRepositoryInterface;
  7. use App\Interfaces\PropietarioContenidoRepositoryInterface;
  8. use App\Services\AsymmetricEncryptionService;
  9. use App\Services\EventDomain\InscripcionRejectedEvent;
  10. use App\Services\EventDomain\InteresMarkedEvent;
  11. use DateTime;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\RequestStack;
  15. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  16. use Symfony\Component\Translation\Translator;
  17. class InscripcionRechazadaEventSubscriber implements EventSubscriberInterface
  18. {
  19. public function __construct(
  20. private AsymmetricEncryptionService $asymmetricEncryptionService,
  21. private PropietarioContenidoRepositoryInterface $propietarioContenidoRepository,
  22. private AvisoRepositoryInterface $avisoRepository,
  23. private Translator $translator,
  24. private UrlGeneratorInterface $urlGenerator,
  25. private RequestStack $requestStack,
  26. )
  27. {
  28. }
  29. public static function getSubscribedEvents()
  30. {
  31. return [
  32. InscripcionRejectedEvent::class => 'onRejectedInscripcion',
  33. ];
  34. }
  35. public function onRejectedInscripcion(InscripcionRejectedEvent $event): void
  36. {
  37. $participanteGrupo = $event->getParticipanteGrupo();
  38. $propietario = $participanteGrupo->getParticipanteGrupoDetalle()->getParticipante();
  39. $solicitud = $participanteGrupo->getGrupo()->getSolicitudAccionFormativa();
  40. $curso = $solicitud->getCurso();
  41. $entidadColaboradora = $solicitud->getExpediente()->getExpedientePerteneAEntidad()->getEntidadColaboradora();
  42. $aviso = new Aviso();
  43. $aviso->setTipo(TipoAvisoEnum::AVISO_CURSO_INSCRIPCION_RECHAZADA);
  44. $aviso->setFecha(new DateTime());
  45. $aviso->setAsunto($this->translator->trans('new.ads.curso.inscripcion.rejected', ['%curso%' => $curso->getNombre()[$this->requestStack->getCurrentRequest()->getLocale()]], 'ads'));
  46. $aviso->setPropietarioContenido($propietario);
  47. $aviso->setObject($participanteGrupo);
  48. $aviso->setEntidad($entidadColaboradora);
  49. $aviso->setCurso($curso);
  50. $aviso->setDeletedAt(null);
  51. $token = $this->asymmetricEncryptionService->hybridEncrypt([
  52. 'tipoAviso' => TipoAvisoEnum::AVISO_CURSO_INSCRIPCION_RECHAZADA,
  53. 'propietarioId' => $aviso->getPropietarioContenido()?->getId(),
  54. 'url' => $this->urlGenerator->generate('course_detail', ['tipo' => 'grupo', 'id' => $participanteGrupo->getGrupo()->getId()], UrlGeneratorInterface::ABSOLUTE_URL),
  55. ]);
  56. $aviso->setTokenHash($token);
  57. $this->avisoRepository->save($aviso);
  58. }
  59. }