<?php declare(strict_types=1);namespace Shopware\Core\Checkout\Cart;use Shopware\Core\Content\Rule\RuleCollection;use Shopware\Core\Content\Rule\RuleEntity;use Shopware\Core\Framework\Context;use Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\RepositoryIterator;use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;use Shopware\Core\Framework\Log\Package;use Shopware\Core\Framework\Plugin\Exception\DecorationPatternException;/** * @internal */#[Package('checkout')]class RuleLoader extends AbstractRuleLoader{ private EntityRepositoryInterface $repository; public function __construct(EntityRepositoryInterface $repository) { $this->repository = $repository; } public function getDecorated(): AbstractRuleLoader { throw new DecorationPatternException(self::class); } public function load(Context $context): RuleCollection { $criteria = new Criteria(); $criteria->addSorting(new FieldSorting('priority', FieldSorting::DESCENDING)); $criteria->addSorting(new FieldSorting('id')); $criteria->setLimit(500); $criteria->setTitle('cart-rule-loader::load-rules'); $repositoryIterator = new RepositoryIterator($this->repository, $context, $criteria); $rules = new RuleCollection(); while (($result = $repositoryIterator->fetch()) !== null) { /** @var RuleEntity $rule */ foreach ($result->getEntities() as $rule) { if (!$rule->isInvalid() && $rule->getPayload()) { $rules->add($rule); } } if ($result->count() < 500) { break; } } return $rules; }}