From 28d300b48ded1d472d3593f3afc0c71c4fd2e0aa Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 2 Nov 2025 20:08:52 +0100 Subject: =?UTF-8?q?blocage=20suppression=20derni=C3=A8re=20page,=20page=20?= =?UTF-8?q?par=20d=C3=A9faut=20=3D=20premi=C3=A8re=20entr=C3=A9e=20du=20me?= =?UTF-8?q?nu=20et=20non=20plus=20"accueil"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/PageManagementController.php | 45 ++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 14 deletions(-) (limited to 'src/controller') diff --git a/src/controller/PageManagementController.php b/src/controller/PageManagementController.php index 45c6027..7078866 100644 --- a/src/controller/PageManagementController.php +++ b/src/controller/PageManagementController.php @@ -88,20 +88,37 @@ class PageManagementController static public function deletePage(EntityManager $entityManager): void { - $page = $entityManager->find('App\Entity\Page', (int)$_POST['page_id']); - $nodes = $entityManager->getRepository('App\Entity\Node')->findBy(['page' => $page]); - $data = []; - foreach($nodes as $node){ - $data[] = $entityManager->getRepository('App\Entity\NodeData')->findOneBy(['node' => $node]); - $entityManager->remove($node); - } - foreach($data as $one_data){ - $entityManager->remove($one_data); - } - $entityManager->remove($page); // suppression en BDD - - $entityManager->flush(); - header("Location: " . new URL); + $menu = new Menu($entityManager); + $page = $menu->findPageById((int)$_POST['page_id']); + $url = new URL; + + // test dernière page + // => $menu a un enfant et pas de petits enfants + // => $menu->getChildren()->isEmpty() n'est théoriquement pas possible + if($menu->getChildren()->isEmpty() || (count($menu->getChildren()) === 1 && $menu->getChildren()[0]->getChildren()->isEmpty())){ + $url->addParams(['page' => $page->getEndOfPath(), 'error' => 'you_tried_to_remove_the_last_page']); + } + else{ + $nodes = $entityManager->getRepository('App\Entity\Node')->findBy(['page' => $page]); + $data = []; + foreach($nodes as $node){ + $data[] = $entityManager->getRepository('App\Entity\NodeData')->findOneBy(['node' => $node]); + $entityManager->remove($node); + } + foreach($data as $one_data){ + $entityManager->remove($one_data); + } + $entityManager->remove($page); // suppression en BDD + $entityManager->flush(); + + // destination vers la première page dispo + // traite les cas prévus dans le if plus haut + $menu->removeChild($page); + $next_page = $menu->getChildren()->isEmpty() ? $next_page = $page->getChildren()[0] : $menu->getChildren()[0]; + $url->addParams(['page' => $next_page->getEndOfPath()]); + } + + header("Location: " . $url); die; } -- cgit v1.2.3