src/Form/UserPartnerInscriptionType.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\User;
  4. use Symfony\Component\Form\AbstractType;
  5. use Symfony\Component\Form\FormBuilderInterface;
  6. use Symfony\Component\OptionsResolver\OptionsResolver;
  7. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  8. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  9. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  10. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  11. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\Validator\Constraints\Regex;
  15. use Vich\UploaderBundle\Form\Type\VichImageType;
  16. use App\Entity\Job;
  17. use Doctrine\ORM\EntityRepository;
  18. use App\Service\DynamicHostService;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use Symfony\Component\Form\FormEvents;
  21. use Symfony\Component\Form\FormEvent;
  22. class UserPartnerInscriptionType extends AbstractType
  23. {
  24.      public function __construct(
  25.         private DynamicHostService $dynamicHostService,
  26.          private EntityManagerInterface $entityManager
  27.     ){}
  28.     public function buildForm(FormBuilderInterface $builder, array $options): void
  29.     {
  30.         $builder
  31.             ->add('gender'ChoiceType::class, [
  32.                 'label' => 'Civilité',
  33.                 'choices' => [
  34.                     'Monsieur' => 'Monsieur',
  35.                     'Madame' => 'Madame',
  36.                 ],
  37.                 'placeholder' => 'Choisissez',
  38.             ])
  39.             ->add('firstname'TextType::class, [
  40.                 'label' => 'Prénom:'
  41.                 'required' =>false
  42.             ])
  43.             ->add('lastname'TextType::class, [
  44.                 'label' => 'Nom:',
  45.                 'required' =>false
  46.             ])
  47.             ->add('cellPhone'TextType::class, [
  48.                 'label' => 'Téléphone:',
  49.                 'constraints' => [
  50.                     new Regex([
  51.                         'pattern' => '/^[0-9\s+]+$/',
  52.                         'message' => 'Ce numéro de téléphone n\'est pas valide',
  53.                     ]),
  54.                 ],
  55.                 'attr' => [
  56.                     'pattern' => '^(?:\(?(?:(?:\+|00)(?:216|33)|0)[1-9]\d{7})\)?[\.\-\s]?\d{2}[\.\-\s]?\d{2}[\.\-\s]?\d{2}$',
  57.                 ],
  58.             ])
  59.             ->add('picture'VichImageType::class, [
  60.                 'required' => false,
  61.                 'label' => 'Photo:',
  62.                 'attr' => [
  63.                     'accept' => '.png, .jpg, .jpeg, .webp',
  64.                 ],
  65.             ])
  66.             ->add('email'TextType::class, [
  67.                 'label' => 'Email:',
  68.                 ])
  69.              ->add('password'PasswordType::class, [
  70.                     'label' => 'Mot de passe',
  71.                     'required' => false,
  72.                 ])
  73.             ->add('picture'VichImageType::class, [
  74.                 'required' => false,
  75.                 'label' => 'Photo:',
  76.                 'attr' => [
  77.                     'accept' => '.png, .jpg, .jpeg, .webp',
  78.                 ],
  79.             ])
  80.             //state 2
  81.             ->add('userData'UserDataType::class, [
  82.                 'label' => '',
  83.                 'required' => false
  84.                 ])
  85.             //step 3
  86.             ->add('dailyRate',TextType::class,['label'=>'TJM (Taux Journalier Moyen)'])
  87.             ->add('jobs',EntityType::class, [
  88.                 'label' => 'Métiers:',
  89.                 'class' => Job::class,
  90.                 'query_builder' => function (EntityRepository $entityRepository) {
  91.                         $queryBuilder $entityRepository->createQueryBuilder('j');
  92.                         $queryBuilder->andWhere(
  93.                             $queryBuilder->expr()->orX(
  94.                                 $queryBuilder->expr()->andX('j.deleted IS NULL'),
  95.                                 $queryBuilder->expr()->andX('j.deleted = :deleted '),
  96.                             )
  97.                         )
  98.                         ->addOrderBy('j.createdAt','DESC')
  99.                         ->addOrderBy('j.createdAt',null)
  100.                         ->setParameter('deleted',false)
  101.                             ;
  102.                         if($this->dynamicHostService->getCompany()!=null){
  103.                             $queryBuilder->andWhere('j.agency = :company')
  104.                             ->setParameter('company',$this->dynamicHostService->getCompany())
  105.                             ;
  106.                         }else{
  107.                             $queryBuilder->andWhere('j.agency IS NULL');
  108.                         }
  109.                         return  $queryBuilder
  110.                 },
  111.                 'multiple' => true,             
  112.                 'expanded' => true
  113.                 'by_reference' => false,
  114.             ])
  115.         ;
  116.         // Ajoutez un listener pour l'événement PRE_SUBMIT
  117.         $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event)  {
  118.                 $data $event->getData();
  119.                 $form $event->getForm()->getData();
  120.                 $userExist $this->entityManager->getRepository(User::class)->findOneBy(['email'=>$data['email']]);
  121.                 //si utilisateur existe et c'est la creation de sous traitant
  122.                 
  123.                 if (!is_null($userExist)) {
  124.                     $emailUniq uniqid().$userExist->getEmail();
  125.                     $form->setEnabled(false)
  126.                         ->setNewAdd(false)
  127.                         ->setParent($userExist)
  128.                         ->setPassword($userExist->getPassword())
  129.                         ->setOriginalEmail($userExist->getEmail());
  130.                     $data['email'] =  $emailUniq;
  131.                 }
  132.                 $event->setData($data);
  133.             });
  134.     }
  135.     public function configureOptions(OptionsResolver $resolver): void
  136.     {
  137.         $resolver->setDefaults([
  138.             'data_class' => User::class,
  139.         ]);
  140.     }
  141. }