src/Form/RegistrationType.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use Symfony\Component\Form\AbstractType;
  4. use Symfony\Component\Form\FormBuilderInterface;
  5. use Symfony\Component\OptionsResolver\OptionsResolver;
  6. use Symfony\Component\HttpFoundation\Session\Session;
  7. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  8. use Symfony\Component\Form\Extension\Core\Type\TextType;
  9. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  10. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  11. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  12. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  13. use Symfony\Component\Form\Extension\Core\Type\ButtonType;
  14. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  15. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  16. use Symfony\Component\Form\Extension\Core\Type\DateType;
  17. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  18. use Gregwar\CaptchaBundle\Type\CaptchaType;
  19. use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;
  20. use Doctrine\ORM\EntityRepository;
  21. use Doctrine\ORM\EntityManager;
  22. class RegistrationType extends AbstractType
  23. {
  24.     public function buildForm(FormBuilderInterface $builder, array $options)
  25.     {
  26.         $session = new Session();
  27.         $fields=$options["fields"];
  28.         if(!is_array($fields)) $fields=[];
  29.         
  30.         $builder->add('submit',
  31.             SubmitType::class, array(
  32.                 "label"       => ($options["mode"]=="delete"?"Confirmer la Suppression":($options["mode"]=="submit"?"Confirmer":"Enregistrer et envoyer le mail")),
  33.                 "attr"        => ($options["mode"]=="delete"?array("class" => "btn btn-danger"):array("class" => "btn btn-success"))
  34.             )
  35.         );
  36.         if($options["mode"]=="send") {
  37.             $builder->add('save',
  38.                 SubmitType::class, array(
  39.                     "label"       => "Enregistrer sans envoyer le mail",
  40.                     "attr"        => array("class" => "btn btn-success")
  41.                 )
  42.             );
  43.             $builder->add('note',
  44.                 TextareaType::class, array(
  45.                     "label"       => "Notes Administrateur",
  46.                     "required"    => false,
  47.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  48.                     "attr"        => array("style" => "height: 130px")
  49.                 )
  50.             );             
  51.         }
  52.         # Obligatoire
  53.         $builder->add('username',
  54.             TextType::class, array(
  55.                 "label"       =>"Login",
  56.                 "disabled"    => ($options["mode"]=="submit"?false:true),
  57.                 "attr"        => array("autocomplete" => "new-password")
  58.             )
  59.         );
  60.         $builder->add('lastname',
  61.             TextType::class, array(  
  62.                 "label"       =>"Nom de Famille",
  63.                 "disabled"    => ($options["mode"]=="delete"?true:false),
  64.             )
  65.         );
  66.         $builder->add('email',
  67.             EmailType::class, array(
  68.                 "label" =>"Mail",
  69.                 "disabled" => ($options["mode"]=="delete"?true:false),
  70.             )
  71.         );
  72.         $builder->add('niveau01',
  73.             EntityType::class,
  74.             array("class"        => "App\Entity\Niveau01",
  75.                   "label"        => $session->get('labelniveau01'),
  76.                   'placeholder'  => '== Choisir '.$session->get('labelniveau01').' ==',
  77.                   "choice_label" => "label",              
  78.                   "query_builder"=> function (EntityRepository $er) {
  79.                         return $er->createQueryBuilder('niveau01')->orderBy('niveau01.label','ASC');
  80.                   },
  81.                   "disabled"     => ($options["mode"]=="delete"?true:false),
  82.                   "attr"         => array("readonly" => ($options["mode"]=="delete"?true:false))));        
  83.         $builder->add('niveau01other',
  84.             TextType::class, array(  
  85.                 "label"       =>"Autre ".$session->get('labelniveau01'). " *",
  86.                 "disabled"    => ($options["mode"]=="delete"?true:false),
  87.                 "required"    => false,
  88.             )
  89.         );
  90.         # Password
  91.         if($options["mode"]!="delete"&&$options["mode"]!="send") {
  92.             $builder->add('password',
  93.                 RepeatedType::class, array(
  94.                     "type" => PasswordType::class,
  95.                     "required" => ($options["mode"]=="submit"?true:false),
  96.                     "first_options"  => array("label" => "Mot de Passe","attr" => array("autocomplete" => "new-password")),
  97.                     "second_options" => array('label' => 'Confirmer Mot de Passe'),
  98.                     "invalid_message" => "Mot de passe non valide"
  99.                 )
  100.             );
  101.             
  102.             $builder->add('captcha',
  103.                 CaptchaType::class,array(
  104.                     "width" => 200,
  105.                     "height" => 50,
  106.                     "length" => 6,
  107.                 )
  108.             );
  109.         }                  
  110.         # En fonction de datauser
  111.         if(!array_key_exists("firstname",$fields)||$fields["firstname"]["perm"]!=0) {
  112.             $builder->add('firstname',
  113.                 TextType::class, array(  
  114.                     "label"       =>"Prénom",
  115.                     "required"    => (!array_key_exists("firstname",$fields)?false:($fields["firstname"]["perm"]==2)),
  116.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  117.                 )
  118.             );
  119.         }
  120.         if(!array_key_exists("visible",$fields)||$fields["visible"]["perm"]!=0) {
  121.             $choices=array("oui" => "1","non" => "0");
  122.             $builder->add("visible",
  123.                 ChoiceType::class,array(
  124.                     "label"       =>"Visible",
  125.                     "required"    => (!array_key_exists("visible",$fields)?false:($fields["visible"]["perm"]==2)),
  126.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  127.                     "choices"     => $choices
  128.                 )
  129.             );
  130.         }
  131.         if(!array_key_exists("usualname",$fields)||$fields["usualname"]["perm"]!=0) {
  132.             $builder->add('usualname',
  133.                 TextType::class, array(
  134.                     "label"       => "Nom d'Usage",
  135.                     "required"    => (!array_key_exists("usualname",$fields)?false:($fields["usualname"]["perm"]==2)),
  136.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  137.                 )
  138.             );  
  139.         }
  140.         
  141.         if(!array_key_exists("givensname",$fields)||$fields["givensname"]["perm"]!=0) {
  142.             $builder->add('givensname',
  143.                 TextType::class, array(
  144.                     "label"       => "Autre Prénom",
  145.                     "required"    => (!array_key_exists("givensname",$fields)?false:($fields["givensname"]["perm"]==2)),
  146.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  147.                 )
  148.             ); 
  149.         }
  150.       
  151.         if(!array_key_exists("telephonenumber",$fields)||$fields["telephonenumber"]["perm"]!=0) {
  152.             $builder->add('telephonenumber',
  153.                 TextType::class, array(
  154.                     "label"       => "Téléphone",
  155.                     "required"    => (!array_key_exists("telephonenumber",$fields)?false:($fields["telephonenumber"]["perm"]==2)),
  156.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  157.                 )
  158.             );  
  159.         }
  160.        
  161.         if(!array_key_exists("postaladress",$fields)||$fields["postaladress"]["perm"]!=0) {
  162.             $builder->add('postaladress',
  163.                 TextareaType::class, array(
  164.                     "label"       => "Adresse",
  165.                     "required"    => (!array_key_exists("postaladress",$fields)?false:($fields["postaladress"]["perm"]==2)),
  166.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  167.                     "attr"        => array("style" => "height: 90px")
  168.                 )
  169.             );  
  170.         }
  171.         if(!array_key_exists("birthdate",$fields)||$fields["birthdate"]["perm"]!=0) {
  172.             $builder->add('birthdate',
  173.                 DateType::class, array(
  174.                     "label"       => "Date de Naissance",
  175.                     "required"    => (!array_key_exists("birthdate",$fields)?false:($fields["birthdate"]["perm"]==2)),
  176.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  177.                     "widget"       => 'single_text',
  178.                     "format"       => "dd/MM/yyyy",
  179.                     "html5"        => false,
  180.                     "attr"         => array("readonly" => ($options["mode"]=="delete"?true:false)
  181.                     )
  182.                 )
  183.             );
  184.         }        
  185.    
  186.         if(!array_key_exists("gender",$fields)||$fields["gender"]["perm"]!=0) {
  187.             $choices=array("" => """homme" => "male","femme" => "female");
  188.             $builder->add("gender",
  189.                 ChoiceType::class,array(
  190.                     "label"       =>"Sexe",
  191.                     "required"    => (!array_key_exists("gender",$fields)?false:($fields["gender"]["perm"]==2)),
  192.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  193.                     "choices"     => $choices
  194.                 )
  195.             );
  196.         }         
  197.         if(!array_key_exists("job",$fields)||$fields["job"]["perm"]!=0) {
  198.             $builder->add('job',
  199.                 TextType::class, array(
  200.                     "label"       => "Métier",
  201.                     "required"    => (!array_key_exists("job",$fields)?false:($fields["job"]["perm"]==2)),
  202.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  203.                 )
  204.             ); 
  205.         }         
  206.         if(!array_key_exists("position",$fields)||$fields["position"]["perm"]!=0) {
  207.             $builder->add('position',
  208.                 TextType::class, array(
  209.                     "label"       => "Fonction",
  210.                     "required"    => (!array_key_exists("position",$fields)?false:($fields["position"]["perm"]==2)),
  211.                     "disabled"    => ($options["mode"]=="delete"?true:false),
  212.                 )
  213.             ); 
  214.         }
  215.        
  216.         if(!array_key_exists("birthcountry",$fields)||$fields["birthcountry"]["perm"]!=0) {
  217.             $builder->add('birthcountry',
  218.                 Select2EntityType::class, array(
  219.                     'label' => "Pays de Naissance",
  220.                     "disabled" => ($options["mode"]=="delete"?true:false),
  221.                     "required"    => (!array_key_exists("birthcountry",$fields)?false:($fields["birthcountry"]["perm"]==2)),
  222.                     'multiple' => false,
  223.                     'remote_route' => 'app_core_ajax_country_list',
  224.                     'class' => 'App\Entity\Country',
  225.                     'primary_key' => 'id',
  226.                     'text_property' => 'label',
  227.                     'minimum_input_length' => 2,
  228.                     'page_limit' => 10,
  229.                     'allow_clear' => true,
  230.                     'delay' => 250,
  231.                     'cache' => false,
  232.                     'cache_timeout' => 60000// if 'cache' is true
  233.                     'language' => 'fr',
  234.                     'placeholder' => 'Selectionner un pays',
  235.                 )
  236.             );
  237.         }
  238.         if(!array_key_exists("birthplace",$fields)||($fields["birthcountry"]["perm"]!=0&&$fields["birthplace"]["perm"]!=0)) {
  239.             $builder->add('birthplace',
  240.                 Select2EntityType::class, array(
  241.                     'label' => "Ville de Naissance",
  242.                     "disabled" => ($options["mode"]=="delete"?true:false),
  243.                     "required" => false,
  244.                     'multiple' => false,
  245.                     'remote_route' => 'app_core_ajax_city_list',
  246.                     'class' => 'App\Entity\City',
  247.                     'primary_key' => 'id',
  248.                     'text_property' => 'label',
  249.                     'minimum_input_length' => 2,
  250.                     'page_limit' => 10,
  251.                     'allow_clear' => true,
  252.                     'delay' => 250,
  253.                     'cache' => false,
  254.                     'cache_timeout' => 60000// if 'cache' is true
  255.                     'language' => 'fr',
  256.                     'placeholder' => 'Selectionner une ville',
  257.                 )
  258.             ); 
  259.         }
  260.         
  261.         if($session->get('viewniveau02')) {
  262.             if(!array_key_exists("niveau02",$fields)||$fields["niveau02"]["perm"]!=0) {
  263.                 $builder->add('niveau02',
  264.                     Select2EntityType::class, array(
  265.                         'label' => $session->get('labelniveau02'),
  266.                         "disabled" => ($options["mode"]=="delete"?true:false),
  267.                         "required"    => (!array_key_exists("niveau02",$fields)?false:($fields["niveau02"]["perm"]==2)),
  268.                         'multiple' => false,
  269.                         'remote_route' => 'app_core_ajax_niveau02_list',
  270.                         'class' => 'App\Entity\Niveau02',
  271.                         'req_params' => ['niveau01' => 'parent.children[niveau01]'],
  272.                         'primary_key' => 'id',
  273.                         'text_property' => 'label',
  274.                         'minimum_input_length' => 0,
  275.                         'page_limit' => 10,
  276.                         'allow_clear' => true,
  277.                         'delay' => 250,
  278.                         'cache' => false,
  279.                         'cache_timeout' => 60000// if 'cache' is true
  280.                         'language' => 'fr',
  281.                         'placeholder' => 'Selectionner '.$session->get('labelniveau02'),
  282.                     )
  283.                 );         
  284.             }
  285.         }       
  286.         $builder->add('motivation',
  287.             TextareaType::class, array(
  288.                 "label"       => "Motivation",
  289.                 "required"    => false,
  290.                 "disabled"    => ($options["mode"]=="delete"?true:false),
  291.                 "attr"        => array("style" => "height: 90px")
  292.             )
  293.         );         
  294.     }
  295.     public function configureOptions(OptionsResolver $resolver)
  296.     {
  297.         $resolver->setDefaults(array(
  298.             'data_class' => 'App\Entity\Registration',
  299.             'mode' => "string",
  300.             'fields' => "array"
  301.         ));
  302.     }
  303. }