<?php
namespace App\Form;
use App\Entity\Agora;
use App\Entity\Grade;
use App\Entity\Direction;
use App\Entity\Configuration;
use App\Entity\Souscategorie;
use App\Repository\GradeRepository;
use App\Repository\DirectionRepository;
use Symfony\Component\Form\AbstractType;
use App\Repository\ConfigurationRepository;
use App\Repository\SouscategorieRepository;
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\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\FileType;
class AgoraType 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 entrer un titre',
]),
],
'attr' => [
'placeholder' => 'Saisir un titre'
]
])
->add('description', CKEditorType::class, [
'config_name' => 'front_office',
'required' => false,
'label' => 'Description',
'label_html'=> true,
])
->add('fichier', 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('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('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',
]),
],
])
// ->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()->getSizeAgora() . ' 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()->getSizeAgora(),
// 'maxMessage' => 'Veuillez saisir moins de ' . $this->getConfiguration()->getSizeAgora() . ' caractères',
// ])
// ],
// ])
->add('souscategorie', EntityType::class, [
'class' => Souscategorie::class,
'choice_label' => 'nom',
'label' => 'Sous-catégorie',
'placeholder' => 'Saisir une sous-catégorie',
'required' => false,
'query_builder' => function(SouscategorieRepository $er) {
return $er->createQueryBuilder('p')
->orderBy('p.listorder', 'ASC')
->andWhere('p.statut = :val')
->setParameter('val', 1)
;
},
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir une sous-catégorie',
]),
],
])
;
if ($options['entite']) {
$builder
->add('entite', null, [
'label' => 'Entité',
'required' => false,
// 'constraints' => [
// new NotBlank([
// 'message' => 'Veuillez saisir une entité',
// ]),
// ],
'attr' => [
'placeholder' => 'Saisir une entité'
]
])
;
}
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Agora::class,
'entite' => false
]);
}
}