<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Form\Type\Compte;
use Rollerworks\Component\PasswordStrength\Validator\Constraints as RollerworksPassword;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use App\Repository\ParametresDiversRepository;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\{
NotBlank,
Length
};
use App\Services\TelephoneInternational;
use \App\Services\ManagerEntity\LocalisationsManagers;
use Symfony\Component\Form\ChoiceList\ChoiceList;
use Symfony\Component\Form\Extension\Core\Type\{
ChoiceType,
SubmitType,
TextareaType,
IntegerType,
TextType
};
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Helper\Utils;
use Symfony\Component\Security\Core\Security;
use App\Services\Encryptage\AesEncrytageStrategy;
class ProfilType extends AbstractType {
/**
* @var AesEncrytageStrategy
*/
private $encrypt;
/**
* @var Security
*/
private $security;
/**
*
* @var type
*/
private $parametresDiversRepository;
private TelephoneInternational $telephoneInternational;
/**
* @var \App\Services\ManagerEntity\LocalisationsManagers
*/
private $localisationsManagers;
public function __construct(Security $security, AesEncrytageStrategy $aesEncrytageStrategy, ParametresDiversRepository $parametresDiversRepository, TelephoneInternational $telephoneInternational, LocalisationsManagers $localisationsManagers) {
$this->security = $security;
$this->localisationsManagers = $localisationsManagers;
$this->telephoneInternational = $telephoneInternational;
$this->parametresDiversRepository = $parametresDiversRepository;
$this->encrypt = $aesEncrytageStrategy;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
* @return void
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
// var_dump( $this->encrypt->decryptage($this->security->getUser()->password) );die;
$builder
->add('nom', TextType::class, [
"data" => html_entity_decode($this->security->getUser()->nom_utilisateur),
])
->add('prenom', TextType::class, [
"data" => html_entity_decode($this->security->getUser()->prenom_utilisateur),
])
->add('email', TextType::class, [
"data" => $this->security->getUser()->email_utilisateur,
])
->add('telephone', TextType::class, [
"data" => $this->encrypt->decryptage($this->security->getUser()->telephone_utilisateur),
])
->add(
'indicatif',
ChoiceType::class,
[
'choices' => $this->telephoneInternational->listIndicatifChoiceForm(),
'attr' => ['class' => 'form-control'],
'choice_attr' => function ($key, $val, $index) {
return ($key == "") ? ['disabled' => 'disabled'] : [];
},
'data' => $this->security->getUser()->indicatif_tel,
]
)
->add('societe', TextType::class,
[
'data' => $this->security->getUser()->societe_utilisateur
]
)
->add('fonction', TextType::class,
[
'data' => $this->security->getUser()->fonction_utilisateur
])
->add('adresse', TextareaType::class,
[
'data' => $this->security->getUser()->adresse_utilisateur
])
->add('code_postal', TextType::class,
[
'data' => $this->security->getUser()->code_postal_utilisateur
])
->add('ville', TextType::class,
[
'data' => $this->security->getUser()->ville_utilisateur
])
->add('langue_utilisee', ChoiceType::class,
[
"required" => true,
"attr" => ["autocomplete" => "off", "class" => "form-control"],
"choices" => Utils::reverseArrayKeyValueValueKey($this->parametresDiversRepository->getLangueForSelect()),
'data' => $this->security->getUser()->langue_utilisee
]
)
->add('pays', ChoiceType::class,
[
"choices" => $this->listPays(),
'choice_attr' => function ($key, $val, $index) {
return ($key == "") ? ['disabled' => 'disabled'] : [];
},
'data' => $this->security->getUser()->id_pays_utilisateur,
"attr" => [
],
]
)
->add('tva_Intracommunautaire', TextType::class, [
'data' => $this->security->getUser()->tva_intracommunautaire
])
->add('submit_profil_form', SubmitType::class, [
'label' => 'modifier',
'attr' => ['class' => 'btn btn-bleu active'],
])->addEventSubscriber(new ProfilFormListener($this->security, $this->encrypt, $this->parametresDiversRepository, $this->telephoneInternational, $this->localisationsManagers))
///
->add('password', TextType::class, [
])
->add('new_password', RepeatedType::class, [
'type' => PasswordType::class,
'first_options' => [
'attr' => ['autocomplete' => 'new-password'],
'constraints' => [
],
'label' => "le nouveau mot de passe",
],
'second_options' => [
'attr' => ['autocomplete' => 'new-password'],
'label' => "confirmer le nouveau mot de passe",
],
'invalid_message' => 'le nouveau mot de passe et sa confirmation ne sont pas identiques',
// Instead of being set onto the object directly,
// this is read and encoded in the controller
// 'mapped' => false,
])
->add('submit_password_form', SubmitType::class, [
'label' => "changer",
'attr' => ['class' => 'btn btn-bleu active'],
])
->add('submit_email_form', SubmitType::class, [
'label' => "changer",
'attr' => ['class' => 'btn btn-bleu active'],
])
;
}
/**
* @param OptionsResolver $resolver
* @return void
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
'data_class' => null,
'csrf_protection' => false,
'allow_extra_fields' => true,
]);
}
/**
* @return string
*/
public function getBlockPrefix() { // pour unifier avec les inputs definis dans html
return 'form';
}
/**
* Récupère la liste des pays en excluant les DOM-TOM
*
* Cette méthode retourne un tableau associatif des pays disponibles
* en filtrant les départements et territoires d'outre-mer (DOM-TOM).
* Le tableau retourné utilise le nom de la localisation comme clé
* et l'identifiant de localisation comme valeur.
*
* @return array<string, string> Tableau associatif [nom_localisation => id_localisation]
*/
private function listPays(): array { // sans les DOM_TOM
$nomDomTom = array_column($this->localisationsManagers->getListDOMTOM(), "nom_localisation");
$list = [];
foreach ($this->localisationsManagers->getListPays(true) as $pays) {
if (in_array($pays["nom_localisation"], $nomDomTom)) {
continue;
}
$list[$pays["nom_localisation"]] = $pays["id_localisation"];
}
return $list;
}
}