src/Form/AgoraType.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Agora;
  4. use App\Entity\Grade;
  5. use App\Entity\Direction;
  6. use App\Entity\Configuration;
  7. use App\Entity\Souscategorie;
  8. use App\Repository\GradeRepository;
  9. use App\Repository\DirectionRepository;
  10. use Symfony\Component\Form\AbstractType;
  11. use App\Repository\ConfigurationRepository;
  12. use App\Repository\SouscategorieRepository;
  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\Length;
  18. use Symfony\Component\Validator\Constraints\NotBlank;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. use Symfony\Component\Form\Extension\Core\Type\FileType;
  21. class AgoraType extends AbstractType
  22. {
  23.     private ConfigurationRepository $configurationRepository;
  24.     public function __construct(ConfigurationRepository $configurationRepository)
  25.     {
  26.         $this->configurationRepository $configurationRepository;
  27.     }
  28.     /**
  29.      * Récupère l'objet Configuration en bdd
  30.      *
  31.      * @return Configuration
  32.      */
  33.     public function getConfiguration(): Configuration
  34.     {
  35.         return $this->configurationRepository->findOneBy(['uuid' => Configuration::UNIQUE_UUID]);
  36.     }
  37.     
  38.     public function buildForm(FormBuilderInterface $builder, array $options): void
  39.     {
  40.         $builder
  41.             ->add('titre'null, [
  42.                 'label' => 'Titre<span class=\'text-danger\'>*</span>',
  43.                 'label_html'=> true,
  44.                 'required' => false,
  45.                 'constraints' => [
  46.                     new NotBlank([
  47.                         'message' => 'Veuillez entrer un titre',
  48.                     ]),
  49.                 ],
  50.                 'attr' => [
  51.                     'placeholder' => 'Saisir un titre'
  52.                 ]
  53.             ])
  54.             
  55.             ->add('description'CKEditorType::class, [
  56.                 'config_name' => 'front_office',
  57.                 'required' => false,
  58.                 'label' => 'Description',
  59.                 'label_html'=> true,
  60.             ])
  61.             ->add('fichier'FileType::class, [
  62.                 'mapped' => false,
  63.                 'label' => false,
  64.                 'required' => false,
  65.                 'attr' => [
  66.                     'onchange' => 'loadFile(event)'
  67.                 ],
  68.                 'constraints' => [
  69.                     new File([
  70.                         'mimeTypes' => [
  71.                             'image/png',
  72.                             'image/jpg',
  73.                             'image/jpeg',
  74.                             'image/gif',
  75.                         ],
  76.                         'mimeTypesMessage' => 'Extensions Autorisées : PNG JPG JPEG GIF'
  77.                     ])
  78.                 ]
  79.             ])
  80.             ->add('nom'null, [
  81.                 'label' => 'Nom<span class=\'text-danger\'>*</span>',
  82.                 'label_html'=> true,
  83.                 'required' => false,
  84.                 
  85.                 'constraints' => [
  86.                     new NotBlank([
  87.                         'message' => 'Veuillez saisir un nom',
  88.                     ]),
  89.                 ],
  90.                 'attr' => [
  91.                     'placeholder' => 'Saisir un nom'
  92.                 ],
  93.                 //'help' => 'Non publié sur le site'
  94.             ])
  95.             ->add('prenom'null, [
  96.                 'label' => 'Prénom<span class=\'text-danger\'>*</span>',
  97.                 'label_html'=> true,
  98.                 'required' => false,
  99.                 
  100.                 'constraints' => [
  101.                     new NotBlank([
  102.                         'message' => 'Veuillez saisir un prénom',
  103.                     ]),
  104.                 ],
  105.                 'attr' => [
  106.                     'placeholder' => 'Saisir un prénom'
  107.                 ],
  108.                 //'help' => 'Non publié sur le site'
  109.             ])
  110.             
  111.             ->add('grade'EntityType::class, [
  112.                 'class' => Grade::class,
  113.                 'choice_label' => 'nom',
  114.                 'label' => 'Catégorie<span class=\'text-danger\'>*</span>',
  115.                 'label_html'=> true,
  116.                 'placeholder' => 'Saisir une catégorie',
  117.                 'required' => false,
  118.                 'query_builder' => function(GradeRepository $er) {
  119.                     return $er->createQueryBuilder('p')
  120.                         ->orderBy('p.nom''ASC')
  121.                         ->andWhere('p.statut = :val')
  122.                         ->setParameter('val'1)
  123.                     ;
  124.                 },
  125.                 'constraints' => [
  126.                     new NotBlank([
  127.                         'message' => 'Veuillez saisir une catégorie',
  128.                     ]),
  129.                 ],
  130.             ])
  131.             ->add('direction'EntityType::class, [
  132.                 'class' => Direction::class,
  133.                 'choice_label' => 'nom',
  134.                 'label' => 'Direction<span class=\'text-danger\'>*</span>',
  135.                 'label_html'=> true,
  136.                 'placeholder' => 'Saisir une direction',
  137.                 'required' => false,
  138.                 'query_builder' => function(DirectionRepository $er) {
  139.                     return $er->createQueryBuilder('p')
  140.                         ->orderBy('p.nom''ASC')
  141.                         ->andWhere('p.statut = :val')
  142.                         ->setParameter('val'1)
  143.                     ;
  144.                 },
  145.                 'constraints' => [
  146.                     new NotBlank([
  147.                         'message' => 'Veuillez saisir une direction',
  148.                     ]),
  149.                 ],
  150.             ])
  151.             // ->add('description', null , [
  152.             //     'required' => false,
  153.             //     'label' => 'Description<span class=\'text-danger\'>*</span>',
  154.             //     'label_html'=> true,
  155.             //     'attr' => [
  156.             //         'rows' => 6
  157.             //     ],
  158.             //     'help' => 'Veuillez saisir une description en moins de ' . $this->getConfiguration()->getSizeAgora() . ' caractères',
  159.             //     'constraints' => [
  160.             //         new NotBlank([
  161.             //             'message' => 'Veuillez saisir une description',
  162.             //         ]),
  163.             //         new Length([
  164.             //             'min' => 10,
  165.             //             'minMessage' => 'Veuillez saisir plus de 10 caractères',
  166.             //             'max' => $this->getConfiguration()->getSizeAgora(),
  167.             //             'maxMessage' => 'Veuillez saisir moins de ' . $this->getConfiguration()->getSizeAgora() . ' caractères',
  168.             //         ])
  169.             //     ],
  170.             // ])
  171.             ->add('souscategorie'EntityType::class, [
  172.                 'class' => Souscategorie::class,
  173.                 'choice_label' => 'nom',
  174.                 'label' => 'Sous-catégorie',
  175.                 'placeholder' => 'Saisir une sous-catégorie',
  176.                 'required' => false,
  177.                 'query_builder' => function(SouscategorieRepository $er) {
  178.                     return $er->createQueryBuilder('p')
  179.                         ->orderBy('p.listorder''ASC')
  180.                         ->andWhere('p.statut = :val')
  181.                         ->setParameter('val'1)
  182.                     ;
  183.                 },
  184.                 'constraints' => [
  185.                     new NotBlank([
  186.                         'message' => 'Veuillez saisir une sous-catégorie',
  187.                     ]),
  188.                 ],
  189.             ])
  190.         ;
  191.         if ($options['entite']) {
  192.             $builder
  193.                 ->add('entite'null, [
  194.                     'label' => 'Entité',
  195.                     'required' => false,
  196.                     
  197.                     // 'constraints' => [
  198.                     //     new NotBlank([
  199.                     //         'message' => 'Veuillez saisir une entité',
  200.                     //     ]),
  201.                     // ],
  202.                     'attr' => [
  203.                         'placeholder' => 'Saisir une entité'
  204.                     ]
  205.                 ])
  206.             ;
  207.         }
  208.     }
  209.     public function configureOptions(OptionsResolver $resolver): void
  210.     {
  211.         $resolver->setDefaults([
  212.             'data_class' => Agora::class,
  213.             'entite' => false
  214.         ]);
  215.     }
  216. }