vendor/shopware/core/Checkout/Cart/RuleLoader.php line 33

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Checkout\Cart;
  3. use Shopware\Core\Content\Rule\RuleCollection;
  4. use Shopware\Core\Content\Rule\RuleEntity;
  5. use Shopware\Core\Framework\Context;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\RepositoryIterator;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  10. use Shopware\Core\Framework\Log\Package;
  11. use Shopware\Core\Framework\Plugin\Exception\DecorationPatternException;
  12. /**
  13.  * @internal
  14.  */
  15. #[Package('checkout')]
  16. class RuleLoader extends AbstractRuleLoader
  17. {
  18.     private EntityRepositoryInterface $repository;
  19.     public function __construct(EntityRepositoryInterface $repository)
  20.     {
  21.         $this->repository $repository;
  22.     }
  23.     public function getDecorated(): AbstractRuleLoader
  24.     {
  25.         throw new DecorationPatternException(self::class);
  26.     }
  27.     public function load(Context $context): RuleCollection
  28.     {
  29.         $criteria = new Criteria();
  30.         $criteria->addSorting(new FieldSorting('priority'FieldSorting::DESCENDING));
  31.         $criteria->addSorting(new FieldSorting('id'));
  32.         $criteria->setLimit(500);
  33.         $criteria->setTitle('cart-rule-loader::load-rules');
  34.         $repositoryIterator = new RepositoryIterator($this->repository$context$criteria);
  35.         $rules = new RuleCollection();
  36.         while (($result $repositoryIterator->fetch()) !== null) {
  37.             /** @var RuleEntity $rule */
  38.             foreach ($result->getEntities() as $rule) {
  39.                 if (!$rule->isInvalid() && $rule->getPayload()) {
  40.                     $rules->add($rule);
  41.                 }
  42.             }
  43.             if ($result->count() < 500) {
  44.                 break;
  45.             }
  46.         }
  47.         return $rules;
  48.     }
  49. }