- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/helper/filter.php
- Класс: BitrixTasksHelperFilter
- Вызов: Filter::processUFFilter
private function processUFFilter(): array
{
$ufFilter = [];
$fieldsToSkipEmptyClearing = [];
$filters = $this->getFilters();
foreach ($filters as $fieldId => $filterRow)
{
if (!array_key_exists('uf', $filterRow) || !$filterRow['uf'])
{
continue;
}
switch ($filterRow['type'])
{
case 'crm':
case 'string':
$ufFilter["%{$fieldId}"] = $this->getFilterFieldData($fieldId);
break;
case 'date':
$data = $this->getDateFilterFieldData($filterRow);
if ($data)
{
$ufFilter = array_merge($ufFilter, $data);
}
break;
case 'number':
$data = $this->getNumberFilterFieldData($filterRow);
if ($data)
{
$ufFilter = array_merge($ufFilter, $data);
}
break;
case 'list':
$data = $this->getListFilterFieldData($filterRow);
if ($data)
{
$map = [
1 => null,
2 => 1,
];
$key = key($data);
$value = current($data);
if (array_key_exists($value, $map))
{
$data[$key] = $map[$value];
}
$ufFilter = array_merge($ufFilter, $data);
$fieldsToSkipEmptyClearing[] = $key;
}
break;
case 'dest_selector':
$data = $this->getSelectorFilterFieldData($filterRow);
if ($data)
{
$ufFilter = array_merge($ufFilter, $data);
}
break;
default:
break;
}
}
$ufFilter = array_filter(
$ufFilter,
static function ($value, $key) use ($fieldsToSkipEmptyClearing) {
return in_array($key, $fieldsToSkipEmptyClearing, true)
|| $value === '0'
|| !empty($value);
},
ARRAY_FILTER_USE_BOTH
);
return $ufFilter;
}