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

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

	$userId = UtilUser::getId();

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

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

	$nav = new PageNavigation('page');
	$nav->allowAllRecords(false)->setPageSize(10)->initFromUri();

	$epicService = new EpicService($userId);
	$userService = new UserService();

	$gridOptions = new GridOptions($gridId);

	$gridVisibleColumns = $gridOptions->getVisibleColumns();
	if (empty($gridVisibleColumns))
	{
		$gridVisibleColumns = ['NAME', 'TAGS', 'TASKS_TOTAL', 'TASKS_COMPLETED', 'USER'];
	}

	$rows = [];
	$epicsList = [];

	$queryResult = $epicService->getList(
		[],
		['=GROUP_ID' => $groupId],
		$this->getGridOrder($gridOptions),
		$nav
	);
	if ($queryResult)
	{
		while ($data = $queryResult->fetch())
		{
			$epic = new EpicForm();

			$epic->fillFromDatabase($data);

			$epicsList[] = $epic;
		}
	}

	$randomGenerator = new RandomSequence(rand());

	$itemService = new ItemService();

	$n = 0;

	/** @var $epicsList EpicForm[] */
	foreach ($epicsList as $epic)
	{
		$n++;
		if ($n > $nav->getPageSize())
		{
			break;
		}

		$usersInfo = $userService->getInfoAboutUsers([$epic->getCreatedBy()]);

		$epicExtensionParams = '"'.$epic->getGroupId().'", "'.$epic->getId().'"';
		$epicExtensionRemoveParams = $epicExtensionParams . ', "'.$gridId.'"';

		$taskIds = $itemService->getTaskIdsByEpicId($epic->getId());

		$columns = [];
		if (in_array('NAME', $gridVisibleColumns))
		{
			$columns['NAME'] = $this->getEpicGridColumnName($epic);
		}
		if (in_array('TAGS', $gridVisibleColumns))
		{
			$columns['TAGS'] = $this->getEpicGridColumnTags($userId, $taskIds);
		}
		if (in_array('TASKS_TOTAL', $gridVisibleColumns))
		{
			$columns['TASKS_TOTAL'] = $this->getEpicGridColumnTasksTotal($epic, $taskIds);
		}
		if (in_array('TASKS_COMPLETED', $gridVisibleColumns))
		{
			$columns['TASKS_COMPLETED'] = $this->getEpicGridColumnTasksCompleted($epic, $taskIds);
		}
		if (in_array('USER', $gridVisibleColumns))
		{
			$columns['USER'] = $this->getUserColumn($usersInfo);
		}

		$rows[] = [
			'id' => $epic->getId() . $randomGenerator->randString(2),
			'columns' => $columns,
			'actions' => [
				[
					'text' => Loc::getMessage('TASKS_SCRUM_EPIC_GRID_ACTION_VIEW'),
					'onclick' => 'BX.Tasks.Scrum.Epic.showView('. $epicExtensionParams .');',
				],
				[
					'text' => Loc::getMessage('TASKS_SCRUM_EPIC_GRID_ACTION_EDIT'),
					'onclick' => 'BX.Tasks.Scrum.Epic.showEdit('. $epicExtensionParams .');',
				],
				[
					'text' => Loc::getMessage('TASKS_SCRUM_EPIC_GRID_ACTION_REMOVE'),
					'onclick' => 'BX.Tasks.Scrum.Epic.removeEpic('. $epicExtensionRemoveParams .');',
				]
			]
		];
	}

	$nav->setRecordCount($nav->getOffset() + $n);

	if ($epicService->getErrors())
	{
		$this->errorCollection->add($epicService->getErrors());

		return null;
	}

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

	$component = new Component('bitrix:main.ui.grid', '', [
		'GRID_ID' => $gridId,
		'COLUMNS' => $this->getUiGridColumns(),
		'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;
}