aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-08-26 20:34:38 +0200
committerpolo <ordipolo@gmx.fr>2025-08-26 20:34:38 +0200
commit6c28cf85e1b5921e4fb77be230651bc22e83b801 (patch)
treef42e38a5a389a0b3960ed9d085998aee668be3aa
parentfdbc0d2c6366019249d19ed387df877eda90b320 (diff)
downloadcms-6c28cf85e1b5921e4fb77be230651bc22e83b801.zip
redirections correctes et bouton supprimer page article, ArticleController::deleteArticle renvoie une Response
-rw-r--r--public/css/body.css5
-rw-r--r--public/js/tinymce.js27
-rw-r--r--src/controller/ArticleController.php23
-rw-r--r--src/router.php21
-rw-r--r--src/view/NewBuilder.php26
-rw-r--r--src/view/templates/new.php1
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
188 display: flex; 188 display: flex;
189 justify-content: end; 189 justify-content: end;
190} 190}
191.delete_button
192{
193 float: right;
194 margin-left: 2px;
195}
191section button, section input[type=submit] 196section button, section input[type=submit]
192{ 197{
193 color: #ff1d04; 198 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 = '') {
184 .then(data => { 184 .then(data => {
185 if(data.success) 185 if(data.success)
186 { 186 {
187 if(page === 'article'){ 187 // Supprimer l'article du DOM
188 // redirection vers la page d'accueil 188 const articleElement = document.getElementById(id);
189 window.setTimeout(function(){ 189 articleElement.parentElement.parentElement.remove(); // <article> est deux niveau au dessus
190 location.href = "index.php?page=accueil"; 190 toastNotify("L'article a été supprimé.");
191 }, 0);
192 }
193 else{
194 // Supprimer l'article du DOM
195 const articleElement = document.getElementById(id);
196 articleElement.parentElement.parentElement.remove(); // <article> est deux niveau au dessus
197 }
198 } 191 }
199 else { 192 else {
200 alert('Erreur lors de la suppression de l\'article.'); 193 toastNotify('Erreur lors de la suppression de l\'article.');
201 } 194 }
202 }) 195 })
203 .catch(error => { 196 .catch(error => {
@@ -261,7 +254,7 @@ function submitArticle(id, page = '', clone = null)
261 var content; 254 var content;
262 const params = new URL(document.location).searchParams; // "search" = ? et paramètres, searchParams = objet avec des getters 255 const params = new URL(document.location).searchParams; // "search" = ? et paramètres, searchParams = objet avec des getters
263 256
264 // clic sur "tout enregistrer" 257 // clic sur "Tout enregistrer"
265 if(id[0] === 'n' && page === 'article'){ 258 if(id[0] === 'n' && page === 'article'){
266 const prefixes = ['t', 'p', 'i', 'd']; 259 const prefixes = ['t', 'p', 'i', 'd'];
267 const allElemsWithId = document.querySelectorAll('.data'); 260 const allElemsWithId = document.querySelectorAll('.data');
@@ -306,16 +299,16 @@ function submitArticle(id, page = '', clone = null)
306 }) 299 })
307 .then(response => response.json()) 300 .then(response => response.json())
308 .then(data => { 301 .then(data => {
309 if (data.success) { 302 if(data.success) {
310 //console.log(data.article_id); 303 //console.log(data.article_id);
311 if(id[0] === 'n' && page === 'article'){ 304 if(id[0] === 'n' && page === 'article'){
312 console.log('données envoyées au serveur avec succès.'); 305 console.log('données envoyées au serveur avec succès.');
313 306
314 // redirection page de l'article 307 // redirection page de l'article
315 window.setTimeout(function(){ 308 window.setTimeout(function(){
316 location.href = "index.php?page=article&id=" + data.article_id; 309 const url_params = new URLSearchParams(window.location.search); // le "$_GET" de javascript
310 location.href = "index.php?page=article&id=" + data.article_id + "&from=" + url_params.get('from');
317 }, 0); 311 }, 0);
318
319 } 312 }
320 else{ 313 else{
321 // Fermer l'éditeur et mettre à jour le contenu de l'article 314 // Fermer l'éditeur et mettre à jour le contenu de l'article
@@ -325,7 +318,7 @@ function submitArticle(id, page = '', clone = null)
325 } 318 }
326 } 319 }
327 } 320 }
328 else { 321 else{
329 alert('Erreur lors de la sauvegarde de l\'article.'); 322 alert('Erreur lors de la sauvegarde de l\'article.');
330 } 323 }
331 }) 324 })
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);
6use App\Entity\Node; 6use App\Entity\Node;
7use App\Entity\Article; 7use App\Entity\Article;
8use Doctrine\ORM\EntityManager; 8use Doctrine\ORM\EntityManager;
9use Symfony\Component\HttpFoundation\Response;
9 10
10class ArticleController 11class ArticleController
11{ 12{
@@ -97,7 +98,7 @@ class ArticleController
97 die; 98 die;
98 } 99 }
99 100
100 static public function deleteArticle(EntityManager $entityManager, array $json): void 101 static public function deleteArticle(EntityManager $entityManager, array $json): Response
101 { 102 {
102 $director = new Director($entityManager); 103 $director = new Director($entityManager);
103 $director->makeArticleNode($json['id'], true); 104 $director->makeArticleNode($json['id'], true);
@@ -107,20 +108,18 @@ class ArticleController
107 $entityManager->remove($article); 108 $entityManager->remove($article);
108 $section->removeChild($article); 109 $section->removeChild($article);
109 $section->sortChildren(true); // régénère les positions 110 $section->sortChildren(true); // régénère les positions
110 $entityManager->flush();
111
112 // test avec une nouvelle requête qui ne devrait rien trouver
113 if(!$director->makeArticleNode($json['id']))
114 {
115 echo json_encode(['success' => true]);
116 111
117 // on pourrait afficher une notification "toast" 112 try{
113 $entityManager->flush();
114 return new Response(
115 '{"success": true, "message": "Article supprimé avec succès"}',
116 Response::HTTP_OK); // 200
118 } 117 }
119 else{ 118 catch(Exception $e){
120 http_response_code(500); 119 return new Response(
121 echo json_encode(['success' => false, 'message' => 'Erreur lors de la suppression de l\'article.']); 120 '{"success": false, "message": "Erreur: ' . $e->getMessage() . '"}',
121 Response::HTTP_INTERNAL_SERVER_ERROR); // 500
122 } 122 }
123 die;
124 } 123 }
125 124
126 static public function switchPositions(EntityManager $entityManager, array $json): void 125 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
13 13
14declare(strict_types=1); 14declare(strict_types=1);
15 15
16
17if($_SERVER['REQUEST_METHOD'] === 'GET'){ 16if($_SERVER['REQUEST_METHOD'] === 'GET'){
18 // table "user" vide 17 // table "user" vide
19 if(!UserController::existUsers($entityManager)){ 18 if(!UserController::existUsers($entityManager)){
@@ -95,9 +94,10 @@ elseif($_SERVER['REQUEST_METHOD'] === 'POST'){
95 { 94 {
96 ArticleController::editorSubmit($entityManager, $json); 95 ArticleController::editorSubmit($entityManager, $json);
97 } 96 }
98 elseif($_GET['action'] === 'delete_article' && isset($json['id'])) 97 elseif($_GET['action'] === 'delete_article' && isset($json['id'])){
99 { 98 $response = ArticleController::deleteArticle($entityManager, $json); // version AJAX
100 ArticleController::deleteArticle($entityManager, $json); 99 $response->send();
100 die;
101 } 101 }
102 // inversion de la position de deux noeuds 102 // inversion de la position de deux noeuds
103 elseif($_GET['action'] === 'switch_positions' && isset($json['id1']) && isset($json['id2'])) 103 elseif($_GET['action'] === 'switch_positions' && isset($json['id1']) && isset($json['id2']))
@@ -214,8 +214,19 @@ elseif($_SERVER['REQUEST_METHOD'] === 'POST'){
214 /* -- envoi formulaire HTML -- */ 214 /* -- envoi formulaire HTML -- */
215 elseif($_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded') 215 elseif($_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded')
216 { 216 {
217 if($_GET['action'] === 'delete_article' && isset($_GET['id'])){
218 $response = json_decode(ArticleController::deleteArticle($entityManager, $_GET)->getContent(), true); // version formulaire
219 $url = new URL;
220 if(isset($_GET['from'])){
221 $url->addParams(['page' => $_GET['from']]);
222 }
223 $url->addParams(['success' => $response['success'], 'message' => $response['message']]);
224 header('Location: ' . $url);
225 die;
226 }
227
217 /* -- nouvelle page -- */ 228 /* -- nouvelle page -- */
218 if(isset($_POST['page_name']) && $_POST['page_name'] !== null 229 elseif(isset($_POST['page_name']) && $_POST['page_name'] !== null
219 && isset($_POST['page_name_path']) && $_POST['page_name_path'] !== null 230 && isset($_POST['page_name_path']) && $_POST['page_name_path'] !== null
220 && isset($_POST['page_location']) && $_POST['page_location'] !== null 231 && isset($_POST['page_location']) && $_POST['page_location'] !== null
221 && isset($_POST['page_description']) && $_POST['page_description'] !== null 232 && 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
99 $submit_js_date = 'onclick="submitDate(\'' . $id_date . '\')"'; 99 $submit_js_date = 'onclick="submitDate(\'' . $id_date . '\')"';
100 $submit_date = '<p id="submit-' . $id_date . '" class="hidden"><button ' . $submit_js_date . '>Valider</button></p>'; 100 $submit_date = '<p id="submit-' . $id_date . '" class="hidden"><button ' . $submit_js_date . '>Valider</button></p>';
101 $date_buttons = '<div class="button_zone">' . $modify_date . $close_editor_date . $submit_date . '</div>'; 101 $date_buttons = '<div class="button_zone">' . $modify_date . $close_editor_date . $submit_date . '</div>';
102 102
103 $submit_article = ''; 103 // mode nouvel article
104 // nouvel article: bouton pour valider la création d'un nouvel article
105 if($_GET['id'][0] != 'i'){ 104 if($_GET['id'][0] != 'i'){
105 $delete_article = '';
106 // valider la création d'un nouvel article
106 $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"'; 107 $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"';
107 $submit_article = '<p id="save-' . $id . '"><button ' . $submit_js . '><img class="action_icon" src="assets/edit.svg">Tout<br>enregistrer</button></p>' . "\n"; 108 $submit_article = '<p id="save-' . $id . '"><button ' . $submit_js . '><img class="action_icon" src="assets/edit.svg"><span class="delete_button">Tout<br>enregistrer</span></button></p>' . "\n";
108 } 109 }
109 $admin_buttons = $submit_article; 110 // mode article existant
111 else{
112 // supprimer article existant
113 $url = new URL(['action' => 'delete_article', 'id' => $_GET['id'], 'from' => $_GET['from']]);
114 $delete_article = '<form id="delete-' . $id . '" method="post" onsubmit="return confirm(\'Voulez-vous vraiment supprimer cet article ?\');" action="' . $url . '">
115 <p><button type="submit">
116 <img class="action_icon" src="assets/delete-bin.svg">
117 <span class="delete_button">Supprimer<br>cet article</span>
118 </button></p>
119 </form>' . "\n";
120 $submit_article = '';
121 }
122
123 $admin_buttons = $delete_article . $from_to_button . $submit_article;
110 } 124 }
111 // page d'accueil 125 // page d'accueil
112 else{ 126 else{
@@ -126,7 +140,7 @@ class NewBuilder extends AbstractBuilder
126 140
127 $submit_article = '<p id="submit-' . $id . '" class="hidden"></p>'; 141 $submit_article = '<p id="submit-' . $id . '" class="hidden"></p>';
128 142
129 $admin_buttons = $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article; 143 $admin_buttons = $from_to_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article;
130 } 144 }
131 } 145 }
132 146
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 @@
24 </div> 24 </div>
25 <?= $date_buttons ?> 25 <?= $date_buttons ?>
26 <div class="article_admin_zone"> 26 <div class="article_admin_zone">
27 <?= $from_to_button ?>
28 <?= $admin_buttons ?> 27 <?= $admin_buttons ?>
29 </div> 28 </div>
30 </div> 29 </div>