<?php declare(strict_types=1);namespace Shopware\Core\Framework\Adapter\Translation;use Doctrine\DBAL\Connection;use Shopware\Core\Framework\Adapter\Cache\CacheInvalidator;use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;use Shopware\Core\Framework\Log\Package;use Shopware\Core\System\Snippet\Aggregate\SnippetSet\SnippetSetDefinition;use Shopware\Core\System\Snippet\SnippetDefinition;use Shopware\Core\System\Snippet\SnippetEvents;use Symfony\Component\EventDispatcher\EventSubscriberInterface;/** * @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0 */#[Package('core')]class TranslatorCacheInvalidate implements EventSubscriberInterface{ private Connection $connection; private CacheInvalidator $cacheInvalidator; /** * @internal */ public function __construct(CacheInvalidator $cacheInvalidator, Connection $connection) { $this->connection = $connection; $this->cacheInvalidator = $cacheInvalidator; } public static function getSubscribedEvents(): array { return [ SnippetEvents::SNIPPET_WRITTEN_EVENT => 'invalidate', SnippetEvents::SNIPPET_DELETED_EVENT => 'invalidate', SnippetEvents::SNIPPET_SET_DELETED_EVENT => 'invalidate', ]; } public function invalidate(EntityWrittenEvent $event): void { if ($event->getEntityName() === SnippetSetDefinition::ENTITY_NAME) { $this->clearCache($event->getIds()); return; } if ($event->getEntityName() === SnippetDefinition::ENTITY_NAME) { $snippetIds = $event->getIds(); $setIds = $this->connection->fetchFirstColumn( 'SELECT LOWER(HEX(snippet_set_id)) FROM snippet WHERE HEX(id) IN (:ids)', ['ids' => $snippetIds], ['ids' => Connection::PARAM_STR_ARRAY] ); $this->clearCache($setIds); } } /** * @param array<string> $snippetSetIds */ private function clearCache(array $snippetSetIds): void { $snippetSetIds = array_unique($snippetSetIds); $snippetSetCacheKeys = array_map(function (string $setId) { return 'translation.catalog.' . $setId; }, $snippetSetIds); $this->cacheInvalidator->invalidate($snippetSetCacheKeys, true); }}