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 | {} | ||
