src/Form/Type/Compte/ProfilType.php line 132

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Form\Type\Compte;
  7. use Rollerworks\Component\PasswordStrength\Validator\Constraints as RollerworksPassword;
  8. use Symfony\Component\Form\AbstractType;
  9. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  10. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  11. use App\Repository\ParametresDiversRepository;
  12. use Symfony\Component\Validator\Constraints as Assert;
  13. use Symfony\Component\Validator\Constraints\{
  14.     NotBlank,
  15.     Length
  16. };
  17. use App\Services\TelephoneInternational;
  18. use \App\Services\ManagerEntity\LocalisationsManagers;
  19. use Symfony\Component\Form\ChoiceList\ChoiceList;
  20. use Symfony\Component\Form\Extension\Core\Type\{
  21.     ChoiceType,
  22.     SubmitType,
  23.     TextareaType,
  24.     IntegerType,
  25.     TextType
  26. };
  27. use Symfony\Component\Form\FormBuilderInterface;
  28. use Symfony\Component\OptionsResolver\OptionsResolver;
  29. use App\Helper\Utils;
  30. use Symfony\Component\Security\Core\Security;
  31. use App\Services\Encryptage\AesEncrytageStrategy;
  32. class ProfilType extends AbstractType {
  33.     /**
  34.      * @var AesEncrytageStrategy
  35.      */
  36.     private $encrypt;
  37.     /**
  38.      * @var Security
  39.      */
  40.     private $security;
  41.     /**
  42.      *
  43.      * @var type
  44.      */
  45.     private $parametresDiversRepository;
  46.     private TelephoneInternational $telephoneInternational;
  47.     /**
  48.      * @var \App\Services\ManagerEntity\LocalisationsManagers
  49.      */
  50.     private $localisationsManagers;
  51.     public function __construct(Security $securityAesEncrytageStrategy $aesEncrytageStrategyParametresDiversRepository $parametresDiversRepositoryTelephoneInternational $telephoneInternationalLocalisationsManagers $localisationsManagers) {
  52.         $this->security $security;
  53.         $this->localisationsManagers $localisationsManagers;
  54.         $this->telephoneInternational $telephoneInternational;
  55.         $this->parametresDiversRepository $parametresDiversRepository;
  56.         $this->encrypt $aesEncrytageStrategy;
  57.     }
  58.     /**
  59.      * @param FormBuilderInterface $builder
  60.      * @param array                $options
  61.      * @return void
  62.      */
  63.     public function buildForm(FormBuilderInterface $builder, array $options) {
  64.         //   var_dump( $this->encrypt->decryptage($this->security->getUser()->password) );die;
  65.         $builder
  66.                 ->add('nom'TextType::class, [
  67.                     "data" => html_entity_decode($this->security->getUser()->nom_utilisateur),
  68.                 ])
  69.                 ->add('prenom'TextType::class, [
  70.                     "data" => html_entity_decode($this->security->getUser()->prenom_utilisateur),
  71.                 ])
  72.                 ->add('email'TextType::class, [
  73.                     "data" => $this->security->getUser()->email_utilisateur,
  74.                 ])
  75.                 ->add('telephone'TextType::class, [
  76.                     "data" => $this->encrypt->decryptage($this->security->getUser()->telephone_utilisateur),
  77.                 ])
  78.                 ->add(
  79.                         'indicatif',
  80.                         ChoiceType::class,
  81.                         [
  82.                             'choices' => $this->telephoneInternational->listIndicatifChoiceForm(),
  83.                             'attr' => ['class' => 'form-control'],
  84.                             'choice_attr' => function ($key$val$index) {
  85.                                 return ($key == "") ? ['disabled' => 'disabled'] : [];
  86.                             },
  87.                             'data' => $this->security->getUser()->indicatif_tel,
  88.                         ]
  89.                 )
  90.                 ->add('societe'TextType::class,
  91.                         [
  92.                             'data' => $this->security->getUser()->societe_utilisateur
  93.                         ]
  94.                 )
  95.                 ->add('fonction'TextType::class,
  96.                         [
  97.                             'data' => $this->security->getUser()->fonction_utilisateur
  98.                         ])
  99.                 ->add('adresse'TextareaType::class,
  100.                         [
  101.                             'data' => $this->security->getUser()->adresse_utilisateur
  102.                         ])
  103.                 ->add('code_postal'TextType::class,
  104.                         [
  105.                             'data' => $this->security->getUser()->code_postal_utilisateur
  106.                         ])
  107.                 ->add('ville'TextType::class,
  108.                         [
  109.                             'data' => $this->security->getUser()->ville_utilisateur
  110.                         ])
  111.                 ->add('langue_utilisee'ChoiceType::class,
  112.                         [
  113.                             "required" => true,
  114.                             "attr" => ["autocomplete" => "off""class" => "form-control"],
  115.                             "choices" => Utils::reverseArrayKeyValueValueKey($this->parametresDiversRepository->getLangueForSelect()),
  116.                             'data' => $this->security->getUser()->langue_utilisee
  117.                         ]
  118.                 )
  119.                 ->add('pays'ChoiceType::class,
  120.                         [
  121.                             "choices" => $this->listPays(),
  122.                             'choice_attr' => function ($key$val$index) {
  123.                                 return ($key == "") ? ['disabled' => 'disabled'] : [];
  124.                             },
  125.                             'data' => $this->security->getUser()->id_pays_utilisateur,
  126.                             "attr" => [
  127.                             ],
  128.                         ]
  129.                 )
  130.                 ->add('tva_Intracommunautaire'TextType::class, [
  131.                     'data' => $this->security->getUser()->tva_intracommunautaire
  132.                 ])
  133.                 ->add('submit_profil_form'SubmitType::class, [
  134.                     'label' => 'modifier',
  135.                     'attr' => ['class' => 'btn btn-bleu active'],
  136.                 ])->addEventSubscriber(new ProfilFormListener($this->security$this->encrypt$this->parametresDiversRepository$this->telephoneInternational$this->localisationsManagers))
  137.                 ///
  138.                 ->add('password'TextType::class, [
  139.                 ])
  140.                 ->add('new_password'RepeatedType::class, [
  141.                     'type' => PasswordType::class,
  142.                     'first_options' => [
  143.                         'attr' => ['autocomplete' => 'new-password'],
  144.                         'constraints' => [
  145.                         ],
  146.                         'label' => "le nouveau mot de passe",
  147.                     ],
  148.                     'second_options' => [
  149.                         'attr' => ['autocomplete' => 'new-password'],
  150.                         'label' => "confirmer le nouveau mot de passe",
  151.                     ],
  152.                     'invalid_message' => 'le nouveau mot de passe et sa confirmation ne sont pas identiques',
  153.                         // Instead of being set onto the object directly,
  154.                         // this is read and encoded in the controller
  155.                         //   'mapped' => false,
  156.                 ])
  157.                 ->add('submit_password_form'SubmitType::class, [
  158.                     'label' => "changer",
  159.                     'attr' => ['class' => 'btn btn-bleu active'],
  160.                 ])
  161.                 ->add('submit_email_form'SubmitType::class, [
  162.                     'label' => "changer",
  163.                     'attr' => ['class' => 'btn btn-bleu active'],
  164.                 ])
  165.         ;
  166.     }
  167.     /**
  168.      * @param OptionsResolver $resolver
  169.      * @return void
  170.      */
  171.     public function configureOptions(OptionsResolver $resolver) {
  172.         $resolver->setDefaults([
  173.             'data_class' => null,
  174.             'csrf_protection' => false,
  175.             'allow_extra_fields' => true,
  176.         ]);
  177.     }
  178.     /**
  179.      * @return string
  180.      */
  181.     public function getBlockPrefix() { // pour unifier avec les inputs definis dans html
  182.         return 'form';
  183.     }
  184.     /**
  185.      * Récupère la liste des pays en excluant les DOM-TOM
  186.      *
  187.      * Cette méthode retourne un tableau associatif des pays disponibles
  188.      * en filtrant les départements et territoires d'outre-mer (DOM-TOM).
  189.      * Le tableau retourné utilise le nom de la localisation comme clé
  190.      * et l'identifiant de localisation comme valeur.
  191.      *
  192.      * @return array<string, string> Tableau associatif [nom_localisation => id_localisation]
  193.      */
  194.     private function listPays(): array { // sans les DOM_TOM
  195.         $nomDomTom array_column($this->localisationsManagers->getListDOMTOM(), "nom_localisation");
  196.         $list = [];
  197.         foreach ($this->localisationsManagers->getListPays(true) as $pays) {
  198.             if (in_array($pays["nom_localisation"], $nomDomTom)) {
  199.                 continue;
  200.             }
  201.             $list[$pays["nom_localisation"]] = $pays["id_localisation"];
  202.         }
  203.         return $list;
  204.     }
  205. }