<?php
namespace App\Subscriber\Content;
use App\Event\Content\ImagesetImageDeleteEvent;
use App\Service\Content\ImagesetService;
use Liip\ImagineBundle\Service\FilterService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ImagesetImageSubscriber implements EventSubscriberInterface
{
protected ImagesetService $imagesetService;
/**
* @var string[]
*/
protected array $filters = [
'photos',
'thumbs',
];
protected FilterService $filterService;
/**
* ImagesetImageSubscriber constructor.
*/
public function __construct(ImagesetService $imagesetService, FilterService $filterService)
{
$this->imagesetService = $imagesetService;
$this->filterService = $filterService;
}
public static function getSubscribedEvents(): array
{
return [
ImagesetImageDeleteEvent::class => [
['onImageDeletedRemoveFiles', 0],
['onImageDeletedBustCache', 0],
['onImageDeletedRecuceNumberOfPicsFlag', 1],
],
];
}
/**
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onImageDeletedRecuceNumberOfPicsFlag(ImagesetImageDeleteEvent $event)
{
$imageset = $event->getEntity()->getContentImageset();
$imageset->setPics($imageset->getPics() - 1);
$this->imagesetService->storeEntity($imageset);
}
public function onImageDeletedRemoveFiles(ImagesetImageDeleteEvent $event)
{
$image = $event->getEntity();
$content = $image->getContentImageset()->getContent();
$largeFile = $this->imagesetService->getSourceFile($content->getId(), $image->getId());
if (is_file($largeFile)) {
unlink($largeFile);
}
$this->imagesetService->deleteImageFiltersInStorage($image);
}
public function onImageDeletedBustCache(ImagesetImageDeleteEvent $event)
{
$image = $event->getEntity();
foreach ($this->filters as $filter) {
$this->imagesetService->bustCacheForImagesetImage($image, $filter);
}
}
}