src/EventSubscriber/InscripcionBajaEventSubscriber.php line 37

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