summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-03-23 13:35:16 +0100
committerpolo <ordipolo@gmx.fr>2025-03-23 13:35:16 +0100
commit3c474461ca5dd8f54aee29efbc2156df025025e0 (patch)
tree2b493358334ea81ec998402fed200d99677479f2 /public
parentecdef3d39a2c502399a7e1cf64945948ef8f3846 (diff)
downloadtinymce-3c474461ca5dd8f54aee29efbc2156df025025e0.zip
upload image, plugins et boutons
Diffstat (limited to 'public')
-rw-r--r--public/index.php87
1 files changed, 56 insertions, 31 deletions
diff --git a/public/index.php b/public/index.php
index 69f335c..81a0408 100644
--- a/public/index.php
+++ b/public/index.php
@@ -19,7 +19,29 @@ if(isset($_GET['action']) && $_GET['action'] == 'editor_submit'){
19 die; 19 die;
20} 20}
21elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image'){ 21elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image'){
22 echo "hello"; 22 if (isset($_FILES['file'])) {
23 $file = $_FILES['file'];
24 $dest = 'images/';
25
26 // Vérifier si le répertoire existe, sinon le créer
27 if(!is_dir($dest)) {
28 mkdir($dest, 0777, true);
29 }
30
31 $filePath = $dest . basename($file['name']);
32 if(move_uploaded_file($file['tmp_name'], $filePath)) {
33 // Répondre avec l'URL de l'image téléchargée
34 echo json_encode(['location' => '/' . $filePath]);
35 }
36 else{
37 http_response_code(500);
38 echo json_encode(['message' => 'Erreur 500: Internal Server Error']);
39 }
40 }
41 else{
42 http_response_code(400);
43 echo json_encode(['message' => 'Erreur 400: Bad Request']);
44 }
23 die; 45 die;
24} 46}
25?> 47?>
@@ -52,45 +74,52 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image'){
52 language: 'fr_FR', // télécharger le paquet correspondant ici: https://www.tiny.cloud/get-tiny/language-packages/ 74 language: 'fr_FR', // télécharger le paquet correspondant ici: https://www.tiny.cloud/get-tiny/language-packages/
53 license_key: 'gpl', 75 license_key: 'gpl',
54 branding: false, 76 branding: false,
55 plugins: 'image code', // Activer le plugin d'image 77 plugins: 'lists advlist link autolink table image media autoresize help',
56 toolbar: 'undo redo | styles | bold italic | alignleft aligncenter alignright alignjustify | outdent indent | image code', 78 toolbar: 'undo redo print | styles | bold italic underline strikethrough | align outdent indent | numlist bullist | link table image media | help',
57 setup: function (editor) { 79 setup: function (editor) {
58 editor.on('init', function () { 80 editor.on('init', function () {
59 editors[articleId] = editor; 81 editors[articleId] = editor;
60 82
61 // Masquer le bouton "Modifier" et afficher les boutons "Annuler" et "Soumettre" 83 // Masquer le bouton "Modifier" et afficher les boutons "Annuler" et "Soumettre"
62 document.querySelector(`#edit-${articleId}`).classList.add('hidden'); 84 document.querySelector(`#edit-${articleId}`).classList.add('hidden');
85 document.querySelector(`#delete-${articleId}`).classList.add('hidden');
63 document.querySelector(`#cancel-${articleId}`).classList.remove('hidden'); 86 document.querySelector(`#cancel-${articleId}`).classList.remove('hidden');
64 document.querySelector(`#submit-${articleId}`).classList.remove('hidden'); 87 document.querySelector(`#submit-${articleId}`).classList.remove('hidden');
65 }); 88 });
66 }, 89 },
67 // upload d'image 90 // upload d'image
68 images_upload_handler: function (blobInfo, success, failure) { 91 images_upload_handler: (blobInfo, progress) => new Promise((resolve, reject) => {
69 const xhr = new XMLHttpRequest(); 92 const formData = new FormData();
70 xhr.withCredentials = false; 93 formData.append("file", blobInfo.blob());
71 xhr.open('POST', 'index.php?action=upload_image');
72
73 xhr.onload = function() {
74 const json = JSON.parse(xhr.responseText);
75 94
76 if (xhr.status < 200 || xhr.status >= 300) { 95 fetch("index.php?action=upload_image", {
77 failure('HTTP Error: ' + xhr.status); 96 method: "POST",
78 return; 97 body: formData
98 })
99 .then(response => response.json())
100 .then(data => {
101 if (data.location) {
102 resolve(data.location);
79 } 103 }
80 104 else {
81 success(json.location); 105 reject("Erreur: Chemin d'image invalide");
82 }; 106 }
83 107 })
84 const formData = new FormData(); 108 .catch(error => {
85 formData.append('file', blobInfo.blob(), blobInfo.filename()); 109 reject("Erreur lors de l'upload");
86 xhr.send(formData); 110 });
87 } 111 })
88 }); 112 });
89 113
90 // Remplacer le contenu de l'article par l'éditeur 114 // Remplacer le contenu de l'article par l'éditeur
91 document.getElementById(articleId).innerHTML = articleContent; 115 document.getElementById(articleId).innerHTML = articleContent;
92 } 116 }
93 117
118 function deleteArticle(articleId) {
119 console.log("suppression");
120 // code similaire à submitArticle()
121 }
122
94 function closeEditor(articleId) { 123 function closeEditor(articleId) {
95 // Récupérer le contenu d'origine de l'article 124 // Récupérer le contenu d'origine de l'article
96 const originalContent = document.getElementById(articleId).getAttribute('data-original-content'); 125 const originalContent = document.getElementById(articleId).getAttribute('data-original-content');
@@ -104,6 +133,7 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image'){
104 133
105 // Afficher le bouton "Modifier" et masquer les boutons "Annuler" et "Soumettre" 134 // Afficher le bouton "Modifier" et masquer les boutons "Annuler" et "Soumettre"
106 document.querySelector(`#edit-${articleId}`).classList.remove('hidden'); 135 document.querySelector(`#edit-${articleId}`).classList.remove('hidden');
136 document.querySelector(`#delete-${articleId}`).classList.remove('hidden');
107 document.querySelector(`#cancel-${articleId}`).classList.add('hidden'); 137 document.querySelector(`#cancel-${articleId}`).classList.add('hidden');
108 document.querySelector(`#submit-${articleId}`).classList.add('hidden'); 138 document.querySelector(`#submit-${articleId}`).classList.add('hidden');
109 } 139 }
@@ -118,15 +148,8 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image'){
118 148
119 // Récupérer le contenu de l'éditeur 149 // Récupérer le contenu de l'éditeur
120 const newContent = editor.getContent(); 150 const newContent = editor.getContent();
121
122 // test sans envoi au serveur
123 //~ closeEditor(articleId);
124 //~ document.getElementById(articleId).innerHTML = newContent;
125 //~ console.log(newContent);
126
127 151
128 // Envoyer le contenu au serveur via AJAX 152 // Envoi AJAX au serveur
129 //fetch('/save-article', {
130 fetch('index.php?action=editor_submit', { 153 fetch('index.php?action=editor_submit', {
131 method: 'POST', 154 method: 'POST',
132 headers: { 155 headers: {
@@ -161,8 +184,9 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image'){
161 <p>Contenu de l'article 1.</p> 184 <p>Contenu de l'article 1.</p>
162 </div> 185 </div>
163 <button id="edit-article-1" onclick="openEditor('article-1')">Modifier</button> 186 <button id="edit-article-1" onclick="openEditor('article-1')">Modifier</button>
187 <button id="delete-article-1" onclick="deleteArticle('article-1')">Supprimer</button>
164 <button id="cancel-article-1" class="hidden" onclick="closeEditor('article-1')">Annuler</button> 188 <button id="cancel-article-1" class="hidden" onclick="closeEditor('article-1')">Annuler</button>
165 <button id="submit-article-1" class="hidden" onclick="submitArticle('article-1')">Soumettre</button> 189 <button id="submit-article-1" class="hidden" onclick="submitArticle('article-1')">Valider</button>
166 </div> 190 </div>
167 191
168 <div> 192 <div>
@@ -171,8 +195,9 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image'){
171 <p>Contenu de l'article 2.</p> 195 <p>Contenu de l'article 2.</p>
172 </div> 196 </div>
173 <button id="edit-article-2" onclick="openEditor('article-2')">Modifier</button> 197 <button id="edit-article-2" onclick="openEditor('article-2')">Modifier</button>
198 <button id="delete-article-2" onclick="deleteArticle('article-2')">Supprimer</button>
174 <button id="cancel-article-2" class="hidden" onclick="closeEditor('article-2')">Annuler</button> 199 <button id="cancel-article-2" class="hidden" onclick="closeEditor('article-2')">Annuler</button>
175 <button id="submit-article-2" class="hidden" onclick="submitArticle('article-2')">Soumettre</button> 200 <button id="submit-article-2" class="hidden" onclick="submitArticle('article-2')">Valider</button>
176 </div> 201 </div>
177</body> 202</body>
178</html> 203</html>