src/ClientBundle/Form/DevisType.php line 29

Open in your IDE?
  1. <?php
  2. namespace ClientBundle\Form;
  3. use ClientBundle\DataTransformer\NumberIdTransformer;
  4. use ClientBundle\Entity\Devis;
  5. use Doctrine\Common\Persistence\ObjectManager;
  6. use libphonenumber\PhoneNumberFormat;
  7. use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\Form\AbstractType;
  10. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  11. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  12. use Symfony\Component\Form\Extension\Core\Type\DateType;
  13. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  15. use Symfony\Component\Form\FormBuilderInterface;
  16. use Symfony\Component\Form\FormEvent;
  17. use Symfony\Component\Form\FormEvents;
  18. use Symfony\Component\OptionsResolver\OptionsResolver;
  19. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  20. use Symfony\Component\Form\Extension\Core\Type\TextType;
  21. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  22. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  23. use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
  24. use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\IsTrue as RecaptchaTrue;
  25. use Symfony\Component\Validator\Constraints\NotBlank;
  26. class DevisType extends AbstractType
  27. {
  28.     private $options;
  29.     protected $em;
  30.     public function __construct(ObjectManager $em) {
  31.         $this->em $em;
  32.     }
  33.     public function buildForm(FormBuilderInterface $builder, array $options)
  34.     {
  35.         $this->options $options;
  36.         $builder
  37.             ->add('LastName'TextType::class, array("label" => "Nom""constraints" => array( new NotBlank())))
  38.             ->add('FirstName'TextType::class, array("label" => "Prénom""constraints" => array( new NotBlank())))
  39.             ->add('Mail'EmailType::class, array("label" => "Adresse mail""error_bubbling" => false))
  40.             ->add('Phone'PhoneNumberType::class, array("label" => "Votre numéro de mobile""constraints" => array( new NotBlank()), 'format' => PhoneNumberFormat::INTERNATIONAL))
  41.             ->add('PostalCode'TextType::class, array("label" => "Code postal""constraints" => array( new NotBlank())))
  42.             ->add('City'ChoiceType::class, array("label" => "Ville de l'événement""auto_initialize" => false))
  43.             ->add('type'EntityType::class, array(
  44.                 'placeholder' => 'Choisissez ici votre type d\'événement',
  45.                 'label' => "Type d'évènement",
  46.                 'mapped' => true,
  47.                 'required' => true,
  48.                 'class' => 'AdminBundle\Entity\EventsType',
  49.                 'choice_label' => 'name',
  50.                 'choice_value' => 'id',
  51.                 'expanded' => false,
  52.                 'multiple' => false,
  53.             ))
  54.             ->add('Date'DateType::class, array('label' => "Date de l'évènement"'widget' => 'single_text''format' => 'dd/MM/yyyy'"constraints" => array( new NotBlank())))
  55.             ->add('Comment'TextareaType::class, array('label' => "Précisez-nous svp de quel type d’événement il s’agit, et du type de lieu si possible"'required'  => false))
  56.             ->add('acceptRgpd'CheckboxType::class, [
  57.                 'label'    => "J'accepte de recevoir le sms et le devis par mail",
  58.                 'required' => true,
  59.             ])
  60.             ->add('recaptcha'EWZRecaptchaType::class, array('label' => " ",
  61.                 'attr'        => array(
  62.                     'options' => array(
  63.                         'theme' => 'light',
  64.                         'type'  => 'image',
  65.                         'size'  => 'normal',
  66.                     )
  67.                 ),
  68.                 'mapped'      => false,
  69.                 'constraints' => array(
  70.                     new RecaptchaTrue()
  71.                 )
  72.             ))
  73.         ;;
  74.         $builder->get('City')
  75.             ->addModelTransformer(new NumberIdTransformer($this->em'APIBundle:City'));
  76.         $ff $builder->getFormFactory();
  77.         $func = function (FormEvent $e) use ($ff) {
  78.             $data $e->getData();
  79.             $form $e->getForm();
  80.             $choices = array();
  81.             if (!empty($data['City'])) {
  82.                 $em $this->options['entity_manager'];
  83.                 $city $em->getRepository("APIBundle:City")->findOneBy(array("id" => $data['City'], "cp" => $data['PostalCode']));
  84.                 if ($city)
  85.                 {
  86.                     $choices = array($city->getName() => $city->getId());
  87.                 }
  88.             }
  89.             $form->add($ff->createNamed('City'ChoiceType::class, null, array("auto_initialize" => false"choices" => $choices
  90.             )));
  91.         };
  92.         $builder->addEventListener(FormEvents::PRE_SUBMIT$func);
  93.        // $builder->addEventListener(FormEvents::PRE_SET_DATA, $func);
  94.         $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
  95.             $product $event->getData();
  96.             $form $event->getForm();
  97.             if ( $this->options['user']->isGranted('ROLE_ADMIN')) {
  98.                 $form->add('shadow'CheckboxType::class, array(
  99.                     'label'    => "Envoyer le devis avec ma signature",
  100.                     'mapped' => true,
  101.                     'required' => false,
  102.                 ));
  103.                 $form->add('full'CheckboxType::class, array(
  104.                     'label'    => "Afficher tous les groupes",
  105.                     'mapped' => true,
  106.                     'required' => false,
  107.                 ));
  108.                 $form->add('SendSms'CheckboxType::class, array(
  109.                     'label'    => "Envoyer le SMS",
  110.                     'mapped' => true,
  111.                     'required' => false,
  112.                 ));
  113.             }
  114.         });
  115.     }
  116.     public function configureOptions(OptionsResolver $resolver)
  117.     {
  118.         $resolver->setRequired('entity_manager');
  119.         $resolver->setDefaults(array(
  120.             'data_class' => Devis::class,
  121.             'user' => null
  122.         ));
  123.     }
  124. }