• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/integration/crm/connectors/helper.php
  • Класс: Bitrix\Sender\Integration\Crm\Connectors\Helper
  • Вызов: Helper::getFilterByFields
static function getFilterByFields(array $fields = array(), array $values = array(), $entityTypeName = '')
{
	if ($entityTypeName)
	{
		if (!empty(self::$runtimeByEntity[$entityTypeName]))
		{
			self::$runtimeByEntity[$entityTypeName] = [];
		}
	}
	else
	{
		self::$runtimeByEntity = [];
	}

	$filter = array();
	foreach ($fields as $field)
	{
		if (!self::isFieldFilterable($field, $values))
		{
			continue;
		}

		$isMultiple = false;
		if (isset($field['params']) && is_array($field['params']))
		{
			if (isset($field['params']['multiple']) && $field['params']['multiple'])
			{
				$isMultiple = true;
			}
		}

		$id = $field['id'];
		$value = $values[$id];
		$value = $isMultiple && !is_array($value) ? array($value) :
			($value === "" ? null:$value);

		if($isMultiple)
		{
			foreach($value as &$val)
			{
				if($val === "")
				{
					$val = null;
				}
			}
		}

		$field['value'] = $value;

		if ($field['filter_callback'] ?? false)
		{
			$extraCallbackParams = [
				'FIELD' => $field,
				'ENTITY_TYPE_NAME' => $entityTypeName
			];
			call_user_func_array($field['filter_callback'], [$value, &$filter, $extraCallbackParams]);
			continue;
		}

		$filterKey = self::getFilterFieldKey($field);
		if (is_array($filterKey))
		{
			foreach ($filterKey as $fieldValue => $fieldFilter)
			{
				if ($value !== $fieldValue)
				{
					continue;
				}

				$filter[$fieldFilter[0]] = $fieldFilter[1];
			}
		}
		elseif (self::isFieldTypeFilter($field['type']))
		{
			self::setFieldTypeFilter($filterKey, $field, $filter);
			self::processRuntimeFilter($filter, $entityTypeName);
		}
		else
		{
			$filter[$filterKey] = $value;
		}
	}

	return $filter;
}