Beispiel #1
0
 /**
  * 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']]);
 }