diff options
author | polo <ordipolo@gmx.fr> | 2021-04-20 21:46:33 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2021-04-20 21:46:33 +0200 |
commit | 87798e5554eb0330cd2de255e5034f0472d410a4 (patch) | |
tree | acd9e26a7d912c7575cb6dd1c7b42cc3e9f52993 /controller/ckeditor.php | |
download | melaine-87798e5554eb0330cd2de255e5034f0472d410a4.zip |
mot de passe
Diffstat (limited to 'controller/ckeditor.php')
-rw-r--r-- | controller/ckeditor.php | 92 |
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 | ||
10 | function 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 | ||
37 | function 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 | ||