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