• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discountcouponsmanagerbase.php
  • Класс: BitrixSaleDiscountCouponsManagerBase
  • Вызов: DiscountCouponsManagerBase::filterCoupons
static function filterCoupons($filter, $getId = false)
{
	$getId = ($getId === true);
	$result = array();
	if (empty(self::$coupons) || empty($filter) || !is_array($filter))
		return $result;

	foreach (self::$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] = ($getId ? $data['ID'] : $data);
		}
	}
	return $result;
}