getLast(); //$page = $entityManager->find('App\Entity\Page', $_POST['page_id']); $path = htmlspecialchars($_POST['page_menu_path']); // mise en snake_case: filtre caractères non-alphanumériques, minuscule, doublons d'underscore, trim des underscores $path = trim(preg_replace('/_+/', '_', strtolower(preg_replace('/[^a-zA-Z0-9]/', '_', $path))), '_'); $page->setEndOfPath($path); foreach(Director::$menu_data->getChildren() as $child){ if($child->getEndOfPath() === Director::$page_path->getArray()[0]->getEndOfPath()){ $child->fillChildrenPagePath(); // MAJ de $page_path } } $entityManager->flush(); header("Location: " . new URL(['page' => $page->getPagePath(), 'action' => 'modif_page'])); die; } // ajout d'un bloc dans une page elseif(isset($_POST['bloc_title']) && $_POST['bloc_title'] !== null && isset($_POST['bloc_select']) && $_POST['bloc_select'] !== null && isset($_POST['bloc_title_hidden']) && $_POST['bloc_title_hidden'] === '') // contrôle anti-robot avec input hidden { $director = new Director($entityManager, true); // on a besoin de page_path qui dépend de menu_data $page = Director::$page_path->getLast(); $director->findUniqueNodeByName('main'); $director->findItsChildren(); $main = $director->getNode(); $position = count($main->getChildren()) + 1; // position dans la fraterie $bloc = new Node( trim(htmlspecialchars($_POST["bloc_select"])), null, [], $position, $main, $page); $data = new NodeData( ['title' => trim(htmlspecialchars($_POST["bloc_title"]))], $bloc); $entityManager->persist($bloc); $entityManager->persist($data); $entityManager->flush(); header("Location: " . new URL(['page' => $_GET['page'], 'action' => 'modif_page'])); die; } // suppression d'un bloc de page elseif(isset($_POST['delete_bloc_id']) && $_POST['delete_bloc_id'] !== null && isset($_POST['delete_bloc_hidden']) && $_POST['delete_bloc_hidden'] === '') // contrôle anti-robot avec input hidden { $director = new Director($entityManager, true); $director->findUniqueNodeByName('main'); $director->findItsChildren(); //$director->findNodeById((int)$_POST['delete_bloc_id']); $main = $director->getNode(); $bloc; foreach($main->getChildren() as $child){ if($child->getId() === (int)$_POST['delete_bloc_id']){ $bloc = $child; break; } } $main->removeChild($bloc); // réindex le tableau $children au passage $main->reindexPositions(); $entityManager->remove($bloc); // suppression en BDD $entityManager->flush(); header("Location: " . new URL(['page' => $_GET['page'], 'action' => 'modif_page'])); die; } /* -- page Menu et chemins -- */ // création d'une entrée de menu avec une URL elseif(isset($_POST["label_input"]) && isset($_POST["url_input"]) && isset($_POST["location"])){ Director::$menu_data = new Menu($entityManager); $previous_page = Director::$menu_data->findPageById((int)$_POST["location"]); // (int) à cause de declare(strict_types=1); $parent = $previous_page->getParent(); $page = new Page( trim(htmlspecialchars($_POST["label_input"])), filter_var($_POST["url_input"], FILTER_VALIDATE_URL), true, true, false, $previous_page->getPosition(), $parent); // on indique pour la nouvelle entrée la même position que la précédente, puis addChild l'ajoute à la fin du tableau "children" avant de déclencher un tri // exemple avec 2 comme position demandée: 1 2 3 4 2 devient 1 2 3 4 5 et la nouvelle entrée sera en 3è position if($parent == null){ $parent = Director::$menu_data; } $parent->addChild($page); // true pour réindexer les positions en BDD $parent->reindexPositions(); $entityManager->persist($page); $entityManager->flush(); header("Location: " . new URL(['page' => $_GET['from']])); die; } // suppression d'une entrée de menu avec une URL elseif(isset($_POST['delete']) && isset($_POST['x']) && isset($_POST['y'])){ // 2 params x et y sont là parce qu'on a cliqué sur une image Director::$menu_data = new Menu($entityManager); $page = Director::$menu_data->findPageById((int)$_POST["delete"]); $parent = $page->getParent(); if($parent == null){ $parent = Director::$menu_data; } $parent->removeChild($page); // suppression de $children avant de trier $parent->reindexPositions(); $entityManager->remove($page); // suppression en BDD $entityManager->flush(); header("Location: " . new URL(['page' => $_GET['from']])); die; } else{ header("Location: " . new URL(['error' => 'paramètres inconnus'])); die; } } /* -- requêtes AJAX -- */ else{ require '../src/controller/ajax.php'; } }