src/Form/AttributionType.php line 22

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 $repo, SessionInterface $session, SchoolYearRepository $scRepo, CourseRepository $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. if (!empty($excludedIds)) {
  50. if(strcmp($options['method'],"POST")===0){
  51. $qb->andWhere($qb->expr()->notIn('c.id', ':excludedIds'))
  52. ->setParameter('excludedIds', $excludedIds);
  53. }
  54. }
  55. return $qb ;
  56. }
  57. ))
  58. ->add('teacher', EntityType::class, array('class' => User::class, 'placeholder' => 'Choisir l\'enseignant ', 'label' => 'Enseignant', 'required' => true, 'query_builder' => function (UserRepository $repository) {
  59. return $repository->createQueryBuilder('u')->add('orderBy', 'u.fullName');
  60. }))
  61. ->add('headTeacher', CheckboxType::class, array('label' => 'Enseignant principal ?'))
  62. ;
  63. }
  64. /**
  65. * {@inheritdoc}
  66. */
  67. public function configureOptions(OptionsResolver $resolver)
  68. {
  69. $resolver->setDefaults(array(
  70. 'data_class' => Attribution::class,
  71. ));
  72. }
  73. /**
  74. * {@inheritdoc}
  75. */
  76. public function getName()
  77. {
  78. return 'attribution';
  79. }
  80. }