/** * @param AbstractQuery $query * @param IndexDefinitionInterface $index * @param Request $request * @return PaginationInterface */ public function getGrid(AbstractQuery $query, IndexDefinitionInterface $index, Request $request) { $sortDirection = $request->get('direction', IndexDefinitionInterface::SORT_ASC); $sortColumn = $request->get('sort'); if (!in_array($sortDirection, [IndexDefinitionInterface::SORT_ASC, IndexDefinitionInterface::SORT_DESC])) { throw new CrudifyException("Invalid sorting direction {$sortDirection}"); } if (null !== $sortColumn && !$index->hasColumnWithField($sortColumn)) { throw new CrudifyException("No such column '{$sortColumn}' in definition."); } if (null !== $sortColumn && !$index->getColumnWithField($sortColumn)->isSortable()) { throw new CrudifyException("Not allowed to sort column '{$sortColumn}'."); } /** @var SlidingPagination $pagination */ $pagination = $this->paginator->paginate($query, $request->get('page', 1), $index->getObjectsPerPage()); if (null !== $index->getDefaultSortColumn()) { $pagination->setParam('sort', $index->getDefaultSortColumn()->getField()); $pagination->setParam('direction', $index->getDefaultSortDirection()); } if (null !== $sortColumn) { $pagination->setParam('sort', $sortColumn); $pagination->setParam('direction', $sortDirection); } $pagination->setTemplate($index->getParent()->getTemplates()->getPagination()); $pagination->setSortableTemplate($index->getParent()->getTemplates()->getSortable()); return $pagination; }
/** * Add the default sort column to the query * @param QueryBuilder $builder * @param IndexDefinitionInterface $definition */ private function addDefaultSort(QueryBuilder $builder, IndexDefinitionInterface $definition) { if (null !== $definition->getDefaultSortColumn()) { $this->addJoins($definition->getDefaultSortColumn()->getJoinPath(), $builder); $builder->addOrderBy($definition->getDefaultSortColumn()->getField(), $definition->getDefaultSortDirection()); } }
function it_should_fail_on_an_invalid_sort_column(AbstractQuery $query, IndexDefinitionInterface $indexDefinition, Request $request, TemplateDefinitionInterface $templateDefinition) { $request->get('direction', Argument::any())->willReturn('asc'); $request->get('sort', Argument::any())->willReturn('another_field'); $request->get('page', Argument::any())->willReturn(1); $indexDefinition->getDefaultSortColumn()->willReturn(null); $indexDefinition->hasColumnWithField('another_field')->willReturn(false); $this->shouldThrow('Bravesheep\\CrudifyBundle\\Exception\\CrudifyException')->duringGetGrid($query, $indexDefinition, $request); }