diff options
| -rw-r--r-- | public/index.php | 2 | ||||
| -rw-r--r-- | public/js/tinymce.js | 63 | ||||
| -rw-r--r-- | src/Config.php | 2 | ||||
| -rw-r--r-- | src/controller/ajax.php | 9 | ||||
| -rw-r--r-- | src/view/MainBuilder.php | 5 | ||||
| -rw-r--r-- | src/view/NewBuilder.php | 17 | ||||
| -rw-r--r-- | src/view/templates/new.php | 8 |
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 | ||
| 27 | URL::setProtocol(Config::$protocol); // utile si port autre que 80 ou 443 | 27 | URL::setProtocol(Config::$protocol); // utile si port autre que 80 ou 443 |
| 28 | URL::setPort(Config::$port); | 28 | URL::setPort(Config::$port); |
| 29 | URL::setHost($_SERVER['HTTP_HOST']); | 29 | URL::setHost($_SERVER['HTTP_HOST'] . Config::$index_path); |
| 30 | 30 | ||
| 31 | //require('controller/Session.php'); | 31 | //require('controller/Session.php'); |
| 32 | ini_set('session.cookie_samesite', 'Strict'); | 32 | ini_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 | ||
| 178 | function submitArticle(id, page = '', clone = null) | 178 | function 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 ?> |
