src/EventSubscriber/InscripcionAceptadaEventSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Aviso;
  4. use App\Entity\ParticipantesGrupo;
  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\InscripcionAcceptedEvent;
  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 InscripcionAceptadaEventSubscriber 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. InscripcionAcceptedEvent::class => 'onAcceptedInscripcion',
  34. ];
  35. }
  36. public function onAcceptedInscripcion(InscripcionAcceptedEvent $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. $aviso = new Aviso();
  44. $aviso->setTipo(TipoAvisoEnum::AVISO_CURSO_INSCRIPCION_ACEPTADA);
  45. $aviso->setFecha(new DateTime());
  46. $aviso->setAsunto($this->translator->trans('new.ads.curso.inscripcion.accepted', ['%curso%' => $curso->getNombre()[$this->requestStack->getCurrentRequest()->getLocale()]], 'ads'));
  47. $aviso->setPropietarioContenido($propietario);
  48. $aviso->setObject($participanteGrupo);
  49. $aviso->setEntidad($entidadColaboradora);
  50. $aviso->setCurso($curso);
  51. $aviso->setDeletedAt(null);
  52. $token = $this->asymmetricEncryptionService->hybridEncrypt([
  53. 'tipoAviso' => TipoAvisoEnum::AVISO_CURSO_INSCRIPCION_ACEPTADA,
  54. 'propietarioId' => $aviso->getPropietarioContenido()?->getId(),
  55. 'url' => $this->urlGenerator->generate('my_course_list', ['status' => ParticipantesGrupoEstado::INSCRITO],
  56. UrlGeneratorInterface::ABSOLUTE_URL),
  57. ]);
  58. $aviso->setTokenHash($token);
  59. $this->avisoRepository->save($aviso);
  60. }
  61. }