<?php
namespace App\Form;
use App\Entity\Cv;
use App\Entity\Grade;
use App\Entity\Direction;
use App\Entity\Configuration;
use App\Repository\GradeRepository;
use App\Repository\DirectionRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\UX\Dropzone\Form\DropzoneType;
use App\Repository\ConfigurationRepository;
use App\Validator\Constraints\IsEmailOrigin;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Validator\Constraints\File;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
class CvType extends AbstractType
{
private ConfigurationRepository $configurationRepository;
public function __construct(ConfigurationRepository $configurationRepository)
{
$this->configurationRepository = $configurationRepository;
}
/**
* Récupère l'objet Configuration en bdd
*
* @return Configuration
*/
public function getConfiguration(): Configuration
{
return $this->configurationRepository->findOneBy(['uuid' => Configuration::UNIQUE_UUID]);
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('nom', null, [
'label' => 'Nom<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'required' => false,
'constraints' => [
new NotBlank([
'message' => 'Veuillez entrer un nom',
]),
],
'attr' => [
'placeholder' => 'Saisir un nom'
]
])
->add('prenom', null, [
'label' => 'Prénom<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'required' => false,
'constraints' => [
new NotBlank([
'message' => 'Veuillez entrer un prénom',
]),
],
'attr' => [
'placeholder' => 'Saisir un prénom'
]
])
->add('email', EmailType::class, [
'label' => 'Email<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'required' => false,
'constraints' => [
new Email([
'message' => 'Veuillez entrer un email valide',
]),
new NotBlank([
'message' => 'Veuillez entrer un email',
]),
new IsEmailOrigin()
],
'attr' => [
'placeholder' => 'Saisir une adresse email',
'autocomplete' => 'email'
]
])
->add('photo', FileType::class, [
'mapped' => false,
'label' => false,
'required' => false,
'attr' => [
'onchange' => 'loadFile(event)'
],
'constraints' => [
new File([
'mimeTypes' => [
'image/png',
'image/jpg',
'image/jpeg',
'image/gif',
],
'mimeTypesMessage' => 'Extensions Autorisées : PNG JPG JPEG GIF'
])
]
])
// ->add('parcours', CKEditorType::class, [
// 'config_name' => 'front_office',
// 'required' => false,
// 'label' => 'Parcours',
// 'label_html'=> true,
// ])
// ->add('competence', CKEditorType::class, [
// 'config_name' => 'front_office',
// 'required' => false,
// 'label' => 'Compétences',
// 'label_html'=> true,
// ])
// ->add('aspiration', CKEditorType::class, [
// 'config_name' => 'front_office',
// 'required' => false,
// 'label' => 'Aspiration',
// 'label_html'=> true,
// ])
->add('parcours', null , [
'required' => false,
'label' => 'Mon parcours<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'attr' => [
'rows' => 8
],
'help' => 'Veuillez saisir un texte de moins de ' . $this->getConfiguration()->getSizeParcours() . ' caractères',
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir votre parcours',
]),
new Length([
'min' => 10,
'minMessage' => 'Veuillez saisir plus de 10 caractères',
'max' => $this->getConfiguration()->getSizeParcours(),
'maxMessage' => 'Veuillez saisir moins de ' . $this->getConfiguration()->getSizeParcours() . ' caractères',
])
],
])
->add('competence', null , [
'required' => false,
'label' => 'Mes compétences (Si vous êtes sur SICARDI, indiquez les compétences que vous avez déclarées)<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'attr' => [
'rows' => 8
],
'help' => 'Veuillez saisir un texte de moins de ' . $this->getConfiguration()->getSizeCompetences() . ' caractères',
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir vos compétences',
]),
new Length([
'min' => 10,
'minMessage' => 'Veuillez saisir plus de 10 caractères',
'max' => $this->getConfiguration()->getSizeCompetences(),
'maxMessage' => 'Veuillez saisir moins de ' . $this->getConfiguration()->getSizeCompetences() . ' caractères',
])
],
])
->add('aspiration', null , [
'required' => false,
'label' => 'Mes aspirations<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'attr' => [
'rows' => 8
],
'help' => 'Veuillez saisir un texte de moins de ' . $this->getConfiguration()->getSizeAspiration() . ' caractères',
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir vos aspirations',
]),
new Length([
'min' => 10,
'minMessage' => 'Veuillez saisir plus de 10 caractères',
'max' => $this->getConfiguration()->getSizeAspiration(),
'maxMessage' => 'Veuillez saisir moins de ' . $this->getConfiguration()->getSizeAspiration() . ' caractères',
])
],
])
->add('grade', EntityType::class, [
'class' => Grade::class,
'choice_label' => 'nom',
'label' => 'Catégorie<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'placeholder' => 'Saisir une catégorie',
'required' => false,
'query_builder' => function(GradeRepository $er) {
return $er->createQueryBuilder('p')
->orderBy('p.nom', 'ASC')
->andWhere('p.statut = :val')
->setParameter('val', 1)
;
},
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir une catégorie',
]),
],
])
->add('direction', EntityType::class, [
'class' => Direction::class,
'choice_label' => 'nom',
'label' => 'Direction<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'placeholder' => 'Saisir une direction',
'required' => false,
'query_builder' => function(DirectionRepository $er) {
return $er->createQueryBuilder('p')
->orderBy('p.nom', 'ASC')
->andWhere('p.statut = :val')
->setParameter('val', 1)
;
},
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir une direction',
]),
],
])
;
if ($options['add']) {
$builder
->add('cv', FileType::class, [
//->add('cv', DropzoneType::class, [
'attr' => [
'placeholder' => 'Charger votre cv',
],
'label' => false,
'mapped' => false,
'required' => false,
'constraints' => [
new NotBlank([
'message' => 'Veuillez charger votre cv',
])
],
])
;
}
if ($options['update']) {
$builder
->add('cv', FileType::class, [
//->add('cv', DropzoneType::class, [
'attr' => [
'placeholder' => 'Charger votre cv',
],
'label' => false,
'mapped' => false,
'required' => false,
])
;
}
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Cv::class,
'add' => false,
'update' => false
]);
}
}