• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discount/actions.php
  • Класс: BitrixSaleDiscountActions
  • Вызов: Actions::getBasketForApply
static function getBasketForApply(array $basket, $filter, $action = array())
{
	$result = array();
	switch (static::getUseMode())
	{
		case self::MODE_CALCULATE:
			$result = (is_callable($filter) ? array_filter($basket, $filter) : $basket);
			break;
		case self::MODE_MANUAL:
		case self::MODE_MIXED:
			switch (static::getApplyResultMode())
			{
				case self::APPLY_RESULT_MODE_COUNTER:
					$currentCounter = static::getApplyCounter();
					$basketCodeList = array_keys($basket);
					foreach ($basketCodeList as &$code)
					{
						if (empty(self::$applyResult['BASKET'][$code]) || !is_array(self::$applyResult['BASKET'][$code]))
							continue;
						if (!in_array($currentCounter, self::$applyResult['BASKET'][$code]))
							continue;
						$result[$code] = $basket[$code];
					}
					unset($code, $basketCodeList, $currentCounter);
					break;
				case self::APPLY_RESULT_MODE_DESCR:
					$basketCodeList = array_keys($basket);
					foreach ($basketCodeList as &$code)
					{
						if (empty(self::$applyResult['BASKET'][$code]) || !is_array(self::$applyResult['BASKET'][$code]))
							continue;
						foreach (self::$applyResult['BASKET'][$code] as $descr)
						{
							if (static::compareBasketResultDescr($action, $descr))
							{
								$result[$code] = $basket[$code];
								break;
							}
						}
						unset($descr);
						// only for old format simple gifts
						if (!isset($result[$code]))
						{
							if (isset($action['GIFT_TITLE']))
							{
								end(self::$applyResult['BASKET'][$code]);
								$descr = current(self::$applyResult['BASKET'][$code]);
								if (
									$descr['TYPE'] == Formatter::TYPE_SIMPLE
									&& $descr['DESCR'] == $action['GIFT_TITLE']
								)
									$result[$code] = $basket[$code];
								unset($descr);
							}
						}
					}
					unset($code, $basketCodeList);
					break;
				case self::APPLY_RESULT_MODE_SIMPLE:
					$basketCodeList = array_keys($basket);
					foreach ($basketCodeList as &$code)
					{
						if (isset(self::$applyResult['BASKET'][$code]))
							$result[$code] = $basket[$code];
					}
					unset($code, $basketCodeList);
					break;
			}
			break;
	}

	return $result;
}