summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo-pc-greta <ordipolo@gmx.fr>2025-04-07 21:38:12 +0200
committerpolo-pc-greta <ordipolo@gmx.fr>2025-04-07 21:38:12 +0200
commit1937a2f49ebe920b79604cb5df3649f9f1dff738 (patch)
treefac9a39aae9690b0e5a860bdb2cc88565e83daac
parent09bea09c8157ff45279f0d06aa9d313448c0bec5 (diff)
downloadcms-1937a2f49ebe920b79604cb5df3649f9f1dff738.zip
bouton suppression après création d'une "news"
-rw-r--r--public/index.php2
-rw-r--r--public/js/tinymce.js63
-rw-r--r--src/Config.php2
-rw-r--r--src/controller/ajax.php9
-rw-r--r--src/view/MainBuilder.php5
-rw-r--r--src/view/NewBuilder.php17
-rw-r--r--src/view/templates/new.php8
7 files changed, 45 insertions, 61 deletions
diff --git a/public/index.php b/public/index.php
index 2512d6d..8cb2b9a 100644
--- a/public/index.php
+++ b/public/index.php
@@ -26,7 +26,7 @@ require '../src/model/doctrine-bootstrap.php'; // isDevMode est sur "true", DSN
26 26
27URL::setProtocol(Config::$protocol); // utile si port autre que 80 ou 443 27URL::setProtocol(Config::$protocol); // utile si port autre que 80 ou 443
28URL::setPort(Config::$port); 28URL::setPort(Config::$port);
29URL::setHost($_SERVER['HTTP_HOST']); 29URL::setHost($_SERVER['HTTP_HOST'] . Config::$index_path);
30 30
31//require('controller/Session.php'); 31//require('controller/Session.php');
32ini_set('session.cookie_samesite', 'Strict'); 32ini_set('session.cookie_samesite', 'Strict');
diff --git a/public/js/tinymce.js b/public/js/tinymce.js
index 00868ee..092698e 100644
--- a/public/js/tinymce.js
+++ b/public/js/tinymce.js
@@ -95,7 +95,7 @@ function deleteArticle(id, page = '') {
95 .then(data => { 95 .then(data => {
96 if(data.success) 96 if(data.success)
97 { 97 {
98 if(page == 'article'){ 98 if(page === 'article'){
99 // redirection vers la page d'accueil 99 // redirection vers la page d'accueil
100 window.setTimeout(function(){ 100 window.setTimeout(function(){
101 location.href = "index.php?page=accueil"; 101 location.href = "index.php?page=accueil";
@@ -177,49 +177,27 @@ function closeEditor(id, page = '', restore_old = true)
177 177
178function submitArticle(id, page = '', clone = null) 178function submitArticle(id, page = '', clone = null)
179{ 179{
180 /*if(id[0] === 'n' && clone == null){
181 return; // sécurité
182 }*/
183 var editor; 180 var editor;
181 var content;
184 const params = new URL(document.location).searchParams; // "search" = ? et paramètres, searchParams = objet avec des getters 182 const params = new URL(document.location).searchParams; // "search" = ? et paramètres, searchParams = objet avec des getters
185 183
186 // clic sur "tout enregistrer" 184 // clic sur "tout enregistrer"
187 if(id[0] === 'n' && page === 'article'){ 185 if(id[0] === 'n' && page === 'article'){
188 const prefixes = ['t', 'p', 'i', 'd']; 186 const prefixes = ['t', 'p', 'i', 'd'];
189 const allElemsWithId = document.querySelectorAll('[id]'); 187 const allElemsWithId = document.querySelectorAll('[class="data"]');
190 var content = {}; 188 content = {};
189 var id_from_builder;
191 190
192 allElemsWithId.forEach(element => { 191 allElemsWithId.forEach(element => {
193 const first_letter = element.id.charAt(0).toLowerCase(); 192 const first_letter = element.id.charAt(0).toLowerCase();
194 if(prefixes.includes(first_letter)){ 193 if(prefixes.includes(first_letter)){
195 content[first_letter] = element.innerHTML; 194 content[first_letter] = element.innerHTML;
195 if(first_letter === 'i'){
196 id_from_builder = element.id;
197 }
196 } 198 }
197 }) 199 })
198 content['d'] = dateToISO(content['d']); 200 content['d'] = dateToISO(content['d']);
199
200 // Envoi AJAX au serveur
201 fetch('index.php?action=editor_submit', {
202 method: 'POST',
203 headers: {
204 'Content-Type': 'application/json'
205 },
206 body: JSON.stringify({id: id, content: content})
207 })
208 .then(response => response.json())
209 .then(data => {
210 if (data.success) {
211 console.log('données envoyées au serveur avec succès.');
212
213 // remplacer les boutons (Enregistrer => Supprimer)
214 }
215 else {
216 alert('Erreur lors de la sauvegarde de l\'article.');
217 }
218 })
219 .catch(error => {
220 console.error('Erreur:', error);
221 });
222 return;
223 } 201 }
224 // champs à remplir des nouvelles "news" 202 // champs à remplir des nouvelles "news"
225 else if(page === 'article' && params != null && params.get("id")[0] === 'n'){ 203 else if(page === 'article' && params != null && params.get("id")[0] === 'n'){
@@ -235,6 +213,7 @@ function submitArticle(id, page = '', clone = null)
235 console.error('Éditeur non trouvé pour l\'article:', id); 213 console.error('Éditeur non trouvé pour l\'article:', id);
236 return; 214 return;
237 } 215 }
216 content = editor.getContent();
238 } 217 }
239 218
240 // Envoi AJAX au serveur 219 // Envoi AJAX au serveur
@@ -243,15 +222,29 @@ function submitArticle(id, page = '', clone = null)
243 headers: { 222 headers: {
244 'Content-Type': 'application/json' 223 'Content-Type': 'application/json'
245 }, 224 },
246 body: JSON.stringify({id: id, content: editor.getContent()}) 225 body: JSON.stringify({id: id, content: content})
247 }) 226 })
248 .then(response => response.json()) 227 .then(response => response.json())
249 .then(data => { 228 .then(data => {
250 if (data.success) { 229 if (data.success) {
251 // Fermer l'éditeur et mettre à jour le contenu de l'article 230 console.log(data.article_id);
252 closeEditor(id, page, false); 231 if(id[0] === 'n' && page === 'article'){
253 if(id[0] === 'n'){ 232 console.log('données envoyées au serveur avec succès.');
254 makeNewArticleButtons(id, data.article_id, clone); 233
234 // remplacer bouton Enregistrer par Supprimer
235 submit_btn = document.getElementById('save-' + id_from_builder); // id précédent par NewBuilder
236 submit_btn.classList.add('hidden');
237 delete_btn = document.getElementById('delete-' + id_from_builder);
238 delete_btn.id = data.article_id;
239 delete_btn.querySelector('button').setAttribute('onclick', "deleteArticle('" + data.article_id + "', 'article')");
240 delete_btn.classList.remove('hidden');
241 }
242 else{
243 // Fermer l'éditeur et mettre à jour le contenu de l'article
244 closeEditor(id, page, false);
245 if(id[0] === 'n'){
246 makeNewArticleButtons(id, data.article_id, clone);
247 }
255 } 248 }
256 } 249 }
257 else { 250 else {
diff --git a/src/Config.php b/src/Config.php
index 882ec98..500d6ea 100644
--- a/src/Config.php
+++ b/src/Config.php
@@ -15,7 +15,7 @@ class Config
15 15
16 // classe URL 16 // classe URL
17 static public string $protocol = 'http'; 17 static public string $protocol = 'http';
18 //static public string $host = ''; 18 static public string $index_path = '';
19 static public string $port = '80'; 19 static public string $port = '80';
20 20
21 // copier dans ce tableau les variables contenant des chemins 21 // copier dans ce tableau les variables contenant des chemins
diff --git a/src/controller/ajax.php b/src/controller/ajax.php
index 4863681..a4b61e4 100644
--- a/src/controller/ajax.php
+++ b/src/controller/ajax.php
@@ -29,10 +29,6 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json' && isset($_GET['action']))
29 } 29 }
30 else{ 30 else{
31 $content = Security::secureString($json['content']); 31 $content = Security::secureString($json['content']);
32 if($content === ''){
33 echo json_encode(['success' => false, 'message' => 'pas de données à sauvegarder']);
34 die;
35 }
36 } 32 }
37 33
38 // nouvel article 34 // nouvel article
@@ -43,12 +39,7 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json' && isset($_GET['action']))
43 $node = $director->getNode(); // = <section> 39 $node = $director->getNode(); // = <section>
44 40
45 if(is_array($content)){ 41 if(is_array($content)){
46 //
47 //$timestamp = time(); // int
48 $date = new \DateTime($content['d']); 42 $date = new \DateTime($content['d']);
49
50 //echo substr($content['i'], 1) . ' ';
51 //echo $article_id;die;
52 $article = new Article($content['i'], $date, $content['t'], $content['p']); 43 $article = new Article($content['i'], $date, $content['t'], $content['p']);
53 $article_node = new Node('new', 'i' . (string)$date->getTimestamp(), [], count($node->getChildren()) + 1, $node, $node->getPage(), $article); 44 $article_node = new Node('new', 'i' . (string)$date->getTimestamp(), [], count($node->getChildren()) + 1, $node, $node->getPage(), $article);
54 45
diff --git a/src/view/MainBuilder.php b/src/view/MainBuilder.php
index ea7b8c3..e73b298 100644
--- a/src/view/MainBuilder.php
+++ b/src/view/MainBuilder.php
@@ -18,12 +18,9 @@ class MainBuilder extends AbstractBuilder
18 } 18 }
19 19
20 if($node->getAdoptedChild() == null){ 20 if($node->getAdoptedChild() == null){
21 // on pourrait raccourcir ça
22 $timestamp = time(); // int
23 $date = new \DateTime; 21 $date = new \DateTime;
24 $date->setTimestamp($timestamp); // \DateTime
25 $article = new Article('', $date); 22 $article = new Article('', $date);
26 $new = new Node('new', 'i' . (string)$timestamp, [], 0, null, null, $article); 23 $new = new Node('new', 'i' . (string)$date->getTimestamp(), [], 0, null, null, $article);
27 } 24 }
28 else{ 25 else{
29 $new = $node->getAdoptedChild(); 26 $new = $node->getAdoptedChild();
diff --git a/src/view/NewBuilder.php b/src/view/NewBuilder.php
index a862a08..d93155e 100644
--- a/src/view/NewBuilder.php
+++ b/src/view/NewBuilder.php
@@ -103,16 +103,19 @@ class NewBuilder extends AbstractBuilder
103 103
104 $delete_article = ''; 104 $delete_article = '';
105 $submit_article = ''; 105 $submit_article = '';
106 // modification: bouton "supprimer" 106 $delete_class = '';
107 if($_GET['id'][0] === 'i'){
108 $delete_js = 'onclick="deleteArticle(\'' . $id . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"';
109 $delete_article = '<p id="delete-' . $id . '"><button ' . $delete_js . '><img class="action_icon" src="assets/delete-bin.svg" ' . $delete_js . '>Retirer<br>la publication</button></p>' . "\n";
110 }
111 // nouvel article: bouton pour valider la création d'un nouvel article 107 // nouvel article: bouton pour valider la création d'un nouvel article
112 else{ 108 if($_GET['id'][0] != 'i'){
113 $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"'; 109 $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"';
114 $submit_article = '<p id="submit-' . $id . '"><button ' . $submit_js . '><img class="action_icon" src="assets/edit.svg">Tout<br>enregistrer</button></p>' . "\n"; 110 $submit_article = '<p id="save-' . $id . '"><button ' . $submit_js . '><img class="action_icon" src="assets/edit.svg">Tout<br>enregistrer</button></p>' . "\n";
111 $delete_class = 'class="hidden"';
112 }
113 // modification: bouton "supprimer"
114 else{
115 $delete_class = 'class=""';
115 } 116 }
117 $delete_js = 'onclick="deleteArticle(\'' . $id . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"';
118 $delete_article = '<p ' . $delete_class . ' id="delete-' . $id . '"><button ' . $delete_js . '><img class="action_icon" src="assets/delete-bin.svg">Retirer<br>la publication</button></p>' . "\n";
116 119
117 $admin_buttons = $delete_article . $submit_article; 120 $admin_buttons = $delete_article . $submit_article;
118 } 121 }
diff --git a/src/view/templates/new.php b/src/view/templates/new.php
index 9515c70..2a965cb 100644
--- a/src/view/templates/new.php
+++ b/src/view/templates/new.php
@@ -2,23 +2,23 @@
2 <div class="new_content"> 2 <div class="new_content">
3 <div class="article_title_zone"> 3 <div class="article_title_zone">
4 <?= $share_button ?> 4 <?= $share_button ?>
5 <div id="<?= $id_title ?>"> 5 <div class="data" id="<?= $id_title ?>">
6 <?= $title ?> 6 <?= $title ?>
7 </div> 7 </div>
8 <?= $title_buttons ?> 8 <?= $title_buttons ?>
9 </div> 9 </div>
10 <div id="<?= $id_preview ?>" class="new_content_text"> 10 <div class="data" id="<?= $id_preview ?>" class="new_content_text">
11 <?= $preview ?> 11 <?= $preview ?>
12 </div> 12 </div>
13 <?= $preview_buttons ?> 13 <?= $preview_buttons ?>
14 <div id="<?= $id ?>" class="article_content_text"> 14 <div class="data" id="<?= $id ?>" class="article_content_text">
15 <?= $content ?> 15 <?= $content ?>
16 </div> 16 </div>
17 <?= $article_buttons ?> 17 <?= $article_buttons ?>
18 <div class="under_an_article"> 18 <div class="under_an_article">
19 <p> 19 <p>
20 <img src="assets/calendar.svg"> 20 <img src="assets/calendar.svg">
21 <span id="<?= $id_date ?>"><?= $date ?></span> 21 <span class="data" id="<?= $id_date ?>"><?= $date ?></span>
22 </p> 22 </p>
23 </div> 23 </div>
24 <?= $date_buttons ?> 24 <?= $date_buttons ?>