src/EventSubscriber/InteresEventSubscriber.php line 38

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\InteresMarkedEvent;
  9. use DateTime;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. use Symfony\Component\Translation\Translator;
  15. class InteresEventSubscriber implements EventSubscriberInterface
  16. {
  17. public function __construct(
  18. private AsymmetricEncryptionService $asymmetricEncryptionService,
  19. private PropietarioContenidoRepositoryInterface $propietarioContenidoRepository,
  20. private AvisoRepositoryInterface $avisoRepository,
  21. private Translator $translator,
  22. private UrlGeneratorInterface $urlGenerator,
  23. private RequestStack $requestStack,
  24. )
  25. {
  26. }
  27. public static function getSubscribedEvents()
  28. {
  29. return [
  30. InteresMarkedEvent::class => 'onMarkedInteres',
  31. ];
  32. }
  33. public function onMarkedInteres(InteresMarkedEvent $event): void
  34. {
  35. $solicitud = $event->getSolicitud();
  36. $curso = $solicitud->getCurso();
  37. $entidadColaboradora = $solicitud->getExpediente()->getExpedientePerteneAEntidad()->getEntidadColaboradora();
  38. $propietarios = $entidadColaboradora->getPropietarioContenidoEntidadColaboradoras();
  39. foreach ($propietarios as $propietario) {
  40. $i = 0;
  41. $aviso = new Aviso();
  42. $avisosPropietario = $this->avisoRepository->getAvisosInteresByPropietarioCurso($entidadColaboradora, $curso);
  43. foreach ($avisosPropietario as $avisoPropietario) {
  44. if ($i !== 0) {
  45. $this->avisoRepository->delete($avisoPropietario, true);
  46. } else {
  47. $aviso = $avisoPropietario;
  48. }
  49. $i++;
  50. }
  51. $aviso->setTipo(TipoAvisoEnum::AVISO_CURSO_INTERES);
  52. $aviso->setFecha(new DateTime());
  53. $aviso->setAsunto($this->translator->trans('new.ads.curso.interes', ['%curso%' => $curso->getNombre()[$this->requestStack->getCurrentRequest()->getLocale()]], 'ads'));
  54. $aviso->setPropietarioContenido($propietario);
  55. $aviso->setObject($solicitud);
  56. $aviso->setEntidad($entidadColaboradora);
  57. $aviso->setCurso($curso);
  58. $aviso->setDeletedAt(null);
  59. $token = $this->asymmetricEncryptionService->hybridEncrypt([
  60. 'tipoAviso' => TipoAvisoEnum::AVISO_CURSO_INTERES,
  61. 'propietarioId' => $aviso->getPropietarioContenido()?->getId(),
  62. 'url' => $this->urlGenerator->generate('curso_detalle', ['id' => $solicitud->getId()],
  63. UrlGeneratorInterface::ABSOLUTE_URL),
  64. ]);
  65. $aviso->setTokenHash($token);
  66. $this->avisoRepository->save($aviso);
  67. }
  68. }
  69. }