From 962d315ec0c99974df3dc2261bf94c54ca8cdbdd Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 27 Apr 2025 23:58:46 +0200 Subject: page menu et chemins, partie3 --- src/controller/ajax.php | 87 ++++++++++++++++++++++++++++++++++++++++- src/controller/installation.php | 14 +++---- src/controller/post.php | 82 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 172 insertions(+), 11 deletions(-) (limited to 'src/controller') diff --git a/src/controller/ajax.php b/src/controller/ajax.php index 9d1cc42..a20bd87 100644 --- a/src/controller/ajax.php +++ b/src/controller/ajax.php @@ -170,7 +170,8 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json' && isset($_GET['action'])) } // détection des requêtes d'upload d'image de tinymce -if(strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false && isset($_GET['action']) && $_GET['action'] === 'upload_image'){ +if(strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false && isset($_GET['action']) && $_GET['action'] === 'upload_image') +{ if (isset($_FILES['file'])) { $file = $_FILES['file']; $dest = 'images/'; @@ -211,6 +212,90 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json' && isset($_GET['menu_edit'])) $json = json_decode($data, true); Director::$menu_data = new Menu($entityManager); + // flèche gauche <=: position = position du parent + 1, parent = grand-parent, recalculer les positions + if($_GET['menu_edit'] === 'move_one_level_up' && isset($json['id'])){ + $id = $json['id']; + $page = Director::$menu_data->findPageById((int)$id); + + $parent = $page->getParent(); // peut être null + if($parent === null){ + // 1er niveau: ne rien faire + echo json_encode(['success' => false]); + die; + } + // BDD + else{ + $page->setPosition($parent->getPosition() + 1); // nouvelle position + + // 2ème niveau: le parent devient $menu_data, puis null après tri + if($parent->getParent() === null){ + // connexion dans les deux sens + $page->setParent(Director::$menu_data); // => pour la persistance + + //Director::$menu_data->addChild($page); // => pour sortChildren + $page->getParent()->addChild($page); // => pour sortChildren + //Director::$menu_data->sortChildren(true); // positions décaléees des nouveaux petits frères + $page->getParent()->sortChildren(true); // positions décaléees des nouveaux petits frères + $page->setParent(null); + + // affichage + $page->setPagePath($page->getEndOfPath()); + $page->fillChildrenPagePath(); + } + // 3ème niveau et plus + else{ + $page->setParent($parent->getParent()); // nouveau parent + $page->getParent()->addChild($page); // => pour sortChildren + $page->getParent()->sortChildren(true); // positions décaléees des nouveaux petits frères + $page->fillChildrenPagePath($page->getParent()->getPagePath()); + } + //$parent->sortChildren(true); // positions des enfants restants, inutile si la fonction est récursive? + $entityManager->flush(); + + // affichage + $parent->removeChild($page); + $nav_builder = new NavBuilder(); + $menu_builder = new MenuBuilder(null, false); + echo json_encode(['success' => true, 'nav' => $nav_builder->render(), 'menu_buttons' => $menu_builder->render()]); + die; + } + } + + // flèche droite =>: position = nombre d'éléments de la fraterie + 1, l'élément précédent devient le parent + if($_GET['menu_edit'] === 'move_one_level_down' && isset($json['id'])){ + $id = $json['id']; + $page = Director::$menu_data->findPageById((int)$id); + + $parent = $page->getParent(); // peut être null + if($parent == null){ + $parent = Director::$menu_data; + } + + // BDD + $parent->sortChildren(true); // trie et réindexe par sécurité: 1, 2, 3... + if($page->getPosition() > 1){ + foreach($parent->getChildren() as $child){ + //echo $child->getPageName(); + if($child->getPosition() === $page->getPosition() - 1){ + $page->setParent($child); + break; + } + } + $page->setPosition(count($page->getParent()->getChildren()) + 1); + } + $entityManager->flush(); + + // affichage + $parent->removeChild($page); + $page->getParent()->addChild($page); + $page->fillChildrenPagePath($page->getParent()->getPagePath()); // variable non mappée $page_path + $nav_builder = new NavBuilder(); + $menu_builder = new MenuBuilder(null, false); + + echo json_encode(['success' => true, 'nav' => $nav_builder->render(), 'menu_buttons' => $menu_builder->render()]); + die; + } + if($_GET['menu_edit'] === 'switch_positions' && isset($json['id1']) && isset($json['id2'])) { $id1 = $json['id1']; diff --git a/src/controller/installation.php b/src/controller/installation.php index ff168eb..4aaa4e0 100644 --- a/src/controller/installation.php +++ b/src/controller/installation.php @@ -77,12 +77,12 @@ HTACCESS; function makeStartPage(EntityManager $entityManager){ /* -- table page -- */ // paramètres: name_page, end_of_path, reachable, in_menu, position, parent - $accueil = new Page('Accueil', 'accueil', true, true, 1, NULL); - $connection = new Page('Connexion', 'connexion', true, false, NULL, NULL); - $article = new Page('Article', 'article', true, false, NULL, NULL); - $menu_paths = new Page("Menu et chemins", 'menu_chemins', true, false, NULL, NULL); - $edit_page = new Page("Modification d'une page", 'modif_page', true, false, NULL, NULL); - $new_page = new Page('Nouvelle page', 'nouvelle_page', true, false, NULL, NULL); + $accueil = new Page('Accueil', 'accueil', true, true, false, 1, NULL); + $connection = new Page('Connexion', 'connexion', true, false, false, NULL, NULL); + $article = new Page('Article', 'article', true, false, false, NULL, NULL); + $menu_paths = new Page("Menu et chemins", 'menu_chemins', true, false, false, NULL, NULL); + $edit_page = new Page("Modification d'une page", 'modif_page', true, false, false, NULL, NULL); + $new_page = new Page('Nouvelle page', 'nouvelle_page', true, false, false, NULL, NULL); /* -- table node -- */ // paramètres: name_node, article_timestamp, attributes, position, parent, page, article @@ -95,7 +95,7 @@ function makeStartPage(EntityManager $entityManager){ $head_login = new Node('head', NULL, ["stop" => true, 'css_array' => ['body', 'head', 'nav', 'main'], 'js_array' => ['main']], 1, NULL, $connection, NULL); $login = new Node('login', NULL, [], 1, $main, $connection, NULL); $head_article = new Node('head', NULL, ['css_array' => ['body', 'head', 'nav', 'main', 'foot'], 'js_array' => ['main']], 1, NULL, $article, NULL); - $head_edit_menu = new Node('head', NULL, ['css_array' => ['body', 'head', 'nav', 'main', 'menu'], 'js_array' => ['main']], 1, NULL, $menu_paths, NULL); + $head_edit_menu = new Node('head', NULL, ['css_array' => ['body', 'head', 'nav', 'main', 'menu'], 'js_array' => ['main', 'menu']], 1, NULL, $menu_paths, NULL); $edit_menu = new Node('menu', NULL, [], 1, $main, $menu_paths, NULL); /* -- table image -- */ diff --git a/src/controller/post.php b/src/controller/post.php index 926a5ae..8924686 100644 --- a/src/controller/post.php +++ b/src/controller/post.php @@ -5,13 +5,89 @@ declare(strict_types=1); if($_SERVER['REQUEST_METHOD'] === 'POST' && $_SESSION['admin'] === true) { - // requêtes AJAX + /* -- requêtes non AJAX -- */ + // page Menu et chemin + /*if(isset($_POST['menu_edit_post']) && isset($_POST['id'])) + { + // <= flèche gauche: le parent devient le grand-parent position = position du parent + 1, recalculer les positions des enfants restants + if($_POST['menu_edit_post'] == 'move_one_level_up'){ + Director::$menu_data = new Menu($entityManager); + $page = Director::$menu_data->findPageById((int)$_POST['id']); + + $parent = $page->getParent(); // peut être null + if($parent === null){ + // 1er niveau: ne rien faire + header('Location: ' . new URL(['page' => 'menu_chemins'])); + die; + } + else{ + $page->setPosition($parent->getPosition() + 1); // nouvelle position + + // 2ème niveau: le parent devient $menu_data, puis null après tri + if($parent->getParent() === null){ + // connexion dans les deux sens + $page->setParent(Director::$menu_data); // => pour la persistance + Director::$menu_data->addChild($page); // => pour sortChildren + + //Director::$menu_data->sortChildren(true); // positions décaléees des nouveaux petits frères + $page->getParent()->sortChildren(true); // positions décaléees des nouveaux petits frères + + $page->setParent(null); + } + // 3ème niveau et plus + else{ + $page->setParent($parent->getParent()); // nouveau parent + $page->getParent()->sortChildren(true); // positions décaléees des nouveaux petits frères + } + //$parent->sortChildren(true); // positions des enfants restants, inutile si la fonction est récursive? + echo $page->getPosition(); + //die; + } + $entityManager->flush(); + + header('Location: ' . new URL(['page' => 'menu_chemins'])); + die; + } + // => flèche droite: l'élément précédent devient le parent, position = nombre d'éléments de la fraterie + 1 + elseif($_POST['menu_edit_post'] == 'move_one_level_down') + { + Director::$menu_data = new Menu($entityManager); + $page = Director::$menu_data->findPageById((int)$_POST['id']); + + $parent = $page->getParent(); // peut être null + if($parent == null){ + $parent = Director::$menu_data; + } + + $parent->sortChildren(true); // trie et réindexe par sécurité: 1, 2, 3... + if($page->getPosition() > 1){ + foreach($parent->getChildren() as $child){ + echo $child->getPageName(); + if($child->getPosition() === $page->getPosition() - 1){ + $page->setParent($child); + break; + } + } + $page->setPosition(count($page->getParent()->getChildren()) + 1); + } + $entityManager->flush(); + + header('Location: ' . new URL(['page' => 'menu_chemins'])); + die; + } + else{ + // you talking to me? + die; + } + }*/ + + /* -- requêtes AJAX -- */ require '../src/controller/ajax.php'; // formulaires HTML - if(isset($_POST['from']) // page d'où vient la requête + /*if(isset($_POST['from']) // page d'où vient la requête && isset($_POST)) // données { echo "requête envoyée en validant un formulaire"; - } + }*/ } -- cgit v1.2.3