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, Request $request): 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. if ($this->isCsrfTokenValid('delete' . $id, $request->request->get('_token'))) {
  128. // L'Allergene est supprimé
  129. $em->remove($allergene);
  130. $em->flush();
  131. $this->addFlash('success', 'L"Allergene a été supprimé avec succès');
  132. }
  133. else {
  134. $this->addFlash('danger', 'Le token CSRF est invalide. L"Allergene n"a pas été supprimé');
  135. }
  136. return $this->redirectToRoute('app_allergene_liste');
  137. }
  138. #[Route('/allergene/platadd/{idallergene}/{idplat}', name: 'app_allergene_platadd')]
  139. public function platadd(EntityManagerInterface $em, int $idallergene, int $idplat): Response
  140. {
  141. // On récupère l'Allergene qui correspond à l'id passé dans l'url
  142. $allergene = $em->getRepository(Allergene::class)->findOneBy(['allergene_id' => $idallergene]);
  143. if (!$allergene) {
  144. $this->addFlash('danger', 'L"Allergene n"existe pas');
  145. return $this->redirectToRoute('app_allergene_liste');
  146. }
  147. $plat= $em->getRepository(Plat::class)->findOneBy(['plat_id' => $idplat]);
  148. if (!$plat) {
  149. $this->addFlash('danger', 'Le plat n"existe pas');
  150. return $this->redirectToRoute('app_allergene_index', ['id' => $idallergene]);
  151. }
  152. $contient = new Contient();
  153. $contient->setAllergeneId($allergene);
  154. $contient->setPlatId($plat);
  155. $em->persist($contient);
  156. $em->flush();
  157. $this->addFlash('success', 'Le plat a été ajouté avec succès');
  158. return $this->redirectToRoute('app_allergene_index', ['id' => $idallergene]);
  159. }
  160. #[Route('/allergene/platremove/{idallergene}/{idplat}', name: 'app_allergene_platremove')]
  161. public function platremove(EntityManagerInterface $em, int $idallergene, int $idplat, Request $request): Response
  162. {
  163. // On récupère l'Allergene qui correspond à l'id passé dans l'url
  164. $allergene = $em->getRepository(Allergene::class)->findOneBy(['allergene_id' => $idallergene]);
  165. if (!$allergene) {
  166. $this->addFlash('danger', 'L"Allergene n"existe pas');
  167. return $this->redirectToRoute('app_allergene_liste');
  168. }
  169. $contient= $allergene->getContients()->filter(function($contient) use ($idplat) {
  170. return $contient->getPlatId()->getPlatId() === $idplat;
  171. })->first();
  172. if ($contient) {
  173. if ($this->isCsrfTokenValid('delete' . $contient->getPlatId()->getPlatId(), $request->request->get('_token'))) {
  174. $em->remove($contient);
  175. $em->flush();
  176. } else {
  177. $this->addFlash('danger', 'Le token CSRF est invalide. Le plat n"a pas été supprimé.');
  178. }
  179. } else {
  180. $this->addFlash('danger', 'Le plat n"est pas associé à cet allergène.');
  181. }
  182. return $this->redirectToRoute('app_allergene_index', ['id' => $idallergene]);
  183. }
  184. /**
  185. * Enregistrer un Allergene en base de données
  186. *
  187. * @param Allergene $allergene
  188. * @param string $mode
  189. */
  190. private function saveAllergene(Allergene $allergene, string $mode, EntityManagerInterface $em){
  191. $em->persist($allergene);
  192. $em->flush();
  193. if($mode == 'new') {
  194. $this->addFlash('success', 'L"Allergene a été ajouté avec succès');
  195. } else {
  196. $this->addFlash('success', 'L"Allergene a été modifié avec succès');
  197. }
  198. }
  199. }