src/Form/AttributionType.php line 68

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\User;
  4. use App\Entity\Course;
  5. use App\Entity\Attribution;
  6. use App\Repository\UserRepository;
  7. use App\Repository\SchoolYearRepository;
  8. use App\Repository\AttributionRepository;
  9. use App\Repository\CourseRepository;
  10. use Symfony\Component\Form\AbstractType;
  11. use Symfony\Component\Form\FormBuilderInterface;
  12. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  13. use Symfony\Component\OptionsResolver\OptionsResolver;
  14. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  15. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use App\Service\SchoolYearService;
  18. class AttributionType extends AbstractType
  19. {
  20.     private $em;
  21.     private $year;
  22.     private $repo;
  23.     private $scRepo;
  24.     private $session;
  25.     private SchoolYearService $schoolYearService;
  26.     public function __construct(SchoolYearService $schoolYearService,  EntityManagerInterface $em,AttributionRepository $repoSessionInterface $sessionSchoolYearRepository $scRepoCourseRepository $crsRepo)
  27.     {
  28.         $this->em $em;
  29.         $this->repo    $repo;
  30.         $this->scRepo  $scRepo;
  31.         $this->crsRepo $crsRepo;
  32.         $this->session $session;
  33.         $this->schoolYearService $schoolYearService;
  34.     }
  35.     /**
  36.      * {@inheritdoc}
  37.      */
  38.     public function buildForm(FormBuilderInterface $builder, array $options)
  39.     {
  40.         $excludedIdsQb $this->repo->createQueryBuilder('a')->andWhere('a.schoolYear=:year')->setParameter('year'$this->schoolYearService->sessionYearById()->getId());
  41.         $excludedIds = array();
  42.         foreach($excludedIdsQb->getQuery()->getResult() as $result){
  43.             $excludedIds[] =  $result->getCourse()->getId();
  44.         }
  45.         $builder
  46.             ->add('course',  EntityType::class, array(
  47.                 'class' => Course::class,   'placeholder' => 'Choisir la matière''query_builder' => function () use ($excludedIds$options) {
  48.                     $qb $this->crsRepo->createQueryBuilder('c');
  49.                     
  50.                     if (!empty($excludedIds)) {
  51.                         if(strcmp($options['method'],"POST")===0){
  52.                             $qb->andWhere($qb->expr()->notIn('c.id'':excludedIds'))
  53.                             ->setParameter('excludedIds'$excludedIds);
  54.                         }
  55.                     }
  56.                     return $qb ;
  57.                 }
  58.             ))
  59.             ->add('teacher'EntityType::class, array('class' => User::class,  'placeholder' => 'Choisir l\'enseignant ''label' => 'Enseignant''required' =>  true,  'query_builder' => function (UserRepository $repository) {
  60.                 return $repository->createQueryBuilder('u')->add('orderBy''u.fullName');
  61.             }))
  62.             ->add('headTeacher'CheckboxType::class, array('label' => 'Enseignant principal ?'))
  63.             ; 
  64.     }
  65.     /**
  66.      * {@inheritdoc}
  67.      */
  68.     public function configureOptions(OptionsResolver $resolver)
  69.     {
  70.         $resolver->setDefaults(array(
  71.             'data_class' => Attribution::class,
  72.         ));
  73.     }
  74.     /**
  75.      * {@inheritdoc}
  76.      */
  77.     public function getName()
  78.     {
  79.         return 'attribution';
  80.     }
  81. }