-
Notifications
You must be signed in to change notification settings - Fork 967
/
RuleCollection.php
61 lines (52 loc) · 1.62 KB
/
RuleCollection.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php declare(strict_types=1);
namespace Shopware\Core\Content\Rule;
use Shopware\Core\Checkout\Cart\Cart;
use Shopware\Core\Checkout\Cart\Rule\CartRuleScope;
use Shopware\Core\Framework\DataAbstractionLayer\EntityCollection;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
/**
* @method void add(RuleEntity $entity)
* @method void set(string $key, RuleEntity $entity)
* @method RuleEntity[] getIterator()
* @method RuleEntity[] getElements()
* @method RuleEntity|null get(string $key)
* @method RuleEntity|null first()
* @method RuleEntity|null last()
*/
class RuleCollection extends EntityCollection
{
public function filterMatchingRules(Cart $cart, SalesChannelContext $context)
{
return $this->filter(
function (RuleEntity $rule) use ($cart, $context) {
return $rule->getPayload()->match(new CartRuleScope($cart, $context));
}
);
}
public function sortByPriority(): void
{
$this->sort(function (RuleEntity $a, RuleEntity $b) {
return $b->getPriority() <=> $a->getPriority();
});
}
public function equals(RuleCollection $rules): bool
{
if ($this->count() !== $rules->count()) {
return false;
}
foreach ($this->elements as $element) {
if (!$rules->has($element->getId())) {
return false;
}
}
return true;
}
public function getApiAlias(): string
{
return 'rule_collection';
}
protected function getExpectedClass(): string
{
return RuleEntity::class;
}
}