• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/discount/userconditioncontrol.php
  • Класс: BitrixMainDiscountUserConditionControl
  • Вызов: UserConditionControl::generateOrderConditions
static function generateOrderConditions(array $oneCondition, array $params, array $control, $values)
{
	$result = '';

	$logic = static::SearchLogic($values['logic'], $control['LOGIC']);
	if (!empty($logic['OP'][$control['MULTIPLE']]))
	{
		$joinOperator = '';
		$multi = false;
		if (isset($control['JS_VALUE']['multiple']) && $control['JS_VALUE']['multiple'] == 'Y')
		{
			$multi = true;
			$joinOperator = ($logic['MULTI_SEP'] ?? ' && ');
		}
		$field = $params['ORDER'].'[''.$control['FIELD'].'']';
		switch ($control['FIELD_TYPE'])
		{
			case 'int':
			case 'double':
				if (!$multi)
				{
					$result = str_replace(
						array('#FIELD#', '#VALUE#'),
						array($field, $values['value']),
						$logic['OP'][$control['MULTIPLE']]
					);
				}
				else
				{
					$list = array();
					foreach ($values['value'] as $item)
					{
						$list[] = str_replace(
							array('#FIELD#', '#VALUE#'),
							array($field, $item),
							$logic['OP'][$control['MULTIPLE']]
						);
					}
					$result = '(('.implode(')'.$joinOperator.'(', $list).'))';
					unset($list, $item);
				}
				break;
			case 'char':
			case 'string':
			case 'text':
				if (!$multi)
				{
					$result = str_replace(
						array('#FIELD#', '#VALUE#'),
						array($field, '"'.EscapePHPString($values['value']).'"'),
						$logic['OP'][$control['MULTIPLE']]
					);
				}
				else
				{
					$list = array();
					foreach ($values['value'] as $item)
					{
						$list[] = str_replace(
							array('#FIELD#', '#VALUE#'),
							array($field, '"'.EscapePHPString($item).'"'),
							$logic['OP'][$control['MULTIPLE']]
						);
					}
					$result = '(('.implode(')'.$joinOperator.'(', $list).'))';
					unset($list, $item);
				}
				break;
			case 'date':
			case 'datetime':
				if (!$multi)
				{
					$result = str_replace(
						array('#FIELD#', '#VALUE#'),
						array($field, $values['value']),
						$logic['OP'][$control['MULTIPLE']]
					);
				}
				else
				{
					$list = array();
					foreach ($values['value'] as $item)
					{
						$list[] = str_replace(
							array('#FIELD#', '#VALUE#'),
							array($field, $item),
							$logic['OP'][$control['MULTIPLE']]
						);
					}
					$result = '(('.implode(')'.$joinOperator.'(', $list).'))';
					unset($list, $item);
				}
				break;
		}
		if ($result !== '')
			$result = 'isset('.$field.') && '.$result;
	}

	return $result;
}