src/EventSubscriber/InscripcionEventSubscriber.php line 41

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