src/Form/UserType.php line 152

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Country;
  4. use App\Entity\Region;
  5. use App\Entity\City;
  6. use App\Entity\School;
  7. use App\Entity\User;
  8. use App\Entity\Role;
  9. use Doctrine\ORM\EntityRepository;
  10. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  11. use Symfony\Component\Form\AbstractType;
  12. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  13. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  14. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  15. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  16. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  17. use Symfony\Component\Form\Extension\Core\Type\TextType;
  18. use Symfony\Component\Form\FormBuilderInterface;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. use App\Tools\Utils;
  21. use function Sodium\add;
  22. class UserType extends AbstractType {
  23.     /**
  24.      * {@inheritdoc}
  25.      */
  26.     public function buildForm(FormBuilderInterface $builder, array $options) {
  27.         $builder
  28.             ->add('country'EntityType::class, [
  29.                 'class' => Country::class,
  30.                 'required' => false,
  31.                 'placeholder' => 'menu.select_country',
  32.                 'attr' => [
  33.                     'class' => 'form-control',
  34.                     'data-error' => 'Pays non autorisé ou inconnu',
  35.                 ],
  36.                 'query_builder' => function (EntityRepository $entityRepository) {
  37.                     return $entityRepository->createQueryBuilder('a')
  38.                         ->where('a.valid = true')
  39.                         ->orderBy('a.name''ASC');
  40.                 }
  41.             ])
  42.             ->add('region'EntityType::class, [
  43.                 'class' => Region::class,
  44.                 'required' => false,
  45.                 'placeholder' => 'menu.select_region',
  46.                 'attr' => [
  47.                     'class' => 'form-control',
  48.                     'data-error' => 'Region non autorisé ou inconnu',
  49.                 ],
  50.                 'query_builder' => function (EntityRepository $entityRepository) {
  51.                     return $entityRepository->createQueryBuilder('a')
  52.                         ->where('a.valid = true')
  53.                         ->orderBy('a.name''ASC');
  54.                 }
  55.             ])
  56.             ->add('diaspora'CheckboxType::class, [
  57.                 'attr' => ['class' => 'form-control''label' => 'menu.diaspora ?'],
  58.                 'required' => false
  59.             ])
  60.             ->add('residenceCountry'EntityType::class, [
  61.                 'required' => false,
  62.                 'class' => Country::class,
  63.                 'placeholder' => 'Sélectionnez votre pays de résidence',
  64.                 'attr' => [
  65.                     'class' => 'form-control',
  66.                     'data-error' => 'Pays non autorisé ou inconnu',
  67.                 ],
  68.                 'query_builder' => function (EntityRepository $entityRepository) {
  69.                     return $entityRepository->createQueryBuilder('a')
  70.                         ->orderBy('a.name''ASC');
  71.                 }
  72.             ])
  73.             ->add('residenceRegion'EntityType::class, [
  74.                 'required' => false,
  75.                 'class' => Region::class,
  76.                 'placeholder' => 'graduate.select_your_residence_country',
  77.                 'attr' => [
  78.                     'class' => 'form-control',
  79.                     'data-error' => 'error.unauthorized_or_unknown_country',
  80.                 ],
  81.                 'query_builder' => function (EntityRepository $entityRepository) {
  82.                     return $entityRepository->createQueryBuilder('a')
  83.                         ->orderBy('a.name''ASC');
  84.                 }
  85.             ])
  86.             ->add('phone'TextType::class, [
  87.                 'attr' => [
  88.                     'class' => 'form-control',
  89.                     'data-minlength' => '6',
  90.                     'data-error' => 'Minimum 9 caractère',
  91.                     'placeholder' => 'menu.phone_number'
  92.                 ],
  93.                 'required' => true
  94.             ])
  95.             ->add('validCode'TextType::class, [
  96.                 'attr' => [
  97.                     'class' => 'form-control',
  98.                     'placeholder' => 'Code'
  99.                 ],
  100.                 'required' => false
  101.             ])
  102.             ->add('username'TextType::class, [
  103.                 'attr' => [
  104.                     'class' => 'form-control',
  105.                     'data-minlength' => '6',
  106.                     'data-error' => 'Minimum 4 caractère',
  107.                     'placeholder' => 'Pseudo'
  108.                 ],
  109.                 'required' => false
  110.             ])
  111.             ->add('email'TextType::class, [
  112.                 'attr' => [
  113.                     'class' => 'form-control',
  114.                     'data-error' => 'Email invalide',
  115.                     'placeholder' => 'menu.email'
  116.                 ],
  117.                 'required' => false
  118.             ])
  119.             ->add('password'PasswordType::class, [
  120.                 'attr' => [
  121.                     'class' => 'form-control',
  122.                     'data-minlength' => '6',
  123.                     'data-error' => 'Minimum 6',
  124.                     'placeholder' => 'menu.password'
  125.                 ],
  126.                 'required' => true
  127.             ])
  128.             ->add('plainPassword'RepeatedType::class, [
  129.                 'type' => PasswordType::class,
  130.                 'required' => true,
  131.                 'first_options' => ['label' => 'menu.password',
  132.                     'attr' => [
  133.                         'class' => 'form-control',
  134.                         'data-minlength' => '6',
  135.                         'data-error' => 'Minimum 6',
  136.                         'placeholder' => 'menu.password'
  137.                     ]],
  138.                 'second_options' => ['label' => 'Repeter le mot de passe',
  139.                     'attr' => [
  140.                         'class' => 'form-control',
  141.                         'placeholder' => 'menu.confirm'
  142.                     ]],
  143.             ])
  144.             // Enpecher l'admin d'ajouter des users avec un role DIPLOME ou ENTREPRISE ou ETABLISSEMENT (realisé en js)
  145.             ->add('profils'EntityType::class, [
  146.                 'class' => Role::class,
  147.                 'multiple' => true,
  148.                 'query_builder' => function (EntityRepository $r) {
  149.                     return $r->createQueryBuilder('ig')
  150.                         // ->where('ig.role != :role1')
  151.                         // ->andWhere('ig.role != :role2')
  152.                         // ->andWhere('ig.role != :role3')
  153.                         // ->setParameters([':role1'=> 'ROLE_DIPLOME' , ':role2'=> 'ROLE_ENTREPRISE', ':role3'=> 'ROLE_ETABLISSEMENT',])
  154.                         ->orderBy('ig.pseudo''ASC');
  155.                 },
  156.                 'attr' => [
  157.                     'class' => 'form-control select2',
  158.                 ]
  159.             ])
  160.             ->add('typePerson'ChoiceType::class, [
  161.                 'mapped' => false,
  162.                 'placeholder' => 'menu.select',
  163.                 'choices' => [
  164.                     'menu.company' => Utils::COMPANY,
  165.                     'menu.establishment' => Utils::SCHOOL,
  166.                     'menu.graduate' => Utils::PERSON_DEGREE,
  167.                 ],
  168.                 'attr' => ['class' => 'form-control']
  169.             ])
  170.             ->add('adminRegions'EntityType::class, [
  171.                 'class' => Region::class,
  172.                 'required' => false,
  173.                 'multiple' => true,
  174.                 'query_builder' => function (EntityRepository $entityRepository) {
  175.                     return $entityRepository->createQueryBuilder('r')
  176.                         ->leftJoin('r.country''c')
  177.                         ->where('c.valid = true');
  178.                 },
  179.                 'attr' => [
  180.                     'class' => 'form-control select2',
  181.                 ]
  182.             ])
  183.             ->add('adminCities'EntityType::class, [
  184.                 'class' => City::class,
  185.                 'required' => false,
  186.                 'multiple' => true,
  187.                 'attr' => [
  188.                     'class' => 'form-control select2',
  189.                     'id' => 'idAdminCities',
  190.                 ]
  191.             ])
  192.             ->add('school'EntityType::class, [
  193.                 'class' => School::class,
  194.                 'required' => false,
  195.                 'placeholder' => 'menu.select',
  196.                 'attr' => [
  197.                     'class' => 'form-control',
  198.                     'data-error' => 'Etablissement non autorisé ou inconnu',
  199.                 ],
  200.                 'query_builder' => function (EntityRepository $entityRepository) {
  201.                     return $entityRepository->createQueryBuilder('a')
  202.                         ->orderBy('a.name''ASC');
  203.                 }
  204.             ])
  205.         ;
  206.     }
  207.     /**
  208.      * {@inheritdoc}
  209.      */
  210.     public function configureOptions(OptionsResolver $resolver) {
  211.         $resolver->setDefaults([
  212.             'data_class' => User::class
  213.         ]);
  214.     }
  215.     /**
  216.      * {@inheritdoc}
  217.      */
  218.     public function getBlockPrefix(): string {
  219.         return 'userbundle_user';
  220.     }
  221. }