summaryrefslogtreecommitdiff
path: root/controller/ckeditor.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2021-04-20 21:46:33 +0200
committerpolo <ordipolo@gmx.fr>2021-04-20 21:46:33 +0200
commit87798e5554eb0330cd2de255e5034f0472d410a4 (patch)
treeacd9e26a7d912c7575cb6dd1c7b42cc3e9f52993 /controller/ckeditor.php
downloadmelaine-87798e5554eb0330cd2de255e5034f0472d410a4.zip
mot de passe
Diffstat (limited to 'controller/ckeditor.php')
-rw-r--r--controller/ckeditor.php92
1 files changed, 92 insertions, 0 deletions
diff --git a/controller/ckeditor.php b/controller/ckeditor.php
new file mode 100644
index 0000000..1d085a7
--- /dev/null
+++ b/controller/ckeditor.php
@@ -0,0 +1,92 @@
1<?php
2// controller/ckeditor.php
3//
4// c'est la partie PHP du ckeditor
5// l'autre partie est le fichier view/template-ckeditor.php
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
8
9// avant de placer l'éditeur
10function preparationCKeditor($page, $numArticle, $texte)
11{
12 // $page sert à lire et écrire du contenu dans le bon dossier
13 // $article sert à placer l'éditeur sur la page et à lire et écrire dans le bon dossier
14
15 // texte initial pour setData() à modifier avec l'éditeur
16 if ($numArticle > 0)
17 {
18 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine
19 $texte = trim($texte);
20
21 // supprimer les sauts de ligne
22 $sautsDeLigne = array("\n", "\r", "\r\n");
23 $texte = str_replace($sautsDeLigne, '', $texte);
24
25 // échapper tous les ', ", \ et caractère NULL
26 $texte = addslashes($texte);
27 }
28 else
29 {
30 $texte = ''; // nouveau contenu
31 }
32
33 return($texte);
34}
35
36// réception du HTML créé par l'éditeur
37function submitCKeditor($page, $article, $contenuPOST)
38{
39 // déjà fait mais on ne sait jamais
40 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
41 {
42 header('Location: index.php?page=' . $page . '&erreur=connexion');
43 }
44 else
45 {
46 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur)
47 // on évitera de perdre un article existant par erreur !!
48 if($contenuPOST == '')
49 {
50 header('Location: index.php?page=' . $page . '&erreur=contenu_vide');
51 }
52 else
53 {
54 $contenu = $_POST["contenu"];
55
56 // récupérer les liens multimedia
57 //require("media.php");
58 //$contenu = mediaSubmit($contenu);
59
60 // sécurité faille XSS
61 $configHtmLawed = array(
62 'safe'=>1, // protection contre les élements et attributs dangereux
63 'elements'=>'h2, h3, h4, p, br, span, i, strong, u, mark, blockquote, li, ol, ul, a, figure, hr, img, figcaption, table, tbody, tr, td', // paramètre optionnel: les balises non indiquées sont supprimées
64 // paramètre optionnel: les balises non indiquées sont supprimées
65 'deny_attribute'=>'id', // gêner le JS hostile
66 // on garde 'class' et 'style' utilisés par l'ckediteur
67 );
68 $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs
69 $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed);
70
71 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine
72 $contenu = trim($contenu);
73 }
74 }
75
76 // lien sans http://
77 // 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
78 // il est possible de cliquer sur ce lien, ce qui ouvre un onglet avec le site demandé
79 // 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
80 // tomber ainsi sur une page d'erreur est déroutant:
81 // "ai-je perdu le texte que j'étais en train de taper?""
82 // solution 1 (mauvaise): activer la redirection en cas d'erreur 404 dans le .htaccess
83 // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>';
84 // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert...
85
86 // enregistrement
87 require('model/melaine-write.php');
88 nouvelArticle($page, $article, $contenu);
89
90 // debuggage
91 //exit();
92} \ No newline at end of file