summaryrefslogtreecommitdiff
path: root/controller/ckeditor.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-02-17 18:13:00 +0100
committerpolo <ordipolo@gmx.fr>2022-02-17 18:13:00 +0100
commit787d03e48471ba62cd830379428f04d996f0b74b (patch)
treee9f98c7b9288c4530b50985688dd82622106ba2d /controller/ckeditor.php
parent29df6f1362745eabf4fbcaedf309eb63795152fa (diff)
downloadmelaine-787d03e48471ba62cd830379428f04d996f0b74b.zip
model update
Diffstat (limited to 'controller/ckeditor.php')
-rw-r--r--controller/ckeditor.php290
1 files changed, 158 insertions, 132 deletions
diff --git a/controller/ckeditor.php b/controller/ckeditor.php
index 661e0e3..7102f33 100644
--- a/controller/ckeditor.php
+++ b/controller/ckeditor.php
@@ -1,132 +1,158 @@
1<?php 1<?php
2// controller/ckeditor.php 2// controller/ckeditor.php
3// 3//
4// c'est la partie PHP du ckeditor 4// c'est la partie PHP du ckeditor
5// l'autre partie est le fichier view/template-ckeditor.php 5// l'autre partie est le fichier view/template-ckeditor.php
6// qui est inséré par la vue de la page correspondante 6// qui est inséré par la vue de la page correspondante
7// il y a aussi un fichier CSS parce que le HTML créé par l'éditeur ne suffit pas à lui-même 7// il y a aussi un fichier CSS parce que le HTML créé par l'éditeur ne suffit pas à lui-même
8 8
9// avant de placer l'éditeur 9// avant de placer l'éditeur
10function preparationCKeditor($html) 10function preparationCKeditor($html)
11{ 11{
12 // texte initial inséré avec setData() dans l'éditeur 12 // texte initial inséré avec setData() dans l'éditeur
13 // danger! 13 // danger!
14 // setData() n'insère pas le texte si il ne respecte pas certains critères, l'utilisateur risque de perdre des données en validant un nouveau contenu sans avoir pu modifier l'ancien 14 // setData() n'insère pas le texte si il ne respecte pas certains critères, l'utilisateur risque de perdre des données en validant un nouveau contenu sans avoir pu modifier l'ancien
15 15
16 if(empty($html)) 16 if(empty($html))
17 { 17 {
18 header('Location: index.php?erreur=empty_input'); 18 header('Location: index.php?erreur=empty_input');
19 } 19 }
20 20
21 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine 21 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine
22 $html = trim($html); 22 $html = trim($html);
23 23
24 // supprimer les sauts de ligne 24 // supprimer les sauts de ligne
25 $sautsDeLigne = array("\n", "\r", "\r\n"); 25 $sautsDeLigne = array("\n", "\r", "\r\n");
26 $html = str_replace($sautsDeLigne, '', $html); 26 $html = str_replace($sautsDeLigne, '', $html);
27 27
28 // échapper tous les ', ", \ et caractère NULL 28 // échapper tous les ', ", \ et caractère NULL
29 $html = addslashes($html); 29 $html = addslashes($html);
30 30
31 return($html); 31 return($html);
32} 32}
33 33
34// réception du HTML créé par l'éditeur 34// réception du HTML créé par l'éditeur
35// le nom du fichier est celui dans $_SESSION['nomFichier'] 35function submitCKeditor()
36function submitCKeditor($target) 36{
37{ 37 $page = $_GET['page'];
38 $page = $_GET['page']; 38
39 39 // déjà fait mais on ne sait jamais
40 // déjà fait mais on ne sait jamais 40 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
41 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) 41 {
42 { 42 header('Location: index.php?page=' . $page . '&erreur=connexion');
43 header('Location: index.php?page=' . $page . '&erreur=connexion'); 43 exit();
44 exit(); 44 }
45 } 45
46 46 // POST de l'éditeur
47 // de l'éditeur 47 if(isset($_POST['contenu'])) // optionnel pour discographie
48 if(isset($_POST['contenu'])) // optionnel pour discographie 48 {
49 { 49 $contenu = Security::secureString($_POST['contenu']);
50 $contenu = Security::secureString($_POST['contenu']); 50
51 51 // récupérer les liens multimedia
52 // récupérer les liens multimedia 52 //require("media.php");
53 //require("media.php"); 53 //$contenu = mediaSubmit($contenu);
54 //$contenu = mediaSubmit($contenu); 54
55 55 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !!
56 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !! 56 if($page != 'discographie' && $contenu == '')
57 if($page != 'discographie' && $contenu == '') 57 {
58 { 58 header('Location: index.php?page=' . $page . '&erreur=contenu_vide');
59 header('Location: index.php?page=' . $page . '&erreur=contenu_vide'); 59 exit();
60 exit(); 60 }
61 } 61 }
62 } 62
63 63 // pages avec des articles simples (melaine...)
64 if($page == 'discographie') 64 if($page != 'discographie')
65 { 65 {
66 $titre = Security::secureString($_POST['titre']); 66 $Article = new Article($page);
67 $annee = Security::secureString($_POST['annee']); 67
68 $pochette = $_FILES['upload']['name']; 68 if(!isset($_SESSION['target']) || $_SESSION['target'] == '')
69 69 {
70 // on instancie avec l'enfant de OneArticle 70 $Article->create($contenu);
71 $Album = new Album($page); 71 }
72 72 else
73 // enregistrement 73 {
74 if($target == '') 74 $Article->fileCode = $_SESSION['target']; // erreur ici?
75 { 75 $Article->update($contenu);
76 // page disco 76 }
77 $_SESSION['erreur'] = $Album->createVignette($titre, $annee, $pochette); 77 }
78 78 // page discographie
79 // page de l'album 79 else if($page == 'discographie')
80 if(!empty($_POST['contenu'])) 80 {
81 { 81 $Album = new Album($page);
82 $Album->create($contenu); 82
83 } 83 // on retrouve les données si nécessaire
84 } 84 if(isset($_SESSION['target']) && $_SESSION['target'] != '')
85 else 85 {
86 { 86 $Album->fileCode = $_SESSION['target'];
87 $Album->albumCode = $target; 87 $Album->readOne();
88 88 }
89 // page disco 89
90 $_SESSION['erreur'] = $Album->updateVignetteJSON($titre, $annee, $pochette); 90 $nouveauTitre = Security::secureString($_POST['titre']);
91 91 $nouvelleAnnee = Security::secureString($_POST['annee']);
92 // page de l'album 92 $nouvellePochette = $_FILES['upload']['name'];
93 if(isset($_POST['contenu'])) 93
94 { 94 // enregistrement nouvel album
95 $Album->format = 'html'; 95 if(!isset($_SESSION['target']) || $_SESSION['target'] == '')
96 $Album->setFileName(); 96 {
97 if(!empty($Album->fileName)) 97 // page disco
98 { 98 $Album->createVignette($nouveauTitre, $nouvelleAnnee, $nouvellePochette);
99 $Album->update($_POST['contenu']); 99
100 } 100 // page de l'album
101 } 101 if(!empty($_POST['contenu']))
102 } 102 {
103 } 103 $Album->format = 'html';
104 // autres pages 104 $Album->create($contenu);
105 else 105 }
106 { 106 }
107 $Article = new Page($page); 107 // modification
108 108 else
109 if($target == '') 109 {
110 { 110 $Album->albumCode = $_SESSION['target'];
111 $Article->create($contenu); 111
112 } 112 // page disco
113 else 113 $Album->format = 'json';
114 { 114
115 $Article->fileName = $target; 115 // garder l'image si aucune n'est sélectionnée
116 $Article->update($contenu); 116 // (on ne peut pas préremplir un <input type="file">)
117 } 117 if($nouvellePochette == '' && $Album->oneAlbum['pochette'] != '')
118 } 118 {
119} 119 $nouvellePochette = $Album->oneAlbum['pochette'];
120 120 }
121// lien sans http:// 121
122// un clic sur un lien dans l'éditeur affiche une infobulle montrant l'adresse cible du lien si celle-ci a déjà été précisée 122 $Album->updateVignetteJSON($nouveauTitre, $nouvelleAnnee, $nouvellePochette);
123// il est possible de cliquer sur ce lien, ce qui ouvre un onglet avec le site demandé 123
124// toutefois si cette adresse est de type "domaine.fr" (sans http:// devant), le navigateur ne va pas rechercher un site mais un fichier comme si mon adresse était de type file:///fichier 124 // page de l'album
125// tomber ainsi sur une page d'erreur est déroutant: 125 if(isset($_POST['contenu']))
126// "ai-je perdu le texte que j'étais en train de taper?"" 126 {
127// solution 1 (mauvaise): activer la redirection en cas d'erreur 404 dans le .htaccess 127 //var_dump($Album->oneAlbum); die();
128// solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; 128 $Album->format = 'html';
129// pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert... 129 //$Album->setFileName();
130 130 if(!empty($Album->oneAlbum['HTMLfileName']))
131function cleanHTML($contenu) 131 {
132{} 132 $Album->update($_POST['contenu']);
133 }
134 }
135 }
136 }
137
138 // nettoyage
139 unset($_SESSION['target']);
140 unset($_GET['action']);
141 unset($_POST['contenu']);
142 header('Location: index.php?page=' . $_GET['page']);
143 exit();
144}
145
146
147// lien sans http://
148// un clic sur un lien dans l'éditeur affiche une infobulle montrant l'adresse cible du lien si celle-ci a déjà été précisée
149// il est possible de cliquer sur ce lien, ce qui ouvre un onglet avec le site demandé
150// toutefois si cette adresse est de type "domaine.fr" (sans http:// devant), le navigateur ne va pas rechercher un site mais un fichier comme si mon adresse était de type file:///fichier
151// tomber ainsi sur une page d'erreur est déroutant:
152// "ai-je perdu le texte que j'étais en train de taper?""
153// solution 1 (mauvaise): activer la redirection en cas d'erreur 404 dans le .htaccess
154// solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>';
155// pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert...
156
157function cleanHTML($contenu)
158{}