public function getPagination(QueryBuilder $queryBuilder, DataSetRequestInterface $request, ColumnCollection $columns) { $total = $this->dataSetPaginator->getTotalRows($queryBuilder, $columns); $offset = $request->getOffset(); $limit = $request->getLimit(); $currentPage = $offset / $limit + 1; $totalPages = ceil($total / $limit); return ['totalRows' => $total, 'currentPage' => $currentPage, 'totalPages' => ceil($total / $limit), 'currentResult' => ['rangeFrom' => $offset, 'rangeTo' => $this->calculateCurrentResultEnd($offset, $limit, $total)], 'nextPage' => $this->getNextPage($totalPages, $offset, $limit), 'previousPage' => $this->getPreviousPage($currentPage), 'pages' => $this->getPages($totalPages, $currentPage)]; }
/** * Prepares an ordering expression * * @param DataSetRequestInterface $request * @param ColumnCollection $columns * * @return Expr\OrderBy */ protected function getOrderByExpression(DataSetRequestInterface $request, ColumnCollection $columns) { $column = $columns->get($request->getOrderBy()); $orderBy = $column->isAggregated() ? $column->getAlias() : $column->getSource(); $orderDir = $request->getOrderDir(); return new Expr\OrderBy($orderBy, $orderDir); }