/** * {@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); }
/** * {@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]); }
/** * {@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()))); } }
/** * {@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()))); } }
/** * {@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 : []; }
/** * @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'; }
/** * {@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 : []; }
/** * @param GridInterface $grid * * @return string */ private function getKey(GridInterface $grid) { return '_lug_grid_filter_' . $grid->getResource()->getName(); }
/** * {@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); }