src/EventSubscriber/EasyAdminSubscriber.php line 60

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Exception;
  4. use App\Entity\BlogPost;
  5. use App\Entity\BlogPostCategory;
  6. use App\Entity\BlogPostTranslation;
  7. use App\Entity\Media;
  8. use App\Entity\User;
  9. use App\Service\SlugGenerator;
  10. use App\Repository\BlogPostRepository;
  11. use App\Repository\MediaRepository;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityDeletedEvent;
  14. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
  15. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  16. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. use Symfony\Component\String\Slugger\SluggerInterface;
  20. class EasyAdminSubscriber implements EventSubscriberInterface
  21. {
  22.     public function __construct(
  23.         private SluggerInterface $slugger,
  24.         private SlugGenerator $slugGenerator,
  25.         private RequestStack $requestStack,
  26.         private EntityManagerInterface $em,
  27.         private MediaRepository $mediaRepository,
  28.         private BlogPostRepository $blogPostRepository
  29.     ) {
  30.     }
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             AfterEntityPersistedEvent::class => ['afterEntityPersisted'],
  35.             AfterEntityUpdatedEvent::class => ['afterEntityUpdated'],
  36.             AfterEntityDeletedEvent::class => ['afterEntityDeleted'],
  37.         ];
  38.     }
  39.     public function afterEntityPersisted(AfterEntityPersistedEvent $event)
  40.     {
  41.         $this->requestStack
  42.             ->getSession()
  43.             ->getFlashBag()
  44.             ->add('success'"Création de l'entité effectuée avec succès");
  45.     }
  46.     public function afterEntityUpdated(AfterEntityUpdatedEvent $event)
  47.     {
  48.         $this->requestStack
  49.             ->getSession()
  50.             ->getFlashBag()
  51.             ->add('success'"Vos modifications ont été enregistrées");
  52.     }
  53.     public function afterEntityDeleted(AfterEntityDeletedEvent $event)
  54.     {
  55.         $entity $event->getEntityInstance();
  56.         if ($entity instanceof BlogPost) {
  57.             $regexUrl '/href="\/uploads\/medias\/([^"]+)"/';
  58.             preg_match_all($regexUrl$entity->getDescription(), $matches);
  59.             if (!empty($matches[1])) {
  60.                 foreach ($matches[1] as $fileName) {
  61.                     $medias $this->mediaRepository->findBy(['fileName' => $fileName]);
  62.                     if (count($medias) !== 1) {
  63.                         continue;
  64.                     }
  65.                     $media $medias[0];
  66.                     if (!$media instanceof Media || $media->getType() === Media::TEMPLATE_TYPE) {
  67.                         continue;
  68.                     }
  69.                     // Need exception catching in case the media is used somewhere else in the application
  70.                     try {
  71.                         $this->em->remove($media);
  72.                         $this->em->flush();
  73.                     } catch (Exception $e) {
  74.                     }
  75.                 }
  76.             }
  77.         }
  78.         $this->requestStack
  79.             ->getSession()
  80.             ->getFlashBag()
  81.             ->add('success'"L'entité a bien été supprimée");
  82.     }
  83. }