|
- <?php
-
- namespace Lc\SovBundle\Field\Filter;
-
- use Doctrine\ORM\EntityRepository;
- use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
- use Lc\SovBundle\Repository\RepositoryQueryInterface;
- use Symfony\Bridge\Doctrine\Form\Type\EntityType;
- use Symfony\Component\Form\FormBuilderInterface;
-
- /**
- * @author La clic ! <contact@laclic.fr>
- */
- class AssociationFilter
- {
- use FilterTrait;
-
-
- public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array())
- {
- $param = array();
- $targetEntity = $options['entity_dto']->getPropertyMetadata($fieldDto->getProperty())->get('targetEntity');
-
- if ($fieldDto->getCustomOption('choices')) {
- $choices = $fieldDto->getCustomOption('choices');
- } elseif ($fieldDto->getFormTypeOption('choices') != null) {
- $choices = $fieldDto->getFormTypeOption('choices');
- } else {
- $choices = array();
- }
-
- if ($fieldDto->getFormTypeOption('choice_label') != null) {
- $param['choice_label'] = $fieldDto->getFormTypeOption('choice_label');
- }
- //todo utiliser choices plutot que query_builder voir ProductCategoriesFilter
- $builder->add(
- $fieldDto->getProperty(),
- EntityType::class,
- array_merge(
- $param,
- array(
- 'class' => $targetEntity,
- 'placeholder' => '--',
- 'choices' => $choices,
- 'required' => false,
- 'attr' => array(
- 'class' => 'select2 input-sm',
- 'form' => 'filters-form',
- ),
-
-
- )
- )
- );
- }
-
- public function applyFilter(RepositoryQueryInterface $repositoryQuery, FieldDto $fieldDto, $filteredValue = null)
- {
- $fieldProperty = $this->getFieldProperty($fieldDto);
-
- if ($filteredValue !== null) {
- if ($fieldDto->getFormTypeOption('multiple') || ($fieldDto->getTemplatePath() != null && str_contains($fieldDto->getTemplatePath(), 'association_many'))) {
- $repositoryQuery->andWhere(':' . $fieldProperty . ' MEMBER OF .' . $fieldProperty . '');
- } else {
- $repositoryQuery->andWhere('.' . $fieldProperty . ' = :' . $fieldProperty . '');
- }
- $repositoryQuery->setParameter($fieldProperty, $filteredValue);
-
-
- //
- // if ($filter instanceof TreeInterface && $filter->getParent() == null) {
- // $repositoryQuery->setParameter($field['property'], array_merge(array($filter), $filter->getChildrens()->toArray()));
- // } else {
- // }
- }
- }
-
- }
|