<?php
namespace ImageBundle\EventListener;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Doctrine\ORM\EntityManager;
use ImageBundle\Service\ImageService;
class KernelTerminateListener
{
private $em;
private $imageService;
public function __construct(EntityManager $em, ImageService $imageService)
{
$this->em = $em;
$this->imageService = $imageService;
}
public function onKernelTerminate(KernelEvent $event)
{
if (!$this->imageService->isCacheOptimizationEnabled()) {
return;
}
$request = $event->getRequest();
try {
$routeName = $request->get('_route');
if ("liip_imagine_filter" != $routeName) {
return;
}
$path = $request->getPathInfo();
$imageId = $this->extractImageIdFromPath($path);
$filter = $this->extractFilterFromPath($path);
if ($imageId && $filter) {
$image = $this->em->getRepository("ImageBundle:Image")->find($imageId);
if ($image) {
$cacheStatus = json_decode($image->getCacheStatusJson(), true);
if (!is_array($cacheStatus)) {
$cacheStatus = [];
}
$cacheStatus[$filter] = true;
$image->setCacheStatusJson(json_encode($cacheStatus));
$this->em->flush();
}
}
}
catch (\Exception $e) {}
}
protected function extractImageIdFromPath($path)
{
$parts = explode("/", $path);
if (count($parts) < 2) {
return false;
}
$imageId = $parts[ count($parts) - 2 ];
return $imageId;
}
protected function extractFilterFromPath($path)
{
$parts = explode("/", $path);
if (count($parts) < 3) {
return false;
}
$filter = $parts[ count($parts) - 3 ];
return $filter;
}
}