• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/project/provider.php
  • Класс: BitrixTasksInternalsProjectProvider
  • Вызов: Provider::getQueryWithFilter
public function getQueryWithFilter(Query $query, array $filter, string $presetId): Query
{
	$filterValues = $filter;

	if (array_key_exists('ID', $filterValues))
	{
		$ids = (is_array($filterValues['ID']) ? $filterValues['ID'] : [$filterValues['ID']]);
		$ids = array_map('intval', $ids);
		$ids = array_filter($ids);

		if (!empty($ids))
		{
			count($ids) > 1
				? $query->whereIn('ID', $ids)
				: $query->where('ID', $ids[0])
			;
		}
		unset($filterValues['ID']);
	}

	if ($presetId)
	{
		$filterId = $this->getFilterId();
		$presets = $this->getPresets();

		if (array_key_exists($presetId, $presets))
		{
			$filterOptions = new Options($filterId, $presets);
			$filterSettings = (
				$filterOptions->getFilterSettings($presetId)
				?? $filterOptions->getDefaultPresets()[$presetId]
			);
			$filterValues = array_merge(
				$filterValues,
				Options::fetchFieldValuesFromFilterSettings($filterSettings, [], $this->getFilterSourceFields())
			);
		}
	}

	return $this->addQueryFilter($query, $filterValues);
}