src\Controller\AllergeneController.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use App\Entity\Allergene;
  10. use App\Entity\Plat;
  11. use App\Entity\Contient;
  12. use App\Form\AllergeneType;
  13. class AllergeneController extends AbstractController
  14. {
  15. #[Route('/allergene/liste', name: 'app_allergene_liste')]
  16. public function liste(EntityManagerInterface $em, PaginatorInterface $paginator,Request $request): Response
  17. {
  18. if ($request->query->get('filterField') && $request->query->get('filterValue') && !is_numeric($request->query->get('filterValue'))) {
  19. $request->query->set('filterValue', "*".$request->query->get('filterValue')."*");
  20. }
  21. // On récupère tous les articles disponibles en base de données
  22. $query = $em->createQuery('SELECT allergene FROM App\Entity\Allergene allergene');
  23. if ($request->query->get('filterField') && $request->query->get('filterValue') && !is_numeric($request->query->get('filterValue'))) {
  24. $request->query->set('filterValue', "*".$request->query->get('filterValue')."*");
  25. }
  26. $pagination = $paginator->paginate(
  27. $query, /* query NOT result */
  28. $request->query->getInt('page', 1), /* page number */
  29. 10 /* limit per page */
  30. );
  31. return $this->render('allergene/liste.html.twig', [
  32. 'pagination' => $pagination
  33. ]);
  34. }
  35. #[Route('/allergene/index/{id}', name: 'app_allergene_index')]
  36. public function index(EntityManagerInterface $em,PaginatorInterface $paginator, Request $request,int $id): Response
  37. {
  38. if ($request->query->get('filterField') && $request->query->get('filterValue') && !is_numeric($request->query->get('filterValue'))) {
  39. $request->query->set('filterValue', "*".$request->query->get('filterValue')."*");
  40. }
  41. // On récupère l'Allergene qui correspond à l'id passé dans l'url
  42. $allergene = $em->getRepository(Allergene::class)->findOneBy(['allergene_id' => $id]);
  43. if (!$allergene) {
  44. $this->addFlash('danger', 'L"Allergene n"existe pas');
  45. return $this->redirectToRoute('app_allergene_liste');
  46. }
  47. $plats = $allergene->getContients()->map(function($plat) {
  48. return $plat->getPlatId();
  49. })->toArray();
  50. if ($plats){
  51. // On récupère tous les articles disponibles en base de données
  52. $queryBuilder = $em->createQueryBuilder()
  53. ->select('plat')
  54. ->from(Plat::class, 'plat')
  55. ->where('plat.plat_id NOT IN (:plats)')
  56. ->setParameter('plats', $plats);
  57. }
  58. else
  59. {
  60. // On récupère tous les articles disponibles en base de données
  61. $queryBuilder = $em->createQueryBuilder()
  62. ->select('plat')
  63. ->from(Plat::class, 'plat');
  64. }
  65. $query = $queryBuilder->getQuery();
  66. $pagination = $paginator->paginate(
  67. $query, /* query NOT result */
  68. $request->query->getInt('page', 1), /* page number */
  69. 10 /* limit per page */
  70. );
  71. return $this->render('allergene/index.html.twig', [
  72. 'allergene' => $allergene,
  73. 'plats' => $plats,
  74. 'pagination' => $pagination
  75. ]);
  76. }
  77. #[Route('/allergene/add', name: 'app_allergene_add')]
  78. public function add(EntityManagerInterface $em, Request $request): Response
  79. {
  80. $mode = 'new';
  81. $allergene = new Allergene();
  82. $form = $this->createForm(AllergeneType::class, $allergene);
  83. $form->handleRequest($request);
  84. if($form->isSubmitted() && $form->isValid()) {
  85. $this->saveAllergene($allergene, $mode,$em);
  86. return $this->redirectToRoute('app_allergene_index', ['id' => $allergene->getAllergeneId()]);
  87. }
  88. $parameters = array(
  89. 'form' => $form->createView(),
  90. 'allergene' => $allergene,
  91. 'mode' => $mode
  92. );
  93. return $this->render('allergene/edit.html.twig', $parameters);
  94. }
  95. #[Route('/allergene/edit/{id}', name: 'app_allergene_edit')]
  96. public function edit(EntityManagerInterface $em, Request $request, int $id=null): Response
  97. {
  98. $mode = 'update';
  99. // On récupère l'Allergene qui correspond à l'id passé dans l'url
  100. $allergene = $em->getRepository(Allergene::class)->findOneBy(['allergene_id' => $id]);
  101. if (!$allergene) {
  102. $this->addFlash('danger', 'L"Allergene n"existe pas');
  103. return $this->redirectToRoute('app_allergene_liste');
  104. }
  105. $form = $this->createForm(AllergeneType::class, $allergene);
  106. $form->handleRequest($request);
  107. if($form->isSubmitted() && $form->isValid()) {
  108. $this->saveAllergene($allergene, $mode,$em);
  109. return $this->redirectToRoute('app_allergene_index', ['id' => $id]);
  110. }
  111. $parameters = array(
  112. 'form' => $form->createView(),
  113. 'allergene' => $allergene,
  114. 'mode' => $mode
  115. );
  116. return $this->render('allergene/edit.html.twig', $parameters);
  117. }
  118. #[Route('/allergene/remove/{id}', name: 'app_allergene_remove')]
  119. public function remove(EntityManagerInterface $em, int $id): Response
  120. {
  121. // On récupère l'Allergene qui correspond à l'id passé dans l'URL
  122. $allergene = $em->getRepository(Allergene::class)->findOneBy(['allergene_id' => $id]);
  123. if (!$allergene) {
  124. $this->addFlash('danger', 'L"Allergene n"existe pas');
  125. return $this->redirectToRoute('app_allergene_liste');
  126. }
  127. // L'Allergene est supprimé
  128. $em->remove($allergene);
  129. $em->flush();
  130. $this->addFlash('success', 'L"Allergene a été supprimé avec succès');
  131. return $this->redirectToRoute('app_allergene_liste');
  132. }
  133. #[Route('/allergene/platadd/{idallergene}/{idplat}', name: 'app_allergene_platadd')]
  134. public function platadd(EntityManagerInterface $em, int $idallergene, int $idplat): Response
  135. {
  136. // On récupère l'Allergene qui correspond à l'id passé dans l'url
  137. $allergene = $em->getRepository(Allergene::class)->findOneBy(['allergene_id' => $idallergene]);
  138. if (!$allergene) {
  139. $this->addFlash('danger', 'L"Allergene n"existe pas');
  140. return $this->redirectToRoute('app_allergene_liste');
  141. }
  142. $plat= $em->getRepository(Plat::class)->findOneBy(['plat_id' => $idplat]);
  143. if (!$plat) {
  144. $this->addFlash('danger', 'Le plat n"existe pas');
  145. return $this->redirectToRoute('app_allergene_index', ['id' => $idallergene]);
  146. }
  147. $contient = new Contient();
  148. $contient->setAllergeneId($allergene);
  149. $contient->setPlatId($plat);
  150. $em->persist($contient);
  151. $em->flush();
  152. $this->addFlash('success', 'Le plat a été ajouté avec succès');
  153. return $this->redirectToRoute('app_allergene_index', ['id' => $idallergene]);
  154. }
  155. #[Route('/allergene/platremove/{idallergene}/{idplat}', name: 'app_allergene_platremove')]
  156. public function platremove(EntityManagerInterface $em, int $idallergene, int $idplat): Response
  157. {
  158. // On récupère l'Allergene qui correspond à l'id passé dans l'url
  159. $allergene = $em->getRepository(Allergene::class)->findOneBy(['allergene_id' => $idallergene]);
  160. if (!$allergene) {
  161. $this->addFlash('danger', 'L"Allergene n"existe pas');
  162. return $this->redirectToRoute('app_allergene_liste');
  163. }
  164. $contient= $allergene->getContients()->filter(function($contient) use ($idplat) {
  165. return $contient->getPlatId()->getPlatId() === $idplat;
  166. })->first();
  167. if ($contient) {
  168. $em->remove($contient);
  169. $em->flush();
  170. }
  171. $this->addFlash('success', 'Le plat a été supprimé avec succès');
  172. return $this->redirectToRoute('app_allergene_index', ['id' => $idallergene]);
  173. }
  174. /**
  175. * Enregistrer un Allergene en base de données
  176. *
  177. * @param Allergene $allergene
  178. * @param string $mode
  179. */
  180. private function saveAllergene(Allergene $allergene, string $mode, EntityManagerInterface $em){
  181. $em->persist($allergene);
  182. $em->flush();
  183. if($mode == 'new') {
  184. $this->addFlash('success', 'L"Allergene a été ajouté avec succès');
  185. } else {
  186. $this->addFlash('success', 'L"Allergene a été modifié avec succès');
  187. }
  188. }
  189. }