/
ShippingStreetRule.php
67 lines (54 loc) · 1.94 KB
/
ShippingStreetRule.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
62
63
64
65
66
67
<?php declare(strict_types=1);
namespace Shopware\Core\Checkout\Customer\Rule;
use Shopware\Core\Checkout\CheckoutRuleScope;
use Shopware\Core\Framework\Log\Package;
use Shopware\Core\Framework\Rule\Exception\UnsupportedValueException;
use Shopware\Core\Framework\Rule\Rule;
use Shopware\Core\Framework\Rule\RuleComparison;
use Shopware\Core\Framework\Rule\RuleConfig;
use Shopware\Core\Framework\Rule\RuleConstraints;
use Shopware\Core\Framework\Rule\RuleScope;
#[Package('services-settings')]
class ShippingStreetRule extends Rule
{
final public const RULE_NAME = 'customerShippingStreet';
/**
* @internal
*/
public function __construct(
protected string $operator = self::OPERATOR_EQ,
protected ?string $streetName = null
) {
parent::__construct();
}
public function match(RuleScope $scope): bool
{
if (!$scope instanceof CheckoutRuleScope) {
return false;
}
if (!$location = $scope->getSalesChannelContext()->getShippingLocation()->getAddress()) {
return RuleComparison::isNegativeOperator($this->operator);
}
if (!\is_string($this->streetName) && $this->operator !== self::OPERATOR_EMPTY) {
throw new UnsupportedValueException(\gettype($this->streetName), self::class);
}
return RuleComparison::string($location->getStreet(), $this->streetName ?? '', $this->operator);
}
public function getConstraints(): array
{
$constraints = [
'operator' => RuleConstraints::stringOperators(),
];
if ($this->operator === self::OPERATOR_EMPTY) {
return $constraints;
}
$constraints['streetName'] = RuleConstraints::string();
return $constraints;
}
public function getConfig(): RuleConfig
{
return (new RuleConfig())
->operatorSet(RuleConfig::OPERATOR_SET_STRING, true)
->stringField('streetName');
}
}