<?php declare(strict_types=1);
namespace Rhiem\RhiemUserProducts\Subscriber;
use Rhiem\RhiemUserProducts\Entities\ProductGroup\ProductGroupEntity;
use Rhiem\RhiemUserProducts\RhiemUserProducts;
use Shopware\Core\Content\Category\Event\CategoryRouteCacheKeyEvent;
use Shopware\Core\Content\Product\Events\ProductListingRouteCacheKeyEvent;
use Shopware\Core\Content\Product\Events\ProductListingRouteCacheTagsEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class Cache implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
ProductListingRouteCacheKeyEvent::class => 'onProductListingRouteCacheKeyEvent',
ProductListingRouteCacheTagsEvent::class => 'onProductListingRouteCacheTagsEvent',
CategoryRouteCacheKeyEvent::class => 'onCategoryRouteCacheKeyEvent',
];
}
public function onProductListingRouteCacheKeyEvent(ProductListingRouteCacheKeyEvent $event)
{
$parts = $event->getParts();
$context = $event->getContext();
if ($context->getCustomer()) {
$productGroup = $context->getCustomer()->getExtension('rhiem_product_group_id');
if ($productGroup instanceof ProductGroupEntity) {
$productGroupId = $productGroup->getId();
} else {
$productGroupId = RhiemUserProducts::FALLBACK_PRODUCT_GROUP_ID;
}
} else {
$productGroupId = RhiemUserProducts::FALLBACK_PRODUCT_GROUP_ID;
}
array_push($parts, md5(json_encode([$productGroupId])));
$event->setParts($parts);
}
public function onProductListingRouteCacheTagsEvent(ProductListingRouteCacheTagsEvent $event)
{
$tags = $event->getTags();
$context = $event->getContext();
if ($context->getCustomer()) {
$productGroup = $context->getCustomer()->getExtension('rhiem_product_group_id');
if ($productGroup instanceof ProductGroupEntity) {
$productGroupId = $productGroup->getId();
} else {
$productGroupId = RhiemUserProducts::FALLBACK_PRODUCT_GROUP_ID;
}
} else {
$productGroupId = RhiemUserProducts::FALLBACK_PRODUCT_GROUP_ID;
}
array_push($tags, md5(json_encode([$productGroupId])));
}
public function onCategoryRouteCacheKeyEvent(CategoryRouteCacheKeyEvent $event){
$parts = $event->getParts();
$context = $event->getContext();
if ($context->getCustomer()) {
$productGroup = $context->getCustomer()->getExtension('rhiem_product_group_id');
if ($productGroup instanceof ProductGroupEntity) {
$productGroupId = $productGroup->getId();
} else {
$productGroupId = RhiemUserProducts::FALLBACK_PRODUCT_GROUP_ID;
}
} else {
$productGroupId = RhiemUserProducts::FALLBACK_PRODUCT_GROUP_ID;
}
array_push($parts, md5(json_encode([$productGroupId])));
$event->setParts($parts);
}
}