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