Files
kupshop/bundles/KupShop/OrderDiscountBundle/Triggers/UserGroupTrigger.php
2025-08-02 16:30:27 +02:00

75 lines
1.9 KiB
PHP

<?php
namespace KupShop\OrderDiscountBundle\Triggers;
use KupShop\KupShopBundle\Context\UserContext;
use KupShop\KupShopBundle\Query\JsonOperator;
use KupShop\OrderingBundle\Entity\Purchase\PurchaseState;
use Query\Operator;
class UserGroupTrigger extends AbstractTrigger
{
protected static $type = 'user_group';
protected static $position = 62;
protected $adminTemplate = 'triggers/user_group.tpl';
/** @var UserContext */
private $userContext;
/**
* @return $this
*
* @required
*/
public function setUserContext(UserContext $userContext)
{
$this->userContext = $userContext;
return $this;
}
public function getDiscountFilterSpec(PurchaseState $purchaseState)
{
$specs = [
Operator::equals(['odt.type' => static::getType()]),
];
$orSpecs = [];
foreach ($this->getUserGroups() as $id => $_) {
$orSpecs[] = JsonOperator::contains('odt.data', 'groups', $id);
}
$specs[] = Operator::orX(
Operator::andX(
Operator::orX($orSpecs),
JsonOperator::contains('odt.data', 'groups_invert', 'invert')
),
Operator::andX(
Operator::not(Operator::orX($orSpecs)),
Operator::not(JsonOperator::contains('odt.data', 'groups_invert', 'invert'))
)
);
return Operator::andX($specs);
}
public function handleData($data)
{
$data['groups'] = array_map('intval', $data['groups']);
return $data;
}
protected function getVars($vars): array
{
$vars['user_groups'] = sqlQuery('SELECT id, name FROM users_groups')->fetchAll();
return $vars;
}
private function getUserGroups(): array
{
return $this->userContext->getActive()?->getGroups() ?: [0 => ''];
}
}