<?php
namespace App\EventListener\PreDelete;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Entity\Popup;
use App\Repository\PopupRepository;
use App\Service\Media\MediaQueueRemover;
use App\Service\Redis\CacheRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class PopupPreDeleteListener implements EventSubscriberInterface
{
private $cacheRepository;
private $popupRepository;
private $mediaQueueRemover;
public function __construct(
CacheRepository $cacheRepository,
MediaQueueRemover $mediaQueueRemover,
PopupRepository $popupRepository
) {
$this->cacheRepository = $cacheRepository;
$this->popupRepository = $popupRepository;
$this->mediaQueueRemover = $mediaQueueRemover;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => ['preDelete', EventPriorities::PRE_WRITE],
];
}
public function preDelete(ViewEvent $event)
{
$popup = $event->getControllerResult();
if (!$popup instanceof Popup || $event->getRequest()->getMethod() !== Request::METHOD_DELETE) {
return;
}
$media = $popup->getMedia();
if (null !== $media && empty($this->popupRepository->findByPopupMedia($popup))) {
$this->mediaQueueRemover->addToQueue($media);
}
$this->cacheRepository->removeSitePopup($popup);
}
}