src/Form/CvType.php line 244

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Cv;
  4. use App\Entity\Grade;
  5. use App\Entity\Direction;
  6. use App\Entity\Configuration;
  7. use App\Repository\GradeRepository;
  8. use App\Repository\DirectionRepository;
  9. use Symfony\Component\Form\AbstractType;
  10. use Symfony\UX\Dropzone\Form\DropzoneType;
  11. use App\Repository\ConfigurationRepository;
  12. use App\Validator\Constraints\IsEmailOrigin;
  13. use FOS\CKEditorBundle\Form\Type\CKEditorType;
  14. use Symfony\Component\Form\FormBuilderInterface;
  15. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  16. use Symfony\Component\Validator\Constraints\File;
  17. use Symfony\Component\Validator\Constraints\Email;
  18. use Symfony\Component\Validator\Constraints\Length;
  19. use Symfony\Component\Validator\Constraints\NotBlank;
  20. use Symfony\Component\OptionsResolver\OptionsResolver;
  21. use Symfony\Component\Form\Extension\Core\Type\FileType;
  22. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  23. class CvType extends AbstractType
  24. {
  25.     private ConfigurationRepository $configurationRepository;
  26.     public function __construct(ConfigurationRepository $configurationRepository)
  27.     {
  28.         $this->configurationRepository $configurationRepository;
  29.     }
  30.     /**
  31.      * Récupère l'objet Configuration en bdd
  32.      *
  33.      * @return Configuration
  34.      */
  35.     public function getConfiguration(): Configuration
  36.     {
  37.         return $this->configurationRepository->findOneBy(['uuid' => Configuration::UNIQUE_UUID]);
  38.     }
  39.     
  40.     public function buildForm(FormBuilderInterface $builder, array $options): void
  41.     {
  42.         $builder
  43.             ->add('nom'null, [
  44.                 'label' => 'Nom<span class=\'text-danger\'>*</span>',
  45.                 'label_html'=> true,
  46.                 'required' => false,
  47.                 
  48.                 'constraints' => [
  49.                     new NotBlank([
  50.                         'message' => 'Veuillez entrer un nom',
  51.                     ]),
  52.                 ],
  53.                 'attr' => [
  54.                     'placeholder' => 'Saisir un nom'
  55.                 ]
  56.             ])
  57.             ->add('prenom'null, [
  58.                 'label' => 'Prénom<span class=\'text-danger\'>*</span>',
  59.                 'label_html'=> true,
  60.                 'required' => false,
  61.                 
  62.                 'constraints' => [
  63.                     new NotBlank([
  64.                         'message' => 'Veuillez entrer un prénom',
  65.                     ]),
  66.                 ],
  67.                 'attr' => [
  68.                     'placeholder' => 'Saisir un prénom'
  69.                 ]
  70.             ])
  71.             ->add('email'EmailType::class, [
  72.                 'label' => 'Email<span class=\'text-danger\'>*</span>',
  73.                 'label_html'=> true,
  74.                 'required' => false,
  75.                 'constraints' => [
  76.                     new Email([
  77.                         'message' => 'Veuillez entrer un email valide',
  78.                     ]),
  79.                     new NotBlank([
  80.                         'message' => 'Veuillez entrer un email',
  81.                     ]),
  82.                     new IsEmailOrigin()
  83.                 ],
  84.                 'attr' => [
  85.                     'placeholder' => 'Saisir une adresse email',
  86.                     'autocomplete' => 'email'
  87.                 ]
  88.             ])
  89.             ->add('photo'FileType::class, [
  90.                 'mapped' => false,
  91.                 'label' => false,
  92.                 'required' => false,
  93.                 'attr' => [
  94.                     'onchange' => 'loadFile(event)'
  95.                 ],
  96.                 'constraints' => [
  97.                     new File([
  98.                         'mimeTypes' => [
  99.                             'image/png',
  100.                             'image/jpg',
  101.                             'image/jpeg',
  102.                             'image/gif',
  103.                         ],
  104.                         'mimeTypesMessage' => 'Extensions Autorisées : PNG JPG JPEG GIF'
  105.                     ])
  106.                 ]
  107.             ])
  108.             // ->add('parcours', CKEditorType::class, [
  109.             //     'config_name' => 'front_office',
  110.             //     'required' => false,
  111.             //     'label' => 'Parcours',
  112.             //     'label_html'=> true,
  113.             // ])
  114.             // ->add('competence', CKEditorType::class, [
  115.             //     'config_name' => 'front_office',
  116.             //     'required' => false,
  117.             //     'label' => 'Compétences',
  118.             //     'label_html'=> true,
  119.             // ])
  120.             // ->add('aspiration', CKEditorType::class, [
  121.             //     'config_name' => 'front_office',
  122.             //     'required' => false,
  123.             //     'label' => 'Aspiration',
  124.             //     'label_html'=> true,
  125.             // ])
  126.             ->add('parcours'null , [
  127.                 'required' => false,
  128.                 'label' => 'Mon parcours<span class=\'text-danger\'>*</span>',
  129.                 'label_html'=> true,
  130.                 'attr' => [
  131.                     'rows' => 8
  132.                 ],
  133.                 'help' => 'Veuillez saisir un texte de moins de ' $this->getConfiguration()->getSizeParcours() . ' caractères',
  134.                 'constraints' => [
  135.                     new NotBlank([
  136.                         'message' => 'Veuillez saisir votre parcours',
  137.                     ]),
  138.                     new Length([
  139.                         'min' => 10,
  140.                         'minMessage' => 'Veuillez saisir plus de 10 caractères',
  141.                         'max' => $this->getConfiguration()->getSizeParcours(),
  142.                         'maxMessage' => 'Veuillez saisir moins de ' $this->getConfiguration()->getSizeParcours() . ' caractères',
  143.                     ])
  144.                 ],
  145.             ])
  146.             ->add('competence'null , [
  147.                 'required' => false,
  148.                 'label' => 'Mes compétences (Si vous êtes sur SICARDI, indiquez les compétences que vous avez déclarées)<span class=\'text-danger\'>*</span>',
  149.                 'label_html'=> true,
  150.                 'attr' => [
  151.                     'rows' => 8
  152.                 ],
  153.                 'help' => 'Veuillez saisir un texte de moins de ' $this->getConfiguration()->getSizeCompetences() . ' caractères',
  154.                 'constraints' => [
  155.                     new NotBlank([
  156.                         'message' => 'Veuillez saisir vos compétences',
  157.                     ]),
  158.                     new Length([
  159.                         'min' => 10,
  160.                         'minMessage' => 'Veuillez saisir plus de 10 caractères',
  161.                         'max' => $this->getConfiguration()->getSizeCompetences(),
  162.                         'maxMessage' => 'Veuillez saisir moins de ' $this->getConfiguration()->getSizeCompetences() . ' caractères',
  163.                     ])
  164.                 ],
  165.             ])
  166.             ->add('aspiration'null , [
  167.                 'required' => false,
  168.                 'label' => 'Mes aspirations<span class=\'text-danger\'>*</span>',
  169.                 'label_html'=> true,
  170.                 'attr' => [
  171.                     'rows' => 8
  172.                 ],
  173.                 'help' => 'Veuillez saisir un texte de moins de ' $this->getConfiguration()->getSizeAspiration() . ' caractères',
  174.                 'constraints' => [
  175.                     new NotBlank([
  176.                         'message' => 'Veuillez saisir vos aspirations',
  177.                     ]),
  178.                     new Length([
  179.                         'min' => 10,
  180.                         'minMessage' => 'Veuillez saisir plus de 10 caractères',
  181.                         'max' => $this->getConfiguration()->getSizeAspiration(),
  182.                         'maxMessage' => 'Veuillez saisir moins de ' $this->getConfiguration()->getSizeAspiration() . ' caractères',
  183.                     ])
  184.                 ],
  185.             ])            
  186.             ->add('grade'EntityType::class, [
  187.                 'class' => Grade::class,
  188.                 'choice_label' => 'nom',
  189.                 'label' => 'Catégorie<span class=\'text-danger\'>*</span>',
  190.                 'label_html'=> true,
  191.                 'placeholder' => 'Saisir une catégorie',
  192.                 'required' => false,
  193.                 'query_builder' => function(GradeRepository $er) {
  194.                     return $er->createQueryBuilder('p')
  195.                         ->orderBy('p.nom''ASC')
  196.                         ->andWhere('p.statut = :val')
  197.                         ->setParameter('val'1)
  198.                     ;
  199.                 },
  200.                 'constraints' => [
  201.                     new NotBlank([
  202.                         'message' => 'Veuillez saisir une catégorie',
  203.                     ]),
  204.                 ],
  205.             ])
  206.             ->add('direction'EntityType::class, [
  207.                 'class' => Direction::class,
  208.                 'choice_label' => 'nom',
  209.                 'label' => 'Direction<span class=\'text-danger\'>*</span>',
  210.                 'label_html'=> true,
  211.                 'placeholder' => 'Saisir une direction',
  212.                 'required' => false,
  213.                 'query_builder' => function(DirectionRepository $er) {
  214.                     return $er->createQueryBuilder('p')
  215.                         ->orderBy('p.nom''ASC')
  216.                         ->andWhere('p.statut = :val')
  217.                         ->setParameter('val'1)
  218.                     ;
  219.                 },
  220.                 'constraints' => [
  221.                     new NotBlank([
  222.                         'message' => 'Veuillez saisir une direction',
  223.                     ]),
  224.                 ],
  225.             ])
  226.         ;
  227.         if ($options['add']) {
  228.             $builder
  229.                 ->add('cv'FileType::class, [
  230.                     //->add('cv', DropzoneType::class, [
  231.                     'attr' => [
  232.                         'placeholder' => 'Charger votre cv',
  233.                     ],
  234.                     'label' => false,
  235.                     'mapped' => false,
  236.                     'required' => false,
  237.                     'constraints' => [
  238.                         new NotBlank([
  239.                             'message' => 'Veuillez charger votre cv',
  240.                         ])
  241.                     ],
  242.                 ])
  243.             ;
  244.         }
  245.         if ($options['update']) {
  246.             $builder
  247.             ->add('cv'FileType::class, [
  248.                 //->add('cv', DropzoneType::class, [
  249.                     'attr' => [
  250.                         'placeholder' => 'Charger votre cv',
  251.                     ],
  252.                     'label' => false,
  253.                     'mapped' => false,
  254.                     'required' => false,
  255.                     
  256.                 ])
  257.             ;
  258.         }
  259.     }
  260.     public function configureOptions(OptionsResolver $resolver): void
  261.     {
  262.         $resolver->setDefaults([
  263.             'data_class' => Cv::class,
  264.             'add' => false,
  265.             'update' => false
  266.         ]);
  267.     }
  268. }