src/Form/GrandPublic/RechercheDispoType.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Form\GrandPublic;
  3. use App\Entity\Referentiel\BureauDistributeur;
  4. use App\Entity\Referentiel\SecteurPmi;
  5. use App\Entity\Referentiel\Commune;
  6. use App\Form\GDA\PlanningDispoType;
  7. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  8. use Doctrine\ORM\EntityRepository;
  9. use Symfony\Component\Form\AbstractType;
  10. use Symfony\Component\Form\ChoiceList\ChoiceList;
  11. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  12. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  13. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  14. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  15. use Symfony\Component\Form\FormBuilderInterface;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Symfony\Component\Form\Extension\Core\Type\DateType;
  18. class RechercheDispoType extends AbstractType
  19. {
  20.     const REQUIRED 'required';
  21.     const LABEL 'label';
  22.     const CLASSE 'class';
  23.     /**
  24.      * {@inheritdoc}
  25.      */
  26.     public function buildForm(FormBuilderInterface $builder, array $options)
  27.     {
  28.         $planningDispo $options['planning_dispo'];
  29.         $builder->add('commune'EntityType::class, array(
  30.             self::REQUIRED => true,
  31.             self::CLASSE => Commune::class,
  32.             self::LABEL => 'Commune',
  33.             'multiple' => false,
  34.             'placeholder' => 'Sélectionner une commune',
  35.             'choice_filter' => ChoiceList::filter(
  36.                 $this,
  37.                 function ($commune): bool {
  38.                     if($commune == null){
  39.                         return true;
  40.                     }
  41.                     else{
  42.                         return $commune->getLibelle() != 'Meudon-la-Foret';
  43.                     }
  44.                 }
  45.             ),
  46.             'choice_label' => function ($commune$key$index) {
  47.                 /** @var App\Entity\Referentiel\Commune $commune */
  48.                 $libelle $commune->getLibelle();
  49.                 if($libelle == 'Meudon'){
  50.                     return $commune->getCodePostal() . ' - ' 'Meudon - 92360 - Meudon-la-Foret';
  51.                 } else {
  52.                     return $commune->getCodePostal() . ' - ' $libelle;
  53.                 }
  54.             }
  55.         ));
  56.         if ($options['active_bureau_distrib'] == 'true') {
  57.             $builder->add('bureau_distributeur'EntityType::class, array(
  58.                 self::REQUIRED => false,
  59.                 self::CLASSE => BureauDistributeur::class,
  60.                 self::LABEL => 'Bureau distributeur',
  61.                 'query_builder' => function (EntityRepository $er) {
  62.                     return $er->createQueryBuilder('bureau_distributeur')
  63.                                     ->orderBy('bureau_distributeur.libelle''ASC');
  64.                 },
  65.                 'choice_label' => function ($bureau_distributeur$key$index) {
  66.                     return mb_strtoupper($bureau_distributeur->getLibelle());
  67.                 }
  68.             ));
  69.         }
  70.         $builder->add('lieu_accueil'HiddenType::class, array(
  71.                     self::REQUIRED => true,
  72.                     self::LABEL => 'Lieu d\'accueil',
  73.                     'data' => 'tous'
  74.                 ))
  75.                 ->add('date_naissance_enf'DateType::class, array(
  76.                     self::REQUIRED => false,
  77.                     // champ texte au lieu de listes déroulantes
  78.                     'widget' => 'single_text',
  79.                     // prevents rendering it as type="date", to avoid HTML5 date pickers
  80.                     'html5' => false,
  81.                     // bootstrap-datepicker
  82.                     'attr' => array(self::CLASSE => 'form-control'),
  83.                     // Pour pouvoir parser la date fournie par le datepicker
  84.                     'format' => 'dd/MM/yyyy',
  85.                     self::LABEL => 'Date de naissance',
  86.                 ))
  87.                 ->add('date_debut_accueil'DateType::class, array(
  88.                     self::REQUIRED => false,
  89.                     // champ texte au lieu de listes déroulantes
  90.                     'widget' => 'single_text',
  91.                     // prevents rendering it as type="date", to avoid HTML5 date pickers
  92.                     'html5' => false,
  93.                     // bootstrap-datepicker
  94.                     'attr' => array(self::CLASSE => 'form-control'),
  95.                     // Pour pouvoir parser la date fournie par le datepicker
  96.                     'format' => 'dd/MM/yyyy',
  97.                     self::LABEL => 'Date de début d\'accueil',
  98.                     'data' => new \DateTime(),
  99.                 ))
  100.                 ->add('planning_dispo'CollectionType::class, array(
  101.                     'data' => $planningDispo,
  102.                     'entry_type' => PlanningDispoType::class,
  103.                     'entry_options' => array(self::LABEL => false)
  104.         ));
  105.         if ($options['active_atypique'] == 'true') {
  106.             $builder->add('accepte_atypique_matin'CheckboxType::class, array(
  107.                 self::LABEL => 'Accepte l\'accueil avant 7h',
  108.                 self::REQUIRED => false));
  109.             $builder->add('accepte_atypique_soir'CheckboxType::class, array(
  110.                 self::LABEL => 'Accepte l\'accueil après 20h',
  111.                 self::REQUIRED => false));
  112.         }
  113.         if ($options['active_handicap'] == 'true') {
  114.             $builder->add('accepte_handicap'CheckboxType::class, array(
  115.                 self::LABEL => 'Accueille les enfants en situation de handicap',
  116.                 self::REQUIRED => false));
  117.         }
  118.         $builder->add('rechercher'SubmitType::class, array(
  119.             self::LABEL => 'Rechercher'
  120.         ));
  121.     }
  122.     /* passage de paramètes au form depuis le controller: https://www.grafikart.fr/forum/topics/21766 */
  123.     public function configureOptions(OptionsResolver $resolver)
  124.     {
  125.         $resolver->setRequired('active_bureau_distrib');
  126.         $resolver->setRequired('planning_dispo');
  127.         $resolver->setRequired('active_atypique');
  128.         $resolver->setRequired('active_handicap');
  129.     }
  130. }