• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/rest/controllers/task.php
  • Класс: BitrixTasksRestControllersTask
  • Вызов: Task::listAction
public function listAction(
	array $filter = [],
	array $select = [],
	array $group = [],
	array $order = [],
	array $params = [],
	PageNavigation $pageNavigation = null
): ?EngineResponseDataTypePage
{
	if (!$this->checkOrderKeys($order))
        {
            $this->addError(new Error(GetMessage('TASKS_FAILED_WRONG_ORDER_FIELD')));

            return null;
        }

	$preparedSelect = $this->prepareSelect($select);
	$preparedFilter = $this->prepareFilter($filter, $select, $params);
	$navParams = $this->prepareNavParams($pageNavigation, $params);

	$getListParams = [
		'select' => $preparedSelect,
		'legacyFilter' => ($preparedFilter ?: []),
		'order' => ($order ?: []),
		'group' => ($group ?: []),
		'NAV_PARAMS' => $navParams,
	];

	$params['PUBLIC_MODE'] = 'Y'; // VERY VERY BAD HACK! DONT REPEAT IT !
	$params['USE_MINIMAL_SELECT_LEGACY'] = 'N'; // VERY VERY BAD HACK! DONT REPEAT IT !
	$params['RETURN_ACCESS'] = ($params['RETURN_ACCESS'] ?? 'N'); // VERY VERY BAD HACK! DONT REPEAT IT !.. too late
	$params['DISTINCT'] = true;

	try
	{
		$result = ManagerTask::getList($this->getCurrentUser()->getId(), $getListParams, $params);
	}
	catch (Exception $exception)
	{
		$this->addError(new Error($exception->getMessage()));

		return null;
	}

	$tasks = array_values($result['DATA']);
	$tasks = $this->fillGroupInfo($tasks, $params);
	$tasks = $this->fillUserInfo($tasks);

	if (array_key_exists('WITH_RESULT_INFO', $params))
	{
		$tasks = $this->fillResultInfo($tasks);
	}
	if (array_key_exists('WITH_TIMER_INFO', $params))
	{
		$tasks = $this->fillWithTimerInfo($tasks);
	}
	if (array_key_exists('WITH_PARSED_DESCRIPTION', $params))
	{
		$tasks = $this->fillWithParsedDescription($tasks);
	}
	if (in_array('COUNTERS', $select, true))
	{
		$tasks = $this->fillCounterInfo($tasks);
	}
	if (in_array('TAGS', $select, true))
	{
		$tasks = $this->fillWithTags($tasks);
	}

	foreach ($tasks as &$task)
	{
		if (array_key_exists('STATUS', $task))
		{
			$task['SUB_STATUS'] = $task['STATUS'];
			$task['STATUS'] = $task['REAL_STATUS'];
			unset($task['REAL_STATUS']);
		}
		if (isset($task['DESCRIPTION']))
		{
			$task['DESCRIPTION'] = htmlspecialchars_decode($task['DESCRIPTION'], ENT_QUOTES);
		}

		$this->formatDateFieldsForOutput($task);
		$task = $this->convertKeysToCamelCase($task);
	}
	unset($task);

	return new EngineResponseDataTypePage(
		'tasks',
		$tasks,
		static function() use ($result) {
			 return $result['AUX']['OBJ_RES']->NavRecordCount;
		}
	);
}