src/Subscriber/Content/PreviewImageSubscriber.php line 64

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Content;
  3. use App\Entity\ContentImageset;
  4. use App\Entity\ContentTypeAbstract;
  5. use App\Event\Content\ContentPreviewsSelectedEvent;
  6. use App\Event\Content\ContentVideoDeleteEvent;
  7. use App\Event\Content\PreviewImagePixelatedEvent;
  8. use App\Service\Content\ImagesetService;
  9. use App\Service\Content\PreviewService;
  10. use App\Service\Content\SnapshotService;
  11. use App\Service\Media\StorageLayer;
  12. use Liip\ImagineBundle\Service\FilterService;
  13. use Psr\Log\LoggerInterface;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. class PreviewImageSubscriber implements EventSubscriberInterface
  16. {
  17.     protected PreviewService $service;
  18.     protected FilterService $filterService;
  19.     protected SnapshotService $snapshotService;
  20.     protected ImagesetService $imagesetService;
  21.     protected LoggerInterface $logger;
  22.     protected StorageLayer $storageLayer;
  23.     /**
  24.      * PreviewImageSubscriber constructor.
  25.      */
  26.     public function __construct(PreviewService $serviceSnapshotService $snapshotService,
  27.         FilterService $filterServiceImagesetService $imagesetService,
  28.         LoggerInterface $loggerStorageLayer $storageLayer)
  29.     {
  30.         $this->service $service;
  31.         $this->snapshotService $snapshotService;
  32.         $this->filterService $filterService;
  33.         $this->imagesetService $imagesetService;
  34.         $this->logger $logger;
  35.         $this->storageLayer $storageLayer;
  36.     }
  37.     public static function getSubscribedEvents(): array
  38.     {
  39.         return [
  40.             PreviewImagePixelatedEvent::class => [
  41.                 ['onPreviewPhotoPixelatedCreateLiipImages'0],
  42.             ],
  43.             ContentVideoDeleteEvent::class => [
  44.                 ['onVideoDeleteRemovePreviews'9998],
  45.             ],
  46.             ContentPreviewsSelectedEvent::class => [
  47.                 ['removeExistingPreviewCacheFiles'9999],
  48.                 ['removeExistingPublicPreviewFiles'9998],
  49.                 ['onPreviewsSelectedCreateLiipImages'0],
  50.             ],
  51.         ];
  52.     }
  53.     public function onPreviewsSelectedCreateLiipImages(ContentPreviewsSelectedEvent $event)
  54.     {
  55.         $content $event->getEntity();
  56.         $numbers $event->getSelectedNumbers();
  57.         if ($video $content->getVideo()) {
  58.             $snapshots $this->snapshotService->getSnapshots($video);
  59.             $pos 1;
  60.             foreach ($numbers as $number) {
  61.                 $this->service->createPreviewPhotosFromSnapshot($video$snapshots[$number], $pos);
  62.                 $original $this->service->getPreviewPhoto($video$postrue);
  63.                 foreach (['preview_big''preview_small'] as $filter) {
  64.                     $this->service->getUrlForPhoto($original$filter);
  65.                 }
  66.                 ++$pos;
  67.             }
  68.         }
  69.         if ($imageset $content->getImageset()) {
  70.             $i 1;
  71.             foreach ($numbers as $pos => $imageId) {
  72.                 if ($image $this->imagesetService->getImagesetImageById($imageId)) {
  73.                     $this->service->createPreviewPhotosFromImagesetImage($imageset$image$i);
  74.                     $original $this->service->getPreviewPhoto($imageset$itrue);
  75.                     foreach (['previmg_big''previmg_small'] as $filter) {
  76.                         $this->service->getUrlForPhoto($original$filter);
  77.                     }
  78.                 } else {
  79.                     $this->logger->critical('Failed to find ImagesetImage with ID '.$imageId);
  80.                 }
  81.                 ++$i;
  82.             }
  83.         }
  84.     }
  85.     public function removeExistingPublicPreviewFiles(ContentPreviewsSelectedEvent $event)
  86.     {
  87.         $this->service->deletePreviewsForContent($event->getEntity());
  88.     }
  89.     public function removeExistingPreviewCacheFiles(ContentPreviewsSelectedEvent $event)
  90.     {
  91.         /**
  92.          * @var $abstract ContentTypeAbstract
  93.          */
  94.         $abstract $event->getEntity()->getContent();
  95.         $filters = ['preview_small''preview_big'];
  96.         if ($abstract instanceof ContentImageset) {
  97.             $filters = ['previmg_small''previmg_big'];
  98.         }
  99.         foreach ($this->service->getSoftcorePreviewPhotos($abstract) as $photo) {
  100.             foreach ($filters as $filter) {
  101.                 $this->service->removeCacheForPreviewPhoto($photo$filter);
  102.             }
  103.         }
  104.         foreach ($this->service->getHardcorePreviewPhotos($abstract) as $photo) {
  105.             foreach ($filters as $filter) {
  106.                 $this->service->removeCacheForPreviewPhoto($photo$filter);
  107.             }
  108.         }
  109.     }
  110.     public function onVideoDeleteRemovePreviews(ContentVideoDeleteEvent $event)
  111.     {
  112.         if ($content $event->getEntity()->getContent()) {
  113.             $this->service->deletePreviewsForContent($content);
  114.         }
  115.     }
  116.     public function onPreviewPhotoPixelatedCreateLiipImages(PreviewImagePixelatedEvent $event)
  117.     {
  118.         $filters = [
  119.             'preview_small',
  120.             'preview_big',
  121.         ];
  122.         if ($event->getEntity() instanceof ContentImageset) {
  123.             $filters = [
  124.                 'previmg_small',
  125.                 'previmg_big',
  126.             ];
  127.         }
  128.         $photo $event->getPreviewPhoto();
  129.         foreach ($filters as $filter) {
  130.             $this->service->removeCacheForPreviewPhoto($photo$filter);
  131.             $this->service->getUrlForPhoto($photo$filter);
  132.         }
  133.     }
  134. }