/** * This method populates the iterator property * */ private function initialize() { if ($this->initialized) { return; } if (!isset($this->datasource)) { throw new \Exception('A datalist must have a datasource before it can be iterated or counted'); } // Handle pagination if ($this->hasOption('limit_per_page')) { $this->datasource->paginate($this->getOption('limit_per_page'), $this->getOption('range_limit'))->setPage($this->page); } // Handle search if (null !== $this->getOption('search') && !empty($this->searchQuery)) { $expressionBuilder = new DatalistFilterExpressionBuilder(); $this->searchFilter->getType()->buildExpression($expressionBuilder, $this->searchFilter, $this->searchQuery, $this->searchFilter->getOptions()); $this->datasource->setSearchExpression($expressionBuilder->getExpression()); } // Handle filters $expressionBuilder = new DatalistFilterExpressionBuilder(); if (!empty($this->filterData)) { foreach ($this->filterData as $filterName => $filterValue) { $filter = $this->filters[$filterName]; $filter->getType()->buildExpression($expressionBuilder, $filter, $filterValue, $filter->getOptions()); } $this->datasource->setFilterExpression($expressionBuilder->getExpression()); } // Handle sort if (isset($this->routeParams['sort-field']) && isset($this->routeParams['sort-direction'])) { $field = $this->getField($this->routeParams['sort-field']); if (null !== $field && true === $field->getOption('sortable')) { $propertyPath = $field->getOption('sort_property_path'); if (empty($propertyPath)) { throw new \Exception('The "sort_property_path" option must be set on datalist field when option "sortable" is true.'); } $this->datasource->setSort($propertyPath, $this->routeParams['sort-direction']); } } $this->iterator = $this->datasource->getIterator(); }
/** * @param \Twig_Environment $env * @param \Leapt\AdminBundle\Datalist\Filter\DatalistFilterInterface $filter * @return string * @throws \Exception */ public function renderDatalistFilter(\Twig_Environment $env, DatalistFilterInterface $filter) { $blockNames = [$filter->getType()->getBlockName() . '_filter', '_' . $filter->getDatalist()->getName() . '_' . $filter->getName() . '_filter']; $childForm = $filter->getDatalist()->getFilterForm()->get($filter->getName()); return $this->renderBlock($env, $filter->getDatalist(), $blockNames, ['form' => $childForm->createView(), 'filter' => $filter, 'datalist' => $filter->getDatalist()]); }
/** * @param \Leapt\AdminBundle\Datalist\Filter\DatalistFilterExpressionBuilder $builder * @param \Leapt\AdminBundle\Datalist\Filter\DatalistFilterInterface $filter * @param mixed $value * @param array $options */ public function buildExpression(DatalistFilterExpressionBuilder $builder, DatalistFilterInterface $filter, $value, array $options) { $operator = true === $options['multiple'] ? ComparisonExpression::OPERATOR_IN : ComparisonExpression::OPERATOR_EQ; $builder->add(new ComparisonExpression($filter->getPropertyPath(), $operator, $value)); }
/** * @param \Leapt\AdminBundle\Datalist\Filter\DatalistFilterExpressionBuilder $builder * @param \Leapt\AdminBundle\Datalist\Filter\DatalistFilterInterface $filter * @param mixed $value * @param array $options */ public function buildExpression(DatalistFilterExpressionBuilder $builder, DatalistFilterInterface $filter, $value, array $options) { $builder->add(new ComparisonExpression($filter->getPropertyPath(), ComparisonExpression::OPERATOR_EQ, $value)); }
/** * @param \Symfony\Component\Form\FormBuilderInterface $builder * @param \Leapt\AdminBundle\Datalist\Filter\DatalistFilterInterface $filter * @param array $options */ public function buildForm(FormBuilderInterface $builder, DatalistFilterInterface $filter, array $options) { $builder->add($filter->getName(), SearchType::class, ['label' => $options['label']]); }