custom/plugins/BlurElysiumSlider/src/Subscriber/CacheInvalidationSubscriber.php line 22

  1. <?php
  2. declare(strict_types=1);
  3. namespace Blur\BlurElysiumSlider\Subscriber;
  4. use Shopware\Core\Framework\Adapter\Cache\CacheInvalidator;
  5. use Doctrine\DBAL\Connection;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator;
  7. use Blur\BlurElysiumSlider\Core\Content\ElysiumSlides\ElysiumSlidesDefinition;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenContainerEvent;
  9. class CacheInvalidationSubscriber
  10. {
  11.     public function __construct(
  12.         private readonly CacheInvalidator $cacheInvalidator,
  13.         private readonly Connection $connection,
  14.     ) {
  15.     }
  16.     public function invalidateCmsPageIds(EntityWrittenContainerEvent $event): void
  17.     {
  18.         $slideIds $event->getPrimaryKeys(ElysiumSlidesDefinition::ENTITY_NAME);
  19.         if (!empty($slideIds)) {
  20.             $cmsPageIds $this->connection->fetchFirstColumn(
  21.                 'SELECT DISTINCT LOWER(HEX(cms_section.cms_page_id)) AS cms_page_id
  22.                 FROM cms_slot
  23.                 JOIN cms_block ON cms_block.id = cms_slot.cms_block_id
  24.                 JOIN cms_section ON cms_section.id = cms_block.cms_section_id
  25.                 WHERE cms_slot.type = :banner OR cms_slot.type = :slider
  26.                 ORDER BY cms_page_id',
  27.                 [
  28.                     'banner' => 'blur-elysium-banner',
  29.                     'slider' => 'blur-elysium-slider',
  30.                 ]
  31.             );
  32.             if (!empty($cmsPageIds)) {
  33.                 $ids array_map(EntityCacheKeyGenerator::buildCmsTag(...), $cmsPageIds);
  34.                 $this->cacheInvalidator->invalidate($ids);
  35.             }
  36.         }
  37.     }
  38. }