src/EventSubscriber/AdminSubscriber.php line 26

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Album;
  4. use App\Entity\AlbumImage;
  5. use App\Entity\BranchOffice;
  6. use App\Entity\MainCard;
  7. use App\Entity\Partner;
  8. use App\Entity\TeamCard;
  9. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityDeletedEvent;
  10. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class AdminSubscriber implements EventSubscriberInterface
  13. {
  14.     private $parameterBag;
  15.     private $projectDir;
  16.     public function __construct(ParameterBagInterface $parameterBag)
  17.     {
  18.         $this->parameterBag $parameterBag;
  19.         $this->projectDir $parameterBag->get('kernel.project_dir');
  20.     }
  21.     public function deleteFile(AfterEntityDeletedEvent $event): void
  22.     {
  23.         $entity $event->getEntityInstance();
  24.         $filePath = match (get_class($entity)) {
  25.             Album::class => $this->projectDir.'/'.$this->parameterBag->get('albums_upload_dir').'/',
  26.             AlbumImage::class => $this->projectDir.'/'.$this->parameterBag->get('albums_upload_dir').'/'.$entity->getImageUrl(),
  27.             BranchOffice::class => $this->projectDir.'/'.$this->parameterBag->get('branch_offices_upload_dir').'/'.$entity->getBackgroundImageUrl(),
  28.             MainCard::class => $this->projectDir.'/'.$this->parameterBag->get('main_cards_upload_dir').'/'.$entity->getImageUrl(),
  29.             Partner::class => $this->projectDir.'/'.$this->parameterBag->get('partners_upload_dir').'/'.$entity->getImageUrl(),
  30.             TeamCard::class => $this->projectDir.'/'.$this->parameterBag->get('team_cards_upload_dir').'/'.$entity->getImageUrl(),
  31.             default => ''
  32.         };
  33.         
  34.         if ($entity instanceof Album) {
  35.             $this->deleteAlbumImages($entity);
  36.             return;
  37.         }
  38.         if ($entity instanceof BranchOffice) {
  39.             foreach($entity->getAlbums() as $album) {
  40.                 $this->deleteAlbumImages($album);
  41.             }
  42.         }
  43.         
  44.         if (file_exists($filePath)) {
  45.             unlink($filePath);
  46.         } else {
  47.             return;
  48.         }
  49.     }
  50.     private function deleteAlbumImages(Album $album): void
  51.     {
  52.         $albumPath $this->projectDir.'/'.$this->parameterBag->get('albums_upload_dir').'/';
  53.         $imageMain $albumPath.$album->getImageMain();
  54.         if (file_exists($imageMain)) {
  55.             unlink($imageMain);
  56.         }
  57.         foreach($album->getAlbumImages() as $albumImage) {
  58.             $imageUrl $albumPath.$albumImage->getImageUrl();
  59.             if (file_exists($imageUrl)) {
  60.                 unlink($imageUrl);
  61.             }
  62.         }
  63.     }
  64.     public static function getSubscribedEvents(): array
  65.     {
  66.         return [
  67.             AfterEntityDeletedEvent::class => ['deleteFile'],
  68.         ];
  69.     }
  70. }