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.

151 lines
5.8KB

  1. <?php
  2. namespace Lc\SovBundle\Form\Common;
  3. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  4. use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface;
  5. use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
  6. use Lc\SovBundle\Field\Filter\AssociationFilter;
  7. use Lc\SovBundle\Field\Filter\CheckboxFilter;
  8. use Lc\SovBundle\Field\Filter\ChoiceFilter;
  9. use Lc\SovBundle\Field\Filter\DateFilter;
  10. use Lc\SovBundle\Field\Filter\IntegerFilter;
  11. use Lc\SovBundle\Field\Filter\TextFilter;
  12. use Lc\SovBundle\Translation\TranslatorAdmin;
  13. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  14. use Symfony\Component\Form\AbstractType;
  15. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  16. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  17. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  18. use Symfony\Component\Form\Extension\Core\Type\DateType;
  19. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  20. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  21. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  22. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  23. use Symfony\Component\Form\Extension\Core\Type\TextType;
  24. use Symfony\Component\Form\FormBuilderInterface;
  25. use Symfony\Component\OptionsResolver\OptionsResolver;
  26. use function Symfony\Component\String\u;
  27. class FiltersFormType extends AbstractType
  28. {
  29. protected $translatorAdmin;
  30. public function __construct(TranslatorAdmin $translatorAdmin)
  31. {
  32. $this->translatorAdmin = $translatorAdmin;
  33. }
  34. public function buildForm(FormBuilderInterface $builder, array $options)
  35. {
  36. foreach ($options['fields'] as $field) {
  37. if ($field instanceof FieldInterface) {
  38. $fieldDto = $field->getAsDto();
  39. } else {
  40. $fieldDto = $field;
  41. }
  42. //POurt modifier le type de filtre filter_type
  43. //Pour désactiver le filtre sur un champ filter à false
  44. if ($fieldDto->isDisplayedOn(Crud::PAGE_INDEX) && $fieldDto->getCustomOption('filter')!==false) {
  45. if($fieldDto->getCustomOption('filter_fqcn')){
  46. $filterFqcn = $fieldDto->getCustomOption('filter_fqcn');
  47. $checkboxFilter = new $filterFqcn;
  48. $checkboxFilter->buildProperty($builder, $fieldDto, $options);
  49. }else {
  50. switch ($this->guessFormType($fieldDto)) {
  51. case CheckboxType::class:
  52. $checkboxFilter = new CheckboxFilter();
  53. $checkboxFilter->buildProperty($builder, $fieldDto);
  54. break;
  55. case ChoiceType::class:
  56. $choiceFilter = new ChoiceFilter($this->translatorAdmin);
  57. $choiceFilter->buildProperty($builder, $fieldDto, $options);
  58. break;
  59. case IntegerType::class:
  60. $integerFilter = new IntegerFilter();
  61. $integerFilter->buildProperty($builder, $fieldDto);
  62. break;
  63. case TextType::class:
  64. case TextareaType::class:
  65. $textFilter = new TextFilter();
  66. $textFilter->buildProperty($builder, $fieldDto);
  67. break;
  68. case DateTimeType::class:
  69. case DateType::class:
  70. $textFilter = new DateFilter();
  71. $textFilter->buildProperty($builder, $fieldDto);
  72. break;
  73. case EntityType::class:
  74. $associationFilter = new AssociationFilter();
  75. $associationFilter->buildProperty($builder, $fieldDto, $options);
  76. break;
  77. }
  78. }
  79. }
  80. }
  81. $builder->add(
  82. 'action_apply',
  83. SubmitType::class,
  84. array(
  85. 'label_html' => true,
  86. 'label' => '<i class="fa fa-search"></i>',
  87. 'attr' => array(
  88. 'class' => 'btn btn-sm btn-info',
  89. 'form' => 'filters-form',
  90. 'data-toggle' => "tooltip",
  91. 'title' => $this->translatorAdmin->transAction("apply"),
  92. 'aria-label' => $this->translatorAdmin->transAction("apply")
  93. ),
  94. )
  95. );
  96. $builder->add(
  97. 'action_reset',
  98. SubmitType::class,
  99. array(
  100. 'label_html' => true,
  101. 'label' => '<i class="fa fa-eraser"></i>',
  102. 'attr' => array(
  103. 'class' => 'btn btn-sm btn-warning lc-reset-filters',
  104. 'form' => 'filters-form',
  105. 'data-toggle' => "tooltip",
  106. 'title' => $this->translatorAdmin->transAction("reset"),
  107. 'aria-label' => $this->translatorAdmin->transAction("reset")
  108. ),
  109. )
  110. );
  111. $builder->add('reset', HiddenType::class);
  112. }
  113. public function configureOptions(OptionsResolver $resolver)
  114. {
  115. $resolver->setDefaults(
  116. [
  117. 'label' => false,
  118. 'csrf_protection' => false,
  119. 'entity_dto' => null,
  120. //'translation_domain' => 'lcshop',
  121. 'fields' => false,
  122. 'entity_name' => false,
  123. 'entity_class' => false,
  124. //'entityClass' => false
  125. ]
  126. );
  127. }
  128. protected function guessFormType(FieldDto $fieldDto){
  129. if($fieldDto->getCustomOption('filter_type')){
  130. return $fieldDto->getCustomOption('filter_type');
  131. }else{
  132. return$fieldDto->getFormType();
  133. }
  134. }
  135. }