src/Form/Type/ContactezNousType.php line 73

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Form\Type;
  7. use App\Form\DataTransformer\MessageTransformer;
  8. use App\Form\Models\ContactezNous;
  9. use App\Helper\TransProvider;
  10. use App\Helper\Utils;
  11. use App\Services\TelephoneInternational;
  12. use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
  13. use Symfony\Component\Form\AbstractType;
  14. use Symfony\Component\Form\ChoiceList\ChoiceList;
  15. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  16. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  17. use Symfony\Component\Form\Extension\Core\Type\TextType;
  18. use Symfony\Component\Form\FormBuilderInterface;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. use App\Validator\Constraints\Emoji;
  21. class ContactezNousType extends AbstractType {
  22.     /**
  23.      * @var MessageTransformer
  24.      */
  25.     private $messageTransformer;
  26.     /**
  27.      * @var TelephoneInternational
  28.      */
  29.     private $telephoneInternational;
  30.     /**
  31.      * @var TransProvider
  32.      */
  33.     private $transProvider;
  34.     public function __construct(TransProvider $transProviderMessageTransformer $messageTransformerTelephoneInternational $telephoneInternational) {
  35.         $this->transProvider $transProvider;
  36.         $this->messageTransformer $messageTransformer;
  37.         $this->telephoneInternational $telephoneInternational;
  38.     }
  39.     /**
  40.      * @param FormBuilderInterface $builder
  41.      * @param array $options
  42.      * @return void
  43.      */
  44.     public function buildForm(FormBuilderInterface $builder, array $options) {
  45.         $builder
  46.                 ->add('type_contact'ChoiceType::class, [
  47.                     'choices' => $this->transChoice(FormChoices::typeContact()),
  48.                     'attr' => ['v-model' => 'type_contact''class' => 'form-control']
  49.                 ])
  50.                 ->add('civilite'ChoiceType::class, [
  51.                     'choices' => $this->transChoice(['M' => 'masculin''Mme' => 'feminin']),
  52.                     'expanded' => true,
  53.                     'multiple' => false,
  54.                 ])
  55.                 ->add('nom'TextType::class)
  56.                 ->add('prenom'TextType::class)
  57.                 ->add('email'TextType::class)
  58.                 ->add('telephone'TextType::class)
  59.                 ->add('indicatif',
  60.                         ChoiceType::class,
  61.                         [
  62.                             'choices' => $this->telephoneInternational->listIndicatifChoiceForm(),
  63.                             'attr' => ['class' => 'form-control'],
  64.                             'choice_attr' => function ($key$val$index) {
  65.                                 return ($key == "") ? ['disabled' => 'disabled'] : [];
  66.                             },
  67.                             'data' => Utils::firstValInArray($this->telephoneInternational->listIndicatifChoiceForm())
  68.                         ]
  69.                 )
  70.                 ->add('contenu_question',
  71.                         TextareaType::class,
  72.                         [
  73.                             "required" => false,
  74.                             "constraints" => [
  75.                                 new Emoji()
  76.                             ],
  77.                             "attr" => [
  78.                                 "autocomplete" => "off",
  79.                                 "rows" => 15
  80.                             ]
  81.                         ]
  82.                 )
  83.                 ->addViewTransformer($this->messageTransformertrue);
  84.         $builder->add('recaptcha'EWZRecaptchaType::class,
  85.                 ['mapped' => false'language' => $this->transProvider->getLocale()]
  86.         );
  87.         $builder->add('website'TextType::class, [// "website" semble légitime
  88.             'label' => 'Site web'// Label qui paraît normal
  89.             'required' => false,
  90.             'mapped' => false,
  91.             'attr' => [
  92.                 'autocomplete' => 'off',
  93.                 'tabindex' => '-1',
  94.                 'class' => 'hp-field' // Nom de classe discret
  95.             ]
  96.         ]);
  97.         $builder->add('company'TextType::class, [// "website" semble légitime
  98.             'label' => 'company'// Label qui paraît normal
  99.             'required' => false,
  100.             'mapped' => false,
  101.             'attr' => [
  102.                 'autocomplete' => 'off',
  103.                 'tabindex' => '-1',
  104.                 'class' => 'hp-field' // Nom de classe discret
  105.             ]
  106.         ]);
  107.     }
  108.     /**
  109.      * @param $var
  110.      * @return mixed|string
  111.      */
  112.     private function transChoice($var) {
  113.         if (is_string($var)) {
  114.             $var $this->transProvider
  115.                     ->translate($var"""M");
  116.         }
  117.         if (is_array($var)) {
  118.             foreach ($var as $key => $item) {
  119.                 unset($var[$key]);
  120.                 $key $this->transProvider
  121.                         ->translate($key"""M");
  122.                 $var[$key] = $item;
  123.             }
  124.         }
  125.         return $var;
  126.     }
  127.     /**
  128.      * @param OptionsResolver $resolver
  129.      * @return void
  130.      */
  131.     public function configureOptions(OptionsResolver $resolver) {
  132.         $resolver->setDefaults([
  133.             'data_class' => ContactezNous::class,
  134.             'csrf_protection' => true,
  135.             'csrf_field_name' => '_token',
  136.             'csrf_token_id' => 'contact_form',
  137.             'allow_extra_fields' => true,
  138.         ]);
  139.     }
  140.     /**
  141.      * @return string
  142.      */
  143.     public function getBlockPrefix() { // pour unifier avec les inputs definis dans html
  144.         return 'form';
  145.     }
  146. }