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

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. }