/** * @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; }
/** * Create a query based on the index definition. * @param IndexDefinitionInterface $definition * @return Query */ public function resolveQuery(IndexDefinitionInterface $definition) { $em = $definition->getParent()->getEntityManager(); $builder = $em->createQueryBuilder(); $builder->select(self::BASE_NAME); $builder->from($definition->getBaseEntity(), self::BASE_NAME); $this->addColumns($builder, $definition->getColumns()); $this->addDefaultSort($builder, $definition); return $this->modifyQuery($builder, $definition); }
function let(Paginator $paginator, AbstractQuery $query, IndexDefinitionInterface $indexDefinition, SlidingPagination $pagination, DefinitionInterface $definition, TemplateDefinitionInterface $templateDefinition) { $this->beConstructedWith($paginator); $indexDefinition->getObjectsPerPage()->willReturn(20); $paginator->paginate($query, Argument::type('int'), Argument::type('int'))->willReturn($pagination); $indexDefinition->getParent()->willReturn($definition); $definition->getTemplates()->willReturn($templateDefinition); $pagination->setParam(Argument::any(), Argument::any())->willReturn(); $pagination->setTemplate(Argument::any())->will(function ($args, $pagination) { $pagination->getTemplate()->willReturn($args[0]); }); $pagination->setSortableTemplate(Argument::any())->will(function ($args, $pagination) { $pagination->getSortableTemplate()->willReturn($args[0]); }); }