<?php declare(strict_types=1);namespace Shopware\Core\Profiling\Subscriber;use Shopware\Core\Content\Rule\RuleEntity;use Shopware\Core\Framework\Context;use Shopware\Core\Framework\DataAbstractionLayer\Entity;use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;use Shopware\Core\Framework\Log\Package;use Shopware\Core\Framework\Routing\Event\SalesChannelContextResolvedEvent;use Symfony\Bundle\FrameworkBundle\DataCollector\AbstractDataCollector;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\VarDumper\Cloner\Data;use Symfony\Contracts\Service\ResetInterface;/** * @internal */#[Package('core')]class ActiveRulesDataCollectorSubscriber extends AbstractDataCollector implements EventSubscriberInterface, ResetInterface{ private EntityRepositoryInterface $ruleRepository; /** * @var array<string> */ private array $ruleIds = []; public function __construct(EntityRepositoryInterface $ruleRepository) { $this->ruleRepository = $ruleRepository; } public static function getSubscribedEvents(): array { return [ SalesChannelContextResolvedEvent::class => 'onContextResolved', ]; } public function reset(): void { parent::reset(); $this->ruleIds = []; } /** * @return array<string, RuleEntity>|Data<string, RuleEntity> */ public function getData() { return $this->data; } public function getMatchingRuleCount(): int { if ($this->data instanceof Data) { return $this->data->count(); } return \count($this->data); } public function collect(Request $request, Response $response, ?\Throwable $exception = null): void { $this->data = $this->getMatchingRules(); } public static function getTemplate(): string { return '@Profiling/Collector/rules.html.twig'; } public function onContextResolved(SalesChannelContextResolvedEvent $event): void { $this->ruleIds = $event->getContext()->getRuleIds(); } /** * @return array<string, Entity> */ private function getMatchingRules(): array { if (empty($this->ruleIds)) { return []; } $criteria = new Criteria($this->ruleIds); return $this->ruleRepository->search($criteria, Context::createDefaultContext())->getElements(); }}