Example #1
0
 /**
  * {@inheritdoc}
  */
 public function handle(GridInterface $grid, array $filters = [], array $sorting = [], array $slicing = [])
 {
     $repository = $this->repositoryRegistry[$grid->getResource()->getName()];
     $dataSourceBuilder = $repository->createDataSourceBuilder($grid->getOptions());
     $this->filterer->filter($dataSourceBuilder, $grid, $filters);
     $this->sorter->sort($dataSourceBuilder, $grid, $sorting);
     $this->slicer->slice($dataSourceBuilder, $grid, $slicing);
     return $this->gridViewFactory->create($grid, $dataSourceBuilder);
 }
Example #2
0
 /**
  * {@inheritdoc}
  */
 public function batch(GridInterface $grid, $batch, $data)
 {
     $batch = $grid->getBatch($batch);
     $types = $this->resolveTypes($batch->getType());
     if (!isset($this->cache[$hash = spl_object_hash($grid) . ':' . spl_object_hash($batch)])) {
         $resolver = new OptionsResolver();
         foreach ($types as $type) {
             $type->configureOptions($resolver);
         }
         $this->cache[$hash] = $resolver->resolve(array_merge(['batch' => $batch, 'grid' => $grid], $batch->getOptions()));
     }
     reset($types)->batch($data, $this->cache[$hash]);
 }
Example #3
0
 /**
  * {@inheritdoc}
  */
 public function filter(DataSourceBuilderInterface $builder, GridInterface $grid, array $filters = [])
 {
     foreach ($filters as $name => $filter) {
         if (!$grid->hasFilter($name)) {
             continue;
         }
         $gridFilter = $grid->getFilter($name);
         $types = $this->resolveTypes($gridFilter->getType());
         $resolver = new OptionsResolver();
         foreach ($types as $type) {
             $type->configureOptions($resolver);
         }
         reset($types)->filter($filter, $resolver->resolve(array_merge(['filter' => $gridFilter, 'grid' => $grid, 'builder' => $builder], $gridFilter->getOptions())));
     }
 }
Example #4
0
 /**
  * {@inheritdoc}
  */
 public function sort(DataSourceBuilderInterface $builder, GridInterface $grid, array $sorting)
 {
     foreach ($sorting as $name => $order) {
         if (!$grid->hasSort($name) || !in_array($order, [self::ASC, self::DESC], true)) {
             continue;
         }
         $sort = $grid->getSort($name);
         $types = $this->resolveTypes($sort->getType());
         $resolver = new OptionsResolver();
         foreach ($types as $type) {
             $type->configureOptions($resolver);
         }
         reset($types)->sort($order, $resolver->resolve(array_merge(['builder' => $builder, 'grid' => $grid, 'sort' => $sort], $sort->getOptions())));
     }
 }
Example #5
0
 /**
  * {@inheritdoc}
  */
 protected function findChoices(GridInterface $grid, RepositoryInterface $repository, array $choices)
 {
     $queryBuilder = $repository->createQueryBuilderForCollection();
     $result = $queryBuilder->andWhere($queryBuilder->expr()->in($repository->getProperty($grid->getResource()->getIdPropertyPath(), $queryBuilder), ':' . ($placeholder = 'lug_id_' . str_replace('.', '', uniqid(null, true)))))->setParameter($placeholder, $choices)->getQuery()->getResult();
     return count($result) === count($choices) ? $result : [];
 }
Example #6
0
 /**
  * @param GridInterface $grid
  * @param string        $template
  *
  * @return string
  */
 private function resolveTemplate(GridInterface $grid, $template)
 {
     if ($grid->hasOption($option = $template . '_template')) {
         return $grid->getOption($option);
     }
     if (isset($this->templates[$template])) {
         return $this->templates[$template];
     }
     return '@LugGrid/' . $template . '.html.twig';
 }
Example #7
0
 /**
  * {@inheritdoc}
  */
 protected function findChoices(GridInterface $grid, RepositoryInterface $repository, array $choices)
 {
     $result = $repository->createQueryBuilderForCollection()->field($repository->getProperty($grid->getResource()->getIdPropertyPath()))->in($choices)->getQuery()->getIterator()->toArray();
     return count($result) === count($choices) ? $result : [];
 }
Example #8
0
 /**
  * @param GridInterface $grid
  *
  * @return string
  */
 private function getKey(GridInterface $grid)
 {
     return '_lug_grid_filter_' . $grid->getResource()->getName();
 }
Example #9
0
 /**
  * {@inheritdoc}
  */
 public function slice(DataSourceBuilderInterface $builder, GridInterface $grid, array $slicing)
 {
     $limit = isset($slicing['limit']) ? $slicing['limit'] : ($grid->hasOption('limit') ? $grid->getOption('limit') : 10);
     $page = isset($slicing['page']) ? $slicing['page'] : ($grid->hasOption('page') ? $grid->getOption('page') : 1);
     $builder->setLimit($limit)->setPage($page);
 }