You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.6KB

  1. <?php
  2. namespace Lc\CaracoleBundle\Field\Filter;
  3. use Doctrine\ORM\EntityRepository;
  4. use Doctrine\ORM\QueryBuilder;
  5. use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
  6. use Lc\SovBundle\Field\Filter\AssociationFilter;
  7. use Lc\SovBundle\Field\Filter\FilterTrait;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. /**
  11. * @author La clic ! <contact@laclic.fr>
  12. */
  13. class ProductCategoriesFilter extends AssociationFilter
  14. {
  15. public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array())
  16. {
  17. $targetEntity = $options['entity_dto']->getPropertyMetadata($fieldDto->getProperty())->get('targetEntity');
  18. $builder->add(
  19. $fieldDto->getProperty(),
  20. EntityType::class,
  21. array(
  22. 'class' => $targetEntity,
  23. 'placeholder' => '--',
  24. 'choices' => $fieldDto->getFormTypeOption('choices'),
  25. 'required' => false,
  26. 'attr' => array(
  27. 'class' => 'select2 input-sm',
  28. 'form' => 'filters-form',
  29. ),
  30. )
  31. );
  32. }
  33. public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, $filteredValue = null)
  34. {
  35. if ($filteredValue !== null) {
  36. $queryBuilder->leftJoin('entity.productCategories', 'product_categories');
  37. $queryBuilder->andWhere(':' . $fieldProperty . ' MEMBER OF entity.' . $fieldProperty . ' OR product_categories.parent = :' . $fieldProperty);
  38. $queryBuilder->setParameter($fieldProperty, $filteredValue);
  39. }
  40. }
  41. }