- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discountcouponsmanagerbase.php
- Класс: BitrixSaleDiscountCouponsManagerBase
- Вызов: DiscountCouponsManagerBase::filterArrayCoupons
static function filterArrayCoupons(&$coupons, $filter)
{
if (empty($coupons) || !is_array($coupons) || empty($filter) || !is_array($filter))
return;
$result = array();
foreach ($coupons as $id => $data)
{
$copy = true;
foreach ($filter as $filterKey => $filterValue)
{
if (is_array($filterValue) && isset($filterValue['LOGIC']))
{
$logic = mb_strtolower($filterValue['LOGIC']);
if ($logic != 'and' && $logic != 'or')
break 2;
unset($filterValue['LOGIC']);
if (empty($filterValue))
break 2;
$subresult = array();
foreach ($filterValue as $subfilterKey => $subfilterValue)
{
$invert = strncmp($subfilterKey, '!', 1) == 0;
$fieldName = ($invert? mb_substr($subfilterKey, 1) : $subfilterKey);
if (!isset($data[$fieldName]))
{
break 3;
}
else
{
$compare = (is_array($subfilterValue) ? in_array($data[$fieldName], $subfilterValue) : $data[$fieldName] == $subfilterValue);
if ($invert)
$compare = !$compare;
$subresult[] = $compare;
}
}
$compare = (
$logic == 'and'
? !in_array(false, $subresult, true)
: in_array(true, $subresult, true)
);
if (!$compare)
{
$copy = false;
break;
}
}
else
{
$invert = strncmp($filterKey, '!', 1) == 0;
$fieldName = ($invert? mb_substr($filterKey, 1) : $filterKey);
if (!isset($data[$fieldName]))
{
break 2;
}
else
{
$compare = (is_array($filterValue) ? in_array($data[$fieldName], $filterValue) : $data[$fieldName] == $filterValue);
if ($invert)
$compare = !$compare;
if (!$compare)
{
$copy = false;
break;
}
}
}
}
if ($copy)
$result[$id] = $data;
}
$coupons = $result;
unset($result);
}