public function countByUser($page, $actionsRestriction, $logFilterFormType, $workspaceIds = null, $resourceNodeIds = null, $resourceClass = null) { $page = max(1, $page); $dateRangeToTextTransformer = new DateRangeToTextTransformer($this->container->get('translator')); $data = $this->processFormData($actionsRestriction, $logFilterFormType, $workspaceIds, $resourceClass, $dateRangeToTextTransformer); $range = $data['range']; $orderBy = 'name'; if (isset($data['orderBy'])) { $orderBy = $data['orderBy']; } $order = 'ASC'; if (isset($data['order'])) { $order = $data['order']; } $filterForm = $this->container->get('form.factory')->create($logFilterFormType, $data); $data['range'] = $dateRangeToTextTransformer->transform($range); //$filter = urlencode(json_encode($data)); //Find if action refers to an resource type $actionData = $this->getResourceTypeFromAction($data['action']); $actionString = $actionData['action']; $resourceType = $actionData['resourceType']; $nbUsers = $this->logRepository->countTopUsersByAction($actionString, $range, $data['user'], $actionsRestriction, $workspaceIds, $resourceType, $resourceNodeIds, false); $maxResult = self::LOG_PER_PAGE; if (($page - 1) * $maxResult > $nbUsers) { throw new NotFoundHttpException(); } $topUsers = $this->logRepository->topUsersByActionQuery($actionString, $range, $data['user'], $actionsRestriction, $workspaceIds, $maxResult, $resourceType, $resourceNodeIds, false, $page, $orderBy, $order)->getResult(); $formatedData = $this->formatTopUserDataArray($topUsers); $resultUserList = null; if (!empty($formatedData)) { $userActionsByDay = $this->logRepository->findUserActionsByDay($actionString, $range, $actionsRestriction, $workspaceIds, $resourceType, $resourceNodeIds, $formatedData['ids']); $userActionsByDay[] = null; $resultUserList = $formatedData['userData']; $currentUserId = null; $userActionsArray = array(); foreach ($userActionsByDay as $userAction) { if ($userAction === null || $currentUserId !== null && $currentUserId != $userAction['id']) { $resultUserList[$currentUserId]['stats'] = $this->logRepository->extractChartData($userActionsArray, $range); $resultUserList[$currentUserId]['maxValue'] = max(array_column($userActionsArray, 'total')); $userActionsArray = array(); } if ($userAction !== null) { $currentUserId = $userAction['id']; $userActionsArray[] = $userAction; } } } $adapter = new FixedAdapter($nbUsers, $resultUserList); $pager = new PagerFanta($adapter); $pager->setMaxPerPage(self::LOG_PER_PAGE); $pager->setCurrentPage($page); return array('pager' => $pager, 'filter' => $data, 'filterForm' => $filterForm->createView(), 'actionName' => $actionString, 'orderBy' => $orderBy, 'order' => $order); }