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);
 }
 /**
  * @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;
 }
 /**
  * Modify the query with any possible query modifiers.
  * @param QueryBuilder             $builder
  * @param IndexDefinitionInterface $definition
  * @return Query
  */
 private function modifyQuery(QueryBuilder $builder, IndexDefinitionInterface $definition)
 {
     if ($definition->hasQueryModifier()) {
         $modifier = $this->queryModifierResolver->resolve($definition->getQueryModifier());
         $result = $modifier->modifyBuilder($builder);
         if ($result instanceof QueryBuilder) {
             $builder = $result;
         }
         $query = $builder->getQuery();
         $result = $modifier->modifyQuery($query);
         if ($result instanceof Query) {
             $query = $result;
         }
     } else {
         $query = $builder->getQuery();
     }
     return $query;
 }
示例#4
0
 /**
  * @param IndexDefinitionInterface $index
  * @return $this
  */
 public function setIndex(IndexDefinitionInterface $index)
 {
     $this->index = $index;
     $this->index->setParent($this);
     return $this;
 }