src/EventSubscriber/EasyAdminSubscriber.php line 51

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