diff options
Diffstat (limited to 'controller/ckeditor.php')
-rw-r--r-- | controller/ckeditor.php | 290 |
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 |
10 | function preparationCKeditor($html) | 10 | function 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'] | 35 | function submitCKeditor() |
36 | function 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'])) | |
131 | function 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 | |||
157 | function cleanHTML($contenu) | ||
158 | {} | ||