• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/controllers/epic.php
  • Класс: BitrixTasksScrumControllersEpic
  • Вызов: Epic::getTasksListAction
public function getTasksListAction()
{
	$post = $this->request->getPostList()->toArray();

	$groupId = (is_numeric($post['groupId']) ? (int) $post['groupId'] : 0);
	$epicId = (is_numeric($post['epicId']) ? (int) $post['epicId'] : 0);

	$userId = UtilUser::getId();

	$gridId = (is_string($post['gridId'] ) ? $post['gridId'] : '');
	$completed = ($post['completed'] === 'Y');

	$isGridRequest = ($this->request->get('grid_id') != null);

	$nav = new PageNavigation('tasks-lists-navigation');
	$nav->setPageSize(10)->initFromUri();

	$gridOptions = new GridOptions($gridId);

	$gridVisibleColumns = $gridOptions->getVisibleColumns();
	if (empty($gridVisibleColumns))
	{
		$gridVisibleColumns = ['NAME', 'STORY_POINTS', 'RESPONSIBLE'];
	}

	$epicService = new EpicService($userId);
	$taskService = new TaskService($userId);
	$itemService = new ItemService();
	$userService = new UserService();

	$epic = $epicService->getEpic($epicId);
	if (!$epic->getId())
	{
		$this->errorCollection->add(
			[
				new Error(Loc::getMessage('TASKS_EC_ERROR_COULD_NOT_READ_EPIC'))
			]
		);

		return null;
	}

	$filter = [
		'GROUP_ID' => $groupId,
		'::SUBFILTER-EPIC' => ['EPIC' => $epic->getId()],
		'CHECK_PERMISSIONS' => 'Y',
		'ONLY_ROOT_TASKS' => 'N',
		'SCRUM_TASKS' => 'Y',
	];
	if ($completed)
	{
		$filter['=STATUS'] = Status::COMPLETED;
	}

	$taskIds = $taskService->getTaskIdsByFilter($filter, $nav);

	(new BitrixTasksAccessAccessCacheLoader())->preload($userId, $taskIds);

	$itemsStoryPoints = $itemService->getItemsStoryPointsBySourceId($taskIds);

	$randomGenerator = new RandomSequence(rand());

	$rows = [];

	foreach ($taskIds as $taskId)
	{
		$task = TaskRegistry::getInstance()->get($taskId);
		if (!$task)
		{
			continue;
		}

		$columns = [];
		if (in_array('NAME', $gridVisibleColumns))
		{
			$columns['NAME'] = $this->getTaskNameColumn($taskId, $task['TITLE']);
		}
		if (in_array('STORY_POINTS', $gridVisibleColumns))
		{
			$columns['STORY_POINTS'] = $itemsStoryPoints[$taskId] ?? '';
		}
		if (in_array('RESPONSIBLE', $gridVisibleColumns))
		{
			$usersInfo = $userService->getInfoAboutUsers([$task['RESPONSIBLE_ID']]);
			$columns['RESPONSIBLE'] = $this->getUserColumn($usersInfo);
		}

		$rows[] = [
			'id' => $taskId . $randomGenerator->randString(2),
			'columns' => $columns,
		];
	}

	if (empty($rows))
	{
		return '';
	}

	$component = new Component('bitrix:main.ui.grid', '', [
		'GRID_ID' => $gridId,
		'COLUMNS' => $this->getUiTasksGridColumns(),
		'ROWS' => $rows,
		'NAV_OBJECT' => $nav,
		'NAV_PARAMS' => ['SHOW_ALWAYS' => false],
		'SHOW_PAGINATION' => true,
		'SHOW_TOTAL_COUNTER' => false,
		'SHOW_CHECK_ALL_CHECKBOXES' => false,
		'SHOW_ROW_CHECKBOXES' => false,
		'SHOW_SELECTED_COUNTER' => false,
		'ALLOW_COLUMNS_SORT' => true,
		'ALLOW_COLUMNS_RESIZE' => false,
		'ALLOW_INLINE_EDIT' => false,
		'AJAX_MODE' => 'N',
		'AJAX_OPTION_JUMP' => 'N',
		'AJAX_OPTION_STYLE' => 'N',
		'AJAX_OPTION_HISTORY' => 'N'
	]);

	if ($isGridRequest)
	{
		$response = new HttpResponse();
		$content = Json::decode($component->getContent());
		$response->setContent($content['data']['html']);

		return $response;
	}

	return $component;
}