src/Form/Type/NewslettersInscriptionType.php line 24

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. /**
  3.  * @author Mehrez Labidi
  4.  */
  5. namespace App\Form\Type;
  6. use App\Form\Models\NewslettersInscription;
  7. use App\Helper\TransProvider;
  8. use App\Services\ManagerEntity\LocalisationsManagers;
  9. use App\Services\ManagerEntity\PaysManagers;
  10. use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
  11. use stdClass;
  12. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  13. use Symfony\Component\Form\AbstractType;
  14. use Symfony\Component\Form\Extension\Core\Type\{ChoiceType,RepeatedType,TextType};
  15.  
  16.  
  17. use Symfony\Component\Form\FormBuilderInterface;
  18. use Symfony\Component\Form\FormEvent;
  19. use Symfony\Component\Form\FormEvents;
  20. use Symfony\Component\OptionsResolver\OptionsResolver;
  21. class NewslettersInscriptionType extends AbstractType
  22. {
  23.     /**
  24.      * @var TransProvider
  25.      */
  26.     private TransProvider $transProvider;
  27.     /**
  28.      * @var ContainerBagInterface
  29.      */
  30.     private ContainerBagInterface $params;
  31.     /**
  32.      * @var PaysManagers
  33.      */
  34.     private PaysManagers $paysManagers;
  35.     /**
  36.      * @var LocalisationsManagers
  37.      */
  38.     private LocalisationsManagers $localisationsManagers;
  39.     /**
  40.      * @param TransProvider $transProvider
  41.      * @param ContainerBagInterface $params
  42.      * @param PaysManagers $paysManagers
  43.      * @param LocalisationsManagers $localisationsManagers
  44.      */
  45.     public function __construct(TransProvider $transProviderContainerBagInterface $paramsPaysManagers $paysManagersLocalisationsManagers $localisationsManagers)
  46.     {
  47.         $this->transProvider $transProvider;
  48.         $this->params $params;
  49.         $this->paysManagers $paysManagers;
  50.         $this->localisationsManagers $localisationsManagers;
  51.     }
  52.     /**
  53.      * @param FormBuilderInterface $builder
  54.      * @param array $options
  55.      * @return void
  56.      */
  57.     public function buildForm(FormBuilderInterface $builder, array $options)
  58.     {
  59.         $builder
  60.             ->add('mail'TextType::class, [
  61.                 'required' => false
  62.             ])
  63.             ->add('mail'RepeatedType::class, [
  64.                 'required' => false
  65.             ])
  66.             ->add('pays'ChoiceType::class, [
  67.                 'required' => false,
  68.                  'attr' => ['v-model' => 'pays' 'class' => 'form-control'], // event Vuejs
  69.                 'choices' => $this->transChoice($this->listChoixPays()->listChoix),
  70.                 'choice_attr' => function ($key$val$index) {
  71.                     return ($key == "") ? ['disabled' => 'disabled'] : [];
  72.                 },
  73.                 'data' => $this->listChoixPays()->defaultChoix
  74.             ])
  75.             ->add('region'ChoiceType::class,
  76.                 [
  77.                      "attr" => ["autocomplete" => "off",   'class' => 'form-control'
  78.                 ]
  79.             )
  80.             ->add('metier'ChoiceType::class, [
  81.                 'required' => false,
  82.                    "attr" => ["autocomplete" => "off",   'class' => 'form-control'] ,
  83.                 'choices' => $this->transChoice(FormChoices::listMetiersletters()),
  84.             ])
  85.             ->add('pays_newsletter'ChoiceType::class, [
  86.                 'choices' => $this->transChoice($this->listChoixPaysNewsletter()->listChoix),
  87.                    "attr" => ["autocomplete" => "off" ] ,
  88.                 'data' => $this->listChoixPaysNewsletter()->defaultChoix,
  89.                 'expanded' => true,
  90.                 'multiple' => true'label_html' => true,
  91.             ])
  92.             ->add('recaptcha'EWZRecaptchaType::class,
  93.                 ['mapped' => false,'language' => $this->transProvider->getLocale()]
  94.             )
  95.             ->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
  96.                 // get the form from the event
  97.                 $form $event->getForm();
  98.                 // get the form element and its options
  99.                 $config $form->get('region')->getConfig();
  100.                 $options $config->getOptions();
  101.                 // get the form data, that got submitted by the user with this request / event
  102.                 $data $event->getData();
  103.                 if (array_key_exists("region"$data)) {
  104.                     $pays $data["pays"];
  105.                     $region $data["region"];
  106.                     $form->add(
  107.                         'region'ChoiceType::class,
  108.                         [
  109.                             'choices' => $this->listChoixRegion($pays),
  110.                             'data' => $region
  111.                         ]
  112.                     );
  113.                 }
  114.             });
  115.     }
  116.     /**
  117.      * @param $var
  118.      * @return mixed|string
  119.      */
  120.     private function transChoice($var)
  121.     {
  122.         if (is_string($var)) {
  123.             $var $this->transProvider
  124.                 ->translate($var"""M");
  125.         }
  126.         if (is_array($var)) {
  127.             foreach ($var as $key => $item) {
  128.                 unset($var[$key]);
  129.                 $key $this->transProvider
  130.                     ->translate($key"""M");
  131.                 $var[$key] = $item;
  132.             }
  133.         }
  134.         return $var;
  135.     }
  136.     /**
  137.      * @return stdClass
  138.      */
  139.     private function listChoixPays()
  140.     {
  141.         $list $this->paysManagers->getListPaysNewsletters();
  142.         $result = new stdClass();
  143.         $result->defaultChoix NULL;
  144.         $result->listChoix FormChoices::selectionnerChoisir();
  145.         foreach ($list as $item) {
  146.             $result->listChoix[$item["nomPays"]] = $item["idLocalisation"];
  147.             if ($_SESSION['codePays'] && ($_SESSION['codePays'] == strtolower($item['codePays']))) {
  148.                 $result->defaultChoix strtolower($item['idLocalisation']);
  149.             }
  150.         }
  151.         return $result;
  152.     }
  153.     /**
  154.      * @return array
  155.      */
  156.     private function listChoixPaysNewsletter()
  157.     {
  158.         $paramsNewslettersPays $this->params->get('app.newsletters_pays');
  159.         $return = new stdClass();
  160.         $return->defaultChoix NULL;
  161.         $result = [];
  162.         // on prend  codePays de session pour afficher le pays du site en premier
  163.         foreach ($paramsNewslettersPays as $item) {
  164.             if ($_SESSION['codePays'] == strtolower($item[1])) {
  165.                 $return->defaultChoix = [=> strtolower($item[1])];
  166.                 $tmpVar html_entity_decode(" <img src='http://www.help-fusacq.com/fr/images/$item[3].png' alt='$item[0]'> ") . $item[0];
  167.             }
  168.             $result[html_entity_decode(" <img src='http://www.help-fusacq.com/fr/images/$item[3].png' alt='$item[0]'> ") . $item[0]] = strtolower($item[1]);
  169.         }
  170.         if (isset($tmpVar)) {
  171.             $result = [$tmpVar => $_SESSION['codePays']] + $result;
  172.         }
  173.         $return->listChoix $result;
  174.         return $return;
  175.     }
  176.     /**
  177.      * @param $idlocalisation
  178.      * @return array
  179.      */
  180.     private function listChoixRegion($idlocalisation)
  181.     {
  182.         $result FormChoices::selectionnerChoisir();
  183.         foreach ($this->localisationsManagers->getListRegionsByCountry($idlocalisation) as $item) {
  184.             $result[$item["nom_localisation"]] = $item["id_localisation"];
  185.         }
  186.         return $result;
  187.     }
  188.     /**
  189.      * @param OptionsResolver $resolver
  190.      * @return void
  191.      */
  192.     public function configureOptions(OptionsResolver $resolver)
  193.     {
  194.         $resolver->setDefaults([
  195.             'data_class' => NewslettersInscription::class,
  196.             'csrf_protection' => false,
  197.             'allow_extra_fields' => true,
  198.         ]);
  199.     }
  200.     /**
  201.      * @return string
  202.      */
  203.     public function getBlockPrefix()
  204.     { // pour unifier avec les inputs definis dans html
  205.         return 'form';
  206.     }
  207. }