src/EventSubscriber/ForoEventSubscriber.php line 34

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\ForoChangedEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  11. use Symfony\Component\Translation\Translator;
  12. class ForoEventSubscriber implements EventSubscriberInterface
  13. {
  14. public function __construct(
  15. private AsymmetricEncryptionService $asymmetricEncryptionService,
  16. private PropietarioContenidoRepositoryInterface $propietarioContenidoRepository,
  17. private AvisoRepositoryInterface $avisoRepository,
  18. private Translator $translator,
  19. private UrlGeneratorInterface $urlGenerator,
  20. )
  21. {
  22. }
  23. public static function getSubscribedEvents()
  24. {
  25. return [
  26. ForoChangedEvent::class => 'onChangedForo',
  27. ];
  28. }
  29. public function onChangedForo(ForoChangedEvent $event): void
  30. {
  31. $mensaje = $event->getMensajeForo();
  32. $tema = $event->getMensajeForo()->getTema();
  33. $propietariosForo = $this->propietarioContenidoRepository->getPropietariosByTema($tema);
  34. $propietariosAvisos = $this->avisoRepository->getPropietariosByObjectDeleted($tema);
  35. $propietarios = array_diff($propietariosForo, $propietariosAvisos, [$mensaje->getPropietarioContenido()]);
  36. //Obtener avisos
  37. foreach ($propietarios as $propietario) {
  38. $avisosPropietario = $this->avisoRepository->getAvisosForoByPropietarioTema($propietario, $tema);
  39. $i = 0;
  40. $aviso = new Aviso();
  41. foreach ($avisosPropietario as $avisoPropietario)
  42. {
  43. if($i !== 0)
  44. {
  45. $this->avisoRepository->delete($avisoPropietario, true);
  46. }
  47. else
  48. {
  49. $aviso = $avisoPropietario;
  50. }
  51. $i++;
  52. }
  53. $aviso->setTipo(TipoAvisoEnum::AVISO_FORO);
  54. $aviso->setFecha($mensaje->getCreatedAt());
  55. $aviso->setAsunto($this->translator->trans('new.ads.foro', ['%tema%' => $tema], 'ads'));
  56. $aviso->setPropietarioContenido($propietario);
  57. $aviso->setObject($mensaje);
  58. $aviso->setTema($tema);
  59. $aviso->setDeletedAt(null);
  60. $token = $this->asymmetricEncryptionService->hybridEncrypt([
  61. 'tipoAviso' => TipoAvisoEnum::AVISO_FORO,
  62. 'propietarioId' => $aviso->getPropietarioContenido()?->getId(),
  63. 'url' => $this->urlGenerator->generate('mensaje_foro_list', ['id' => $tema->getId()], UrlGeneratorInterface::ABSOLUTE_URL),
  64. ]);
  65. $aviso->setTokenHash($token);
  66. $this->avisoRepository->save($aviso);
  67. }
  68. }
  69. }