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;
}