<?php
namespace Elements\Bundle\CacheHelperBundle\EventListener;
use Elements\Bundle\CacheHelperBundle\Service\CacheTagService;
use Pimcore\Bundle\CoreBundle\EventListener\Traits\EnabledTrait;
use Pimcore\Cache;
use Pimcore\Event\DocumentEvents;
use Pimcore\Event\Model\ElementEventInterface;
use Pimcore\Model\Document\Page;
use Pimcore\Model\Document\PageSnippet;
use Pimcore\Model\Document\Snippet;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class DocumentListener implements EventSubscriberInterface
{
use EnabledTrait;
private $cacheTagService;
public function __construct(CacheTagService $cacheTagService)
{
$this->cacheTagService = $cacheTagService;
}
public static function getSubscribedEvents()
{
return [
DocumentEvents::POST_ADD => "onSave",
DocumentEvents::POST_UPDATE => "onSave",
];
}
public function onSave(ElementEventInterface $event) {
if (!$this->hasPassedPrecondition($event)) {
return;
}
$defaultDocumentTag = $this->cacheTagService->getDocumentCacheTag($event->getElement()->getId());
Cache::clearTag($defaultDocumentTag); //clear the cache for documents or snippets.
}
private function hasPassedPrecondition(ElementEventInterface $event) : bool {
$element = $event->getElement();
if ($element instanceof Page || $element instanceof Snippet || $element instanceof PageSnippet) {
return true;
} else {
return false;
}
}
}