- Модуль: 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;
}