• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/rest/controllers/task.php
  • Класс: BitrixTasksRestControllersTask
  • Вызов: Task::prepareFilter
private function prepareFilter(array $filter, array $select, array $params): array
{
	$filter = (!empty($filter) ? $filter : []);

	$userId = ($filter['MEMBER'] ?? $this->getCurrentUser()->getId());
	$roleId = (array_key_exists('ROLE', $filter) ? $filter['ROLE'] : '');

	$filter = $this->processFilterSearchIndex($filter);
	$filter = $this->processFilterWithoutDeadline($filter);
	$filter = $this->processFilterNotViewed($filter, $userId, $roleId);
	$filter = $this->processFilterRoleId($filter, $userId, $roleId);

	$getUf = ($this->isUfExist($select) || $this->isUfExist(array_keys($filter)));
	$dateFields = $this->getDateFields($getUf);

	foreach ($filter as $fieldName => $fieldData)
	{
		preg_match('#(w+)#', $fieldName, $m);
		if (
			array_key_exists($m[1], $dateFields)
			&& is_string($fieldData)
		)
		{
			$filter[$fieldName] = DateTime::createFromTimestamp(strtotime($fieldData));
		}
	}

	if (isset($params['SIFT_THROUGH_FILTER']))
	{
		/** @var Filter $filterInstance */
		$isSprintKanban = (($params['SIFT_THROUGH_FILTER']['sprintKanban'] ?? null) === 'Y');
		if ($isSprintKanban)
		{
			$taskService = new TaskService($params['SIFT_THROUGH_FILTER']['userId']);
			$filterInstance = $taskService->getFilterInstance(
				$params['SIFT_THROUGH_FILTER']['groupId'],
				($params['SIFT_THROUGH_FILTER']['isCompletedSprint'] === 'Y' ? 'complete' : 'active')
			);
		}
		else
		{
			$filterInstance = Filter::getInstance(
				$params['SIFT_THROUGH_FILTER']['userId'],
				$params['SIFT_THROUGH_FILTER']['groupId']
			);
			if ($presetId = ($params['SIFT_THROUGH_FILTER']['presetId'] ?? ''))
			{
				$filterValues = [];
				if (array_key_exists($presetId, $filterInstance->getAllPresets()))
				{
					$filterOptions = $filterInstance->getOptions();
					$filterSettings = (
						$filterOptions->getFilterSettings($presetId)
						?? $filterOptions->getDefaultPresets()[$presetId]
					);
					$sourceFields = $filterInstance->getFilters();
					$filterValues = Options::fetchFieldValuesFromFilterSettings($filterSettings, [], $sourceFields);
				}
				$filterInstance->setFilterData($filterValues);
			}
		}

		$filter = array_merge($filter, $filterInstance->process());
		unset($filter['ONLY_ROOT_TASKS']);
	}

	return $filter;
}