src/Controller/CourseController.php line 147

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Course;
  4. use App\Form\CourseType;
  5. use App\Repository\CourseRepository;
  6. use App\Repository\MainTeacherRepository;
  7. use App\Repository\AttributionRepository;
  8. use App\Service\SchoolYearService;
  9. use App\Repository\ClassRoomRepository;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. /**
  19. * Course controller.
  20. *
  21. * @Route("/prof/courses")
  22. */
  23. class CourseController extends AbstractController
  24. {
  25. private $em;
  26. private $repo;
  27. private $clRepo;
  28. private MainTeacherRepository $mainTeacherRepo;
  29. private AttributionRepository $attRepo;
  30. private SchoolYearService $schoolYearService;
  31. public function __construct(AttributionRepository $attRepo, MainTeacherRepository $mainTeacherRepo, SchoolYearService $schoolYearService, EntityManagerInterface $em, CourseRepository $repo, ClassRoomRepository $clRepo)
  32. {
  33. $this->em = $em;
  34. $this->repo = $repo;
  35. $this->clRepo = $clRepo;
  36. $this->attRepo = $attRepo;
  37. $this->mainTeacherRepo = $mainTeacherRepo;
  38. $this->schoolYearService = $schoolYearService;
  39. }
  40. /**
  41. * Lists all Course entities.
  42. *
  43. * @Route("/", name="admin_courses")
  44. * @Method("GET")
  45. * @Template()
  46. */
  47. public function indexAction()
  48. {
  49. $rooms = $this->clRepo->findAll();
  50. return $this->render('course/index.html.twig', compact("rooms"));
  51. }
  52. /**
  53. * Finds and displays a Course entity.
  54. *
  55. * @Route("/{id}/show", name="admin_courses_show", requirements={"id"="\d+"})
  56. * @Method("GET")
  57. * @Template()
  58. */
  59. public function showAction(Course $course)
  60. {
  61. return $this->render('course/show.html.twig', compact("course"));
  62. }
  63. /**
  64. * @Route("/create",name="admin_courses_new", methods={"GET","POST"})
  65. */
  66. public function create(Request $request): Response
  67. {
  68. if (!$this->getUser()) {
  69. $this->addFlash('warning', 'You need login first!');
  70. return $this->redirectToRoute('app_login');
  71. }
  72. $course = new Course();
  73. $form = $this->createForm(CourseType::class, $course);
  74. $form->handleRequest($request);
  75. if ($form->isSubmitted() && $form->isValid()) {
  76. $this->em->persist($course);
  77. $this->em->flush();
  78. $this->addFlash('success', 'Course succesfully created');
  79. return $this->redirectToRoute('admin_courses');
  80. }
  81. return $this->render(
  82. 'course/new.html.twig',
  83. ['form' => $form->createView()]
  84. );
  85. }
  86. /**
  87. * Creates a new Course entity.
  88. *
  89. * @Route("/create", name="admin_courses_create")
  90. * @Method("POST")
  91. */
  92. public function createAction(Request $request)
  93. {
  94. $course = new Course();
  95. $form = $this->createForm(new CourseType(), $course);
  96. if ($form->handleRequest($request)->isValid()) {
  97. $em = $this->getDoctrine()->getManager();
  98. $em->persist($course);
  99. $em->flush();
  100. return $this->redirect($this->generateUrl('admin_courses_show', array('id' => $course->getId())));
  101. }
  102. return array(
  103. 'course' => $course,
  104. 'form' => $form->createView(),
  105. );
  106. }
  107. /**
  108. * Displays a form to edit an existing Course entity.
  109. *
  110. * @Route("/{id}/edit", name="admin_courses_edit", requirements={"id"="\d+"}, methods={"GET","PUT"})
  111. * @Template()
  112. */
  113. public function edit(Request $request, Course $course): Response
  114. {
  115. $form = $this->createForm(CourseType::class, $course, [
  116. 'method' => 'PUT'
  117. ]);
  118. $form->handleRequest($request);
  119. if ($form->isSubmitted() && $form->isValid()) {
  120. $this->em->flush();
  121. $this->addFlash('success', 'Course succesfully updated');
  122. return $this->redirectToRoute('admin_courses');
  123. }
  124. return $this->render('course/edit.html.twig', [
  125. 'course' => $course,
  126. 'form' => $form->createView()
  127. ]);
  128. }
  129. /**
  130. * Deletes a Programme entity.
  131. *
  132. * @Route("/{id}/delete", name="admin_courses_delete", requirements={"id"="\d+"}, methods={"DELETE"})
  133. */
  134. public function delete(Course $course, Request $request): Response
  135. {
  136. if ($this->isCsrfTokenValid('courses_deletion' . $course->getId(), $request->request->get('csrf_token'))) {
  137. $this->em->remove($course);
  138. $this->em->flush();
  139. $this->addFlash('info', 'Course succesfully deleted');
  140. }
  141. return $this->redirectToRoute('admin_courses');
  142. }
  143. /**
  144. * Check if the classroom with this course already has a main teacher
  145. * @Route("/check_main_teacher", name="check_main_teacher", methods={"POST"})
  146. */
  147. public function checkMainTeacher(Request $request)
  148. {
  149. $courseId = $request->request->get('course_id');
  150. $course = $this->repo->findOneBy(array("id"=> $courseId));
  151. $mainTeacher = $this->mainTeacherRepo->findOneBy(array("classRoom"=> $course->getModule()->getRoom(), "schoolYear"=> $this->schoolYearService->sessionYearById()));
  152. return new JsonResponse(['checking' => $mainTeacher===null ]);
  153. }
  154. }