From 6c28cf85e1b5921e4fb77be230651bc22e83b801 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 26 Aug 2025 20:34:38 +0200 Subject: redirections correctes et bouton supprimer page article, ArticleController::deleteArticle renvoie une Response --- public/css/body.css | 5 +++++ public/js/tinymce.js | 27 ++++++++++----------------- src/controller/ArticleController.php | 23 +++++++++++------------ src/router.php | 21 ++++++++++++++++----- src/view/NewBuilder.php | 26 ++++++++++++++++++++------ src/view/templates/new.php | 1 - 6 files changed, 62 insertions(+), 41 deletions(-) diff --git a/public/css/body.css b/public/css/body.css index 274627c..17bdad5 100644 --- a/public/css/body.css +++ b/public/css/body.css @@ -188,6 +188,11 @@ button .action_icon:hover display: flex; justify-content: end; } +.delete_button +{ + float: right; + margin-left: 2px; +} section button, section input[type=submit] { color: #ff1d04; diff --git a/public/js/tinymce.js b/public/js/tinymce.js index 18974af..29b82bf 100644 --- a/public/js/tinymce.js +++ b/public/js/tinymce.js @@ -184,20 +184,13 @@ function deleteArticle(id, page = '') { .then(data => { if(data.success) { - if(page === 'article'){ - // redirection vers la page d'accueil - window.setTimeout(function(){ - location.href = "index.php?page=accueil"; - }, 0); - } - else{ - // Supprimer l'article du DOM - const articleElement = document.getElementById(id); - articleElement.parentElement.parentElement.remove(); //
est deux niveau au dessus - } + // Supprimer l'article du DOM + const articleElement = document.getElementById(id); + articleElement.parentElement.parentElement.remove(); //
est deux niveau au dessus + toastNotify("L'article a été supprimé."); } else { - alert('Erreur lors de la suppression de l\'article.'); + toastNotify('Erreur lors de la suppression de l\'article.'); } }) .catch(error => { @@ -261,7 +254,7 @@ function submitArticle(id, page = '', clone = null) var content; const params = new URL(document.location).searchParams; // "search" = ? et paramètres, searchParams = objet avec des getters - // clic sur "tout enregistrer" + // clic sur "Tout enregistrer" if(id[0] === 'n' && page === 'article'){ const prefixes = ['t', 'p', 'i', 'd']; const allElemsWithId = document.querySelectorAll('.data'); @@ -306,16 +299,16 @@ function submitArticle(id, page = '', clone = null) }) .then(response => response.json()) .then(data => { - if (data.success) { + if(data.success) { //console.log(data.article_id); if(id[0] === 'n' && page === 'article'){ console.log('données envoyées au serveur avec succès.'); // redirection page de l'article window.setTimeout(function(){ - location.href = "index.php?page=article&id=" + data.article_id; + const url_params = new URLSearchParams(window.location.search); // le "$_GET" de javascript + location.href = "index.php?page=article&id=" + data.article_id + "&from=" + url_params.get('from'); }, 0); - } else{ // Fermer l'éditeur et mettre à jour le contenu de l'article @@ -325,7 +318,7 @@ function submitArticle(id, page = '', clone = null) } } } - else { + else{ alert('Erreur lors de la sauvegarde de l\'article.'); } }) diff --git a/src/controller/ArticleController.php b/src/controller/ArticleController.php index 078754a..a982d8c 100644 --- a/src/controller/ArticleController.php +++ b/src/controller/ArticleController.php @@ -6,6 +6,7 @@ declare(strict_types=1); use App\Entity\Node; use App\Entity\Article; use Doctrine\ORM\EntityManager; +use Symfony\Component\HttpFoundation\Response; class ArticleController { @@ -97,7 +98,7 @@ class ArticleController die; } - static public function deleteArticle(EntityManager $entityManager, array $json): void + static public function deleteArticle(EntityManager $entityManager, array $json): Response { $director = new Director($entityManager); $director->makeArticleNode($json['id'], true); @@ -107,20 +108,18 @@ class ArticleController $entityManager->remove($article); $section->removeChild($article); $section->sortChildren(true); // régénère les positions - $entityManager->flush(); - - // test avec une nouvelle requête qui ne devrait rien trouver - if(!$director->makeArticleNode($json['id'])) - { - echo json_encode(['success' => true]); - // on pourrait afficher une notification "toast" + try{ + $entityManager->flush(); + return new Response( + '{"success": true, "message": "Article supprimé avec succès"}', + Response::HTTP_OK); // 200 } - else{ - http_response_code(500); - echo json_encode(['success' => false, 'message' => 'Erreur lors de la suppression de l\'article.']); + catch(Exception $e){ + return new Response( + '{"success": false, "message": "Erreur: ' . $e->getMessage() . '"}', + Response::HTTP_INTERNAL_SERVER_ERROR); // 500 } - die; } static public function switchPositions(EntityManager $entityManager, array $json): void diff --git a/src/router.php b/src/router.php index eddd199..8aa0aa9 100644 --- a/src/router.php +++ b/src/router.php @@ -13,7 +13,6 @@ $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' requête AJAX xhs, non uti declare(strict_types=1); - if($_SERVER['REQUEST_METHOD'] === 'GET'){ // table "user" vide if(!UserController::existUsers($entityManager)){ @@ -95,9 +94,10 @@ elseif($_SERVER['REQUEST_METHOD'] === 'POST'){ { ArticleController::editorSubmit($entityManager, $json); } - elseif($_GET['action'] === 'delete_article' && isset($json['id'])) - { - ArticleController::deleteArticle($entityManager, $json); + elseif($_GET['action'] === 'delete_article' && isset($json['id'])){ + $response = ArticleController::deleteArticle($entityManager, $json); // version AJAX + $response->send(); + die; } // inversion de la position de deux noeuds elseif($_GET['action'] === 'switch_positions' && isset($json['id1']) && isset($json['id2'])) @@ -214,8 +214,19 @@ elseif($_SERVER['REQUEST_METHOD'] === 'POST'){ /* -- envoi formulaire HTML -- */ elseif($_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded') { + if($_GET['action'] === 'delete_article' && isset($_GET['id'])){ + $response = json_decode(ArticleController::deleteArticle($entityManager, $_GET)->getContent(), true); // version formulaire + $url = new URL; + if(isset($_GET['from'])){ + $url->addParams(['page' => $_GET['from']]); + } + $url->addParams(['success' => $response['success'], 'message' => $response['message']]); + header('Location: ' . $url); + die; + } + /* -- nouvelle page -- */ - if(isset($_POST['page_name']) && $_POST['page_name'] !== null + elseif(isset($_POST['page_name']) && $_POST['page_name'] !== null && isset($_POST['page_name_path']) && $_POST['page_name_path'] !== null && isset($_POST['page_location']) && $_POST['page_location'] !== null && isset($_POST['page_description']) && $_POST['page_description'] !== null diff --git a/src/view/NewBuilder.php b/src/view/NewBuilder.php index fc6ade6..2d30d32 100644 --- a/src/view/NewBuilder.php +++ b/src/view/NewBuilder.php @@ -99,14 +99,28 @@ class NewBuilder extends AbstractBuilder $submit_js_date = 'onclick="submitDate(\'' . $id_date . '\')"'; $submit_date = ''; $date_buttons = '
' . $modify_date . $close_editor_date . $submit_date . '
'; - - $submit_article = ''; - // nouvel article: bouton pour valider la création d'un nouvel article + + // mode nouvel article if($_GET['id'][0] != 'i'){ + $delete_article = ''; + // valider la création d'un nouvel article $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"'; - $submit_article = '

' . "\n"; + $submit_article = '

' . "\n"; } - $admin_buttons = $submit_article; + // mode article existant + else{ + // supprimer article existant + $url = new URL(['action' => 'delete_article', 'id' => $_GET['id'], 'from' => $_GET['from']]); + $delete_article = '
+

+
' . "\n"; + $submit_article = ''; + } + + $admin_buttons = $delete_article . $from_to_button . $submit_article; } // page d'accueil else{ @@ -126,7 +140,7 @@ class NewBuilder extends AbstractBuilder $submit_article = ''; - $admin_buttons = $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article; + $admin_buttons = $from_to_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article; } } diff --git a/src/view/templates/new.php b/src/view/templates/new.php index 6533913..1b25eba 100644 --- a/src/view/templates/new.php +++ b/src/view/templates/new.php @@ -24,7 +24,6 @@
-
-- cgit v1.2.3