src\Controller\PlatController.php line 20

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\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use App\ImageOptimizer;
  10. use App\Entity\Plat;
  11. use App\Entity\Contient;
  12. use App\Entity\Allergene;
  13. use App\Form\PlatType;
  14. class PlatController extends AbstractController
  15. {
  16. #[Route('/plat/photo/{id}', name: 'app_plat_photo')]
  17. public function Photo(EntityManagerInterface $em,int $id): Response
  18. {
  19. // On récupère l'plat qui correspond à l'id passé dans l'url
  20. $plat = $em->getRepository(Plat::class)->findOneBy(['plat_id' => $id]);
  21. return new Response(stream_get_contents($plat->getPhoto()), 200, ['Content-Type' => 'image/jpeg']);
  22. }
  23. #[Route('/plat/liste', name: 'app_plat_liste')]
  24. public function liste(EntityManagerInterface $em, PaginatorInterface $paginator,Request $request): Response
  25. {
  26. if ($request->query->get('filterField') && $request->query->get('filterValue') && !is_numeric($request->query->get('filterValue'))) {
  27. $request->query->set('filterValue', "*".$request->query->get('filterValue')."*");
  28. }
  29. // On récupère tous les articles disponibles en base de données
  30. $query = $em->createQuery('SELECT plat FROM App\Entity\Plat plat');
  31. $pagination = $paginator->paginate(
  32. $query, /* query NOT result */
  33. $request->query->getInt('page', 1), /* page number */
  34. 10 /* limit per page */
  35. );
  36. return $this->render('plat/liste.html.twig', [
  37. 'pagination' => $pagination
  38. ]);
  39. }
  40. #[Route('/plat/index/{id}', name: 'app_plat_index')]
  41. public function index(EntityManagerInterface $em,PaginatorInterface $paginator, Request $request,int $id): Response
  42. {
  43. if ($request->query->get('filterField') && $request->query->get('filterValue') && !is_numeric($request->query->get('filterValue'))) {
  44. $request->query->set('filterValue', "*".$request->query->get('filterValue')."*");
  45. }
  46. // On récupère l'plat qui correspond à l'id passé dans l'url
  47. $plat = $em->getRepository(Plat::class)->findOneBy(['plat_id' => $id]);
  48. if (!$plat) {
  49. $this->addFlash('danger', 'Le plat n"existe pas');
  50. return $this->redirectToRoute('app_plat_liste');
  51. }
  52. $allergenes = $plat->getContients()->map(function($contient) {
  53. return $contient->getAllergeneId();
  54. })->toArray();
  55. if ($allergenes) {
  56. // On récupère tous les articles disponibles en base de données
  57. $query = $em->createQueryBuilder()
  58. ->select('allergene')
  59. ->from(Allergene::class, 'allergene')
  60. ->where('allergene.allergene_id NOT IN (:allergenes)')
  61. ->setParameter('allergenes', $allergenes);
  62. }
  63. else
  64. {
  65. $query = $em->createQueryBuilder()
  66. ->select('allergene')
  67. ->from(Allergene::class, 'allergene');
  68. }
  69. $pagination = $paginator->paginate(
  70. $query, /* query NOT result */
  71. $request->query->getInt('page', 1), /* page number */
  72. 10 /* limit per page */
  73. );
  74. return $this->render('plat/index.html.twig', [
  75. 'plat' => $plat,
  76. 'allergenes' => $allergenes,
  77. 'pagination' => $pagination
  78. ]);
  79. }
  80. #[Route('/plat/add', name: 'app_plat_add')]
  81. public function add(EntityManagerInterface $em, Request $request, ImageOptimizer $imageOptimizer): Response
  82. {
  83. $mode = 'new';
  84. $plat = new plat();
  85. $form = $this->createForm(PlatType::class, $plat);
  86. $form->handleRequest($request);
  87. if($form->isSubmitted() && $form->isValid()) {
  88. $image = $form->get('file')->getData();
  89. if ($image) {
  90. $fichier = md5(uniqid()) . '.' . $image->guessExtension();
  91. $image->move(
  92. $this->getParameter('upload_directory'),
  93. $fichier,
  94. );
  95. $imageOptimizer->resize($this->getParameter('upload_directory') . '/' . $fichier);
  96. $plat->setPhoto( file_get_contents($this->getParameter('upload_directory') . '/' . $fichier) );
  97. $this->addFlash('success', 'Image téléchargée avec succès');
  98. $this->saveplat($plat, $mode,$em);
  99. return $this->redirectToRoute('app_plat_index', ['id' => $plat->getPlatId()]);
  100. }
  101. else
  102. {
  103. $this->addFlash('danger', 'Veuillez télécharger une image du plat');
  104. }
  105. }
  106. $parameters = array(
  107. 'form' => $form->createView(),
  108. 'plat' => $plat,
  109. 'mode' => $mode
  110. );
  111. return $this->render('plat/edit.html.twig', $parameters);
  112. }
  113. #[Route('/plat/edit/{id}', name: 'app_plat_edit')]
  114. public function edit(EntityManagerInterface $em, Request $request, int $id, ImageOptimizer $imageOptimizer): Response
  115. {
  116. $mode = 'update';
  117. // On récupère l'plat qui correspond à l'id passé dans l'url
  118. $plat = $em->getRepository(plat::class)->findOneBy(['plat_id' => $id]);
  119. if (!$plat) {
  120. $this->addFlash('danger', 'Le plat n"existe pas');
  121. return $this->redirectToRoute('app_plat_liste');
  122. }
  123. $form = $this->createForm(platType::class, $plat);
  124. $form->handleRequest($request);
  125. if($form->isSubmitted() && $form->isValid()) {
  126. $image = $form->get('file')->getData();
  127. if ($image) {
  128. $fichier = md5(uniqid()) . '.' . $image->guessExtension();
  129. $image->move(
  130. $this->getParameter('upload_directory'),
  131. $fichier,
  132. );
  133. $imageOptimizer->resize($this->getParameter('upload_directory') . '/' . $fichier);
  134. $plat->setPhoto(file_get_contents($this->getParameter('upload_directory') . '/' . $fichier) );
  135. $this->addFlash('success', 'Image téléchargée avec succès');
  136. }
  137. if (!$image&& !$plat->getPhoto()) {
  138. $this->addFlash('danger', 'Veuillez télécharger une image du plat');
  139. }
  140. else
  141. {
  142. $this->saveplat($plat, $mode,$em);
  143. return $this->redirectToRoute('app_plat_index', ['id' => $id]);
  144. }
  145. }
  146. $parameters = array(
  147. 'form' => $form->createView(),
  148. 'plat' => $plat,
  149. 'mode' => $mode
  150. );
  151. return $this->render('plat/edit.html.twig', $parameters);
  152. }
  153. #[Route('/plat/remove/{id}', name: 'app_plat_remove')]
  154. public function remove(EntityManagerInterface $em, int $id): Response
  155. {
  156. // On récupère l'plat qui correspond à l'id passé dans l'URL
  157. $plat = $em->getRepository(Plat::class)->findOneBy(['plat_id' => $id]);
  158. if (!$plat) {
  159. $this->addFlash('danger', 'Le plat n"existe pas');
  160. return $this->redirectToRoute('app_plat_liste');
  161. }
  162. // L'plat est supprimé
  163. $em->remove($plat);
  164. $em->flush();
  165. $this->addFlash('success', 'Le plat a été supprimé avec succès');
  166. return $this->redirectToRoute('app_plat_liste');
  167. }
  168. #[Route('/plat/allergeneadd/{idplat}/{idallergene}', name: 'app_plat_allergeneadd')]
  169. public function platadd(EntityManagerInterface $em, int $idplat, int $idallergene): Response
  170. {
  171. // On récupère l'Menu qui correspond à l'id passé dans l'url
  172. $plat= $em->getRepository(Plat::class)->findOneBy(['plat_id' => $idplat]);
  173. if (!$plat) {
  174. $this->addFlash('danger', 'Le plat n"existe pas');
  175. return $this->redirectToRoute('app_plat_index', ['id' => $idplat]);
  176. }
  177. $allergene = $em->getRepository(Allergene::class)->findOneBy(['allergene_id' => $idallergene]);
  178. if (!$allergene) {
  179. $this->addFlash('danger', 'L"Allergene n"existe pas');
  180. return $this->redirectToRoute('app_plat_index', ['id' => $idplat]);
  181. }
  182. $contient = new Contient();
  183. $contient->setPlatId($plat);
  184. $contient->setAllergeneId($allergene);
  185. $em->persist($contient);
  186. $em->flush();
  187. $this->addFlash('success', 'Le allergène a été ajouté avec succès');
  188. return $this->redirectToRoute('app_plat_index', ['id' => $idplat]);
  189. }
  190. #[Route('/plat/allergeneremove/{idplat}/{idallergene}', name: 'app_plat_allergeneremove')]
  191. public function allergeneremove(EntityManagerInterface $em, int $idplat, int $idallergene): Response
  192. {
  193. // On récupère l'Plat qui correspond à l'id passé dans l'url
  194. $plat = $em->getRepository(Plat::class)->findOneBy(['plat_id' => $idplat]);
  195. if (!$plat) {
  196. $this->addFlash('danger', 'Le plat n"existe pas');
  197. return $this->redirectToRoute('app_plat_index', ['id' => $idplat]);
  198. }
  199. $contient = $plat->getContients()->filter(function($contient) use ($idallergene) {
  200. return $contient->getAllergeneId()->getAllergeneId() === $idallergene;
  201. })->first();
  202. if ($contient) {
  203. $em->remove($contient);
  204. $em->flush();
  205. }
  206. $this->addFlash('success', 'Le allergène a été supprimé avec succès');
  207. return $this->redirectToRoute('app_plat_index', ['id' => $idplat]);
  208. }
  209. /**
  210. * Enregistrer un plat en base de données
  211. *
  212. * @param plat $plat
  213. * @param string $mode
  214. */
  215. private function saveplat(Plat $plat, string $mode, EntityManagerInterface $em){
  216. $em->persist($plat);
  217. $em->flush();
  218. if($mode == 'new') {
  219. $this->addFlash('success', 'Le plat a été ajouté avec succès');
  220. } else {
  221. $this->addFlash('success', 'Le plat a été modifié avec succès');
  222. }
  223. }
  224. }