<?php
namespace App\Form;
use App\Entity\Droit;
use App\Entity\Direction;
use App\Entity\Configuration;
use App\Repository\DirectionRepository;
use App\Validator\Constraints\IsWebsite;
use Symfony\Component\Form\AbstractType;
use App\Repository\ConfigurationRepository;
use App\Validator\Constraints\IsEmailOrigin;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Url;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
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\UrlType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
class DroitType 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('titre', null, [
'label' => 'Titre<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'required' => false,
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir un titre',
]),
],
'attr' => [
'placeholder' => 'Saisir un titre'
]
])
// ->add('description', CKEditorType::class, [
// 'required' => false,
// 'label' => 'Description',
// 'label_html'=> true,
// ])
->add('description', null , [
'required' => false,
'label' => 'Description<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'attr' => [
'rows' => 6
],
'help' => 'Veuillez saisir une description en moins de ' . $this->getConfiguration()->getSizeDroit() . ' caractères',
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir une description',
]),
new Length([
'min' => 10,
'minMessage' => 'Veuillez saisir plus de 10 caractères',
'max' => $this->getConfiguration()->getSizeDroit(),
'maxMessage' => 'Veuillez saisir moins de ' . $this->getConfiguration()->getSizeDroit() . ' caractères',
])
],
])
->add('lien', TextType::class, [
'label' => 'Lien Passerelles<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'required' => false,
// 'constraints' => [
// // new Url([
// // 'message' => 'Veuillez saisir un lien Passerelles valide',
// // ]),
// new NotBlank([
// 'message' => 'Veuillez saisir un lien Passerelles',
// ]),
// new IsWebsite()
// ],
'attr' => [
'placeholder' => 'Saisir un lien Passerelles',
'rows' => 3
]
])
->add('nom', null, [
'label' => 'Nom<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'required' => false,
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir un nom',
]),
],
'attr' => [
'placeholder' => 'Saisir un nom'
],
'help' => 'Non publié sur le site'
])
->add('prenom', null, [
'label' => 'Prénom<span class=\'text-danger\'>*</span>',
'label_html'=> true,
'required' => false,
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir un prénom',
]),
],
'attr' => [
'placeholder' => 'Saisir un prénom'
],
'help' => 'Non publié sur le site'
])
->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'
],
'help' => 'Non publié sur le site'
])
// ->add('phone', null, [
// 'label' => 'Numéro de téléphone (Facultatif)',
// 'required' => false,
// // 'constraints' => [
// // new NotBlank([
// // 'message' => 'Veuillez entrer un bureau',
// // ]),
// // ],
// 'attr' => [
// 'placeholder' => 'Saisir un numéro de téléphone'
// ],
// 'help' => 'Non publié sur le site'
// ])
->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',
]),
],
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Droit::class,
]);
}
}