diff options
| -rw-r--r-- | controller/admin.php | 31 | ||||
| -rw-r--r-- | controller/ckeditor.php | 12 | ||||
| -rw-r--r-- | controller/visitor.php | 4 | ||||
| -rw-r--r-- | index.php | 62 | ||||
| -rw-r--r-- | model/Article.php | 11 | ||||
| -rw-r--r-- | model/melaine-read.php | 46 | ||||
| -rw-r--r-- | model/melaine-write.php | 24 | ||||
| -rw-r--r-- | view/melaine.php | 56 | ||||
| -rw-r--r-- | view/template-ckeditor.php | 2 |
9 files changed, 133 insertions, 115 deletions
diff --git a/controller/admin.php b/controller/admin.php index 77ab34e..a35f28a 100644 --- a/controller/admin.php +++ b/controller/admin.php | |||
| @@ -9,7 +9,6 @@ function melaineEdit($numArticle) | |||
| 9 | $page_actuelle = "melaine"; | 9 | $page_actuelle = "melaine"; |
| 10 | 10 | ||
| 11 | // tableau $articles[] | 11 | // tableau $articles[] |
| 12 | require('model/melaine-read.php'); | ||
| 13 | $croissant = False; | 12 | $croissant = False; |
| 14 | $articles = lireArticles($page_actuelle, $croissant); | 13 | $articles = lireArticles($page_actuelle, $croissant); |
| 15 | 14 | ||
| @@ -17,46 +16,20 @@ function melaineEdit($numArticle) | |||
| 17 | { | 16 | { |
| 18 | $title = "Ajouter un article"; | 17 | $title = "Ajouter un article"; |
| 19 | $texte = ''; | 18 | $texte = ''; |
| 20 | //$numArticle = count($articles) + 1; | ||
| 21 | } | 19 | } |
| 22 | else | 20 | else |
| 23 | { | 21 | { |
| 24 | $title = "Modifier un article"; | 22 | $title = "Modifier un article"; |
| 25 | // faire correspondre le numéro de l'article du GET et le tableau des articles qui est inversé | 23 | $texte = lireUnArticle($_SESSION['nomFichier']); |
| 26 | $texte = $articles[count($articles) - $numArticle]; | ||
| 27 | } | 24 | } |
| 28 | 25 | ||
| 29 | // traitements PHP pour l'éditeur | 26 | // traitements PHP pour l'éditeur |
| 30 | require('controller/ckeditor.php'); | 27 | require('controller/ckeditor.php'); |
| 31 | // sécurisation du contenu pré-existant inséré dans l'éditeur | 28 | // sécurisation du contenu pré-existant inséré dans l'éditeur |
| 32 | $initial = preparationCKeditor($numArticle, $texte); | 29 | $texte = preparationCKeditor($numArticle, $texte); |
| 33 | 30 | ||
| 34 | // NB: penser à ajouter au template la fonctionnalité "autosave" | 31 | // NB: penser à ajouter au template la fonctionnalité "autosave" |
| 35 | // https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/saving-data.html | 32 | // https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/saving-data.html |
| 36 | |||
| 37 | // if($numArticle > $nombreDarticles || $numArticle < 0) // erreur nombre trop grand (bug?) | ||
| 38 | // { | ||
| 39 | // header('Location: index.php?page=melaine'); | ||
| 40 | // } | ||
| 41 | // elseif($numArticle == 0) // nouvel article | ||
| 42 | // { | ||
| 43 | // $texte = ''; | ||
| 44 | // $numArticle = $nombreDarticles + 1; | ||
| 45 | // } | ||
| 46 | // else // modification d'un article | ||
| 47 | // { | ||
| 48 | // $texte = $articles[$numArticle - 1]; | ||
| 49 | // } | ||
| 50 | |||
| 51 | |||
| 52 | // if($initial == '') | ||
| 53 | // { | ||
| 54 | // $article = "nouveau"; | ||
| 55 | // } | ||
| 56 | // else | ||
| 57 | // { | ||
| 58 | // $article = "modif"; | ||
| 59 | // } | ||
| 60 | 33 | ||
| 61 | // variable $editeurHTML, $initial est inséré dedans | 34 | // variable $editeurHTML, $initial est inséré dedans |
| 62 | require('view/template-ckeditor.php'); | 35 | require('view/template-ckeditor.php'); |
diff --git a/controller/ckeditor.php b/controller/ckeditor.php index 013d6b5..ea90726 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php | |||
| @@ -33,7 +33,8 @@ function preparationCKeditor($numArticle, $texte) | |||
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | // réception du HTML créé par l'éditeur | 35 | // réception du HTML créé par l'éditeur |
| 36 | function submitCKeditor($page, $article, $contenuPOST) | 36 | // le nom du fichier est celui dans $_SESSION['nomFichier'] |
| 37 | function submitCKeditor($page, $nomFichier, $contenu) | ||
| 37 | { | 38 | { |
| 38 | // déjà fait mais on ne sait jamais | 39 | // déjà fait mais on ne sait jamais |
| 39 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) | 40 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) |
| @@ -44,14 +45,12 @@ function submitCKeditor($page, $article, $contenuPOST) | |||
| 44 | { | 45 | { |
| 45 | // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur) | 46 | // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur) |
| 46 | // on évitera de perdre un article existant par erreur !! | 47 | // on évitera de perdre un article existant par erreur !! |
| 47 | if($contenuPOST == '') | 48 | if($contenu == '') |
| 48 | { | 49 | { |
| 49 | header('Location: index.php?page=' . $page . '&erreur=contenu_vide'); | 50 | header('Location: index.php?page=' . $page . '&erreur=contenu_vide'); |
| 50 | } | 51 | } |
| 51 | else | 52 | else |
| 52 | { | 53 | { |
| 53 | $contenu = $_POST["contenu"]; | ||
| 54 | |||
| 55 | // récupérer les liens multimedia | 54 | // récupérer les liens multimedia |
| 56 | //require("media.php"); | 55 | //require("media.php"); |
| 57 | //$contenu = mediaSubmit($contenu); | 56 | //$contenu = mediaSubmit($contenu); |
| @@ -89,14 +88,13 @@ function submitCKeditor($page, $article, $contenuPOST) | |||
| 89 | 88 | ||
| 90 | // enregistrement | 89 | // enregistrement |
| 91 | require('model/melaine-write.php'); | 90 | require('model/melaine-write.php'); |
| 92 | if($article == 0) | 91 | if($_GET['article'] == 0) |
| 93 | { | 92 | { |
| 94 | nouvelArticle($page, $contenu); | 93 | nouvelArticle($page, $contenu); |
| 95 | } | 94 | } |
| 96 | else | 95 | else |
| 97 | { | 96 | { |
| 98 | // $article est le nom du fichier | 97 | modifArticle($page, $nomFichier, $contenu); |
| 99 | modifArticle($page, $article, $contenu); | ||
| 100 | } | 98 | } |
| 101 | 99 | ||
| 102 | // debuggage | 100 | // debuggage |
diff --git a/controller/visitor.php b/controller/visitor.php index 9bd3461..a08ea95 100644 --- a/controller/visitor.php +++ b/controller/visitor.php | |||
| @@ -33,13 +33,11 @@ function melaineVisitor() | |||
| 33 | $title = "Mais qui est Melaine Favennec?"; | 33 | $title = "Mais qui est Melaine Favennec?"; |
| 34 | 34 | ||
| 35 | // tableau $articles | 35 | // tableau $articles |
| 36 | require('model/melaine-read.php'); | ||
| 37 | $croissant = False; | 36 | $croissant = False; |
| 38 | $articles = lireArticles($page_actuelle, $croissant); | 37 | $articles = lireArticles($page_actuelle, $croissant); |
| 39 | 38 | ||
| 40 | // vérification pour protéger les visiteurs | 39 | // vérification pour protéger les visiteurs |
| 41 | // normalement déjà faite dans submit.php, | 40 | // normalement déjà faite dans submit.php, au cas où la base a été trafiquée |
| 42 | // c'est au cas où les données aient été trafiquées | ||
| 43 | //$article = htmLawed($article); | 41 | //$article = htmLawed($article); |
| 44 | 42 | ||
| 45 | // variables $css, $js et $content | 43 | // variables $css, $js et $content |
| @@ -51,9 +51,9 @@ installation(); | |||
| 51 | 51 | ||
| 52 | // à propos des sessions, penser aux attaques CSRF (cross-site request forgery): | 52 | // à propos des sessions, penser aux attaques CSRF (cross-site request forgery): |
| 53 | // ça consite à faire qu'un utilisateur connecté avec une session envoie malgré lui une requête GET ou POST qu'un hacker aura cachée par exemple dans une fausse image clicable | 53 | // ça consite à faire qu'un utilisateur connecté avec une session envoie malgré lui une requête GET ou POST qu'un hacker aura cachée par exemple dans une fausse image clicable |
| 54 | // - solution: faire qu'un GET seul dans une session ne suffise pas à effectuer une action (les GET ne doivent servir qu'à afficher la bonne page), une attaque sur un POST nécessite d'injecter du javascript | 54 | // - solution: faire qu'un GET seul dans une session ne suffise pas à effectuer une action (les GET ne doivent servir qu'à afficher la bonne page), une attaque sur un POST est possible aussi mais plus difficile et nécessite d'injecter du javascript |
| 55 | // - on peut demander à l'utilisateur une vérification supplémentaire avant chaque action, mais c'est plutôt chiant | 55 | // - on peut demander à l'utilisateur une vérification supplémentaire avant chaque action, mais c'est plutôt chiant |
| 56 | // - la méthode des jetons, "nonces" et horodatage | 56 | // - il y a la méthode des jetons, "nonces" et horodatage |
| 57 | // - vérifier le "référent", c'est à dire l'URL de la page d'où vient normallement la requête | 57 | // - vérifier le "référent", c'est à dire l'URL de la page d'où vient normallement la requête |
| 58 | // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery | 58 | // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery |
| 59 | session_start(); | 59 | session_start(); |
| @@ -62,20 +62,27 @@ session_start(); | |||
| 62 | require('lib/htmlawed/htmLawed.php'); | 62 | require('lib/htmlawed/htmLawed.php'); |
| 63 | 63 | ||
| 64 | // traitement des POST du ckeditor | 64 | // traitement des POST du ckeditor |
| 65 | // NOTER que le fichier "habituel" controller/admin.php n'est pas utilisé | 65 | // la fonction submitCKeditor n'affiche rien (controller/admin.php n'est pas utilisé) puis redirige sans GET |
| 66 | // la fonction submitCKeditor n'affiche rien puis redirige sans GET | ||
| 67 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 | 66 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 |
| 68 | && isset($_GET['action']) && $_GET['action'] == 'submit' | 67 | && isset($_GET['action']) && $_GET['action'] == 'submit' |
| 69 | && isset($_POST['contenu'])) | 68 | && isset($_POST['contenu']) && $_POST['contenu'] != '') |
| 70 | { | 69 | { |
| 71 | require('controller/ckeditor.php'); | 70 | require('controller/ckeditor.php'); |
| 72 | submitCKeditor($_GET['page'], $_GET['article'], $_POST['contenu']); | 71 | // modification |
| 73 | 72 | if(isset($_SESSION['nomFichier'])) | |
| 74 | // nettoyage (je ne sais pas si ça sert à quelque chose, mais c'est pas grave) | 73 | { |
| 75 | unlink($_GET['action']); | 74 | submitCKeditor($_GET['page'], $_SESSION['nomFichier'], $_POST['contenu']); |
| 76 | unlink($_POST['contenu']); | 75 | } |
| 76 | // nouvel article | ||
| 77 | else | ||
| 78 | { | ||
| 79 | submitCKeditor($_GET['page'], '', $_POST['contenu']); | ||
| 80 | } | ||
| 77 | 81 | ||
| 78 | // rechargement "nettoyage" à la fin du traitement | 82 | // nettoyage |
| 83 | unset($_SESSION['nomFichier']); | ||
| 84 | unset($_GET['action']); | ||
| 85 | unset($_POST['contenu']); | ||
| 79 | header('Location: index.php?page=' . $_GET['page']); | 86 | header('Location: index.php?page=' . $_GET['page']); |
| 80 | } | 87 | } |
| 81 | 88 | ||
| @@ -90,13 +97,20 @@ if(isset($_GET['action'])) | |||
| 90 | } | 97 | } |
| 91 | 98 | ||
| 92 | // le site comporte deux modes: | 99 | // le site comporte deux modes: |
| 93 | // le mode normal en "lecture seule" utilisant le contrôleur visitor.php | 100 | // le mode visiteur en "lecture seule" utilisant le contrôleur visitor.php |
| 94 | // le mode admin avec droits en "écriture" utilisant le contrôleur admin.php | 101 | // le mode admin avec droits en "écriture" utilisant le contrôleur admin.php |
| 95 | 102 | ||
| 96 | // appelé tout le temps parce que certaines pages (accueil, menu) n'ont pas de version "admin" | 103 | // contrôleur des pages en mode visiteur |
| 97 | // une optimisation serait bienvenue | 104 | // appelé tout le temps parce que certaines pages (accueil, menu) n'ont pas de version "admin" => à améliorer |
| 98 | require('controller/visitor.php'); | 105 | require('controller/visitor.php'); |
| 99 | 106 | ||
| 107 | // utile pour presque toutes les pages | ||
| 108 | if(isset($_GET['page']) && $_GET['page'] != 'menu') | ||
| 109 | { | ||
| 110 | require('model/melaine-read.php'); | ||
| 111 | } | ||
| 112 | |||
| 113 | // contrôleur des pages en mode admin | ||
| 100 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1) | 114 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1) |
| 101 | { | 115 | { |
| 102 | require('controller/admin.php'); | 116 | require('controller/admin.php'); |
| @@ -122,17 +136,35 @@ if(isset($_GET['page'])) | |||
| 122 | // page melaine | 136 | // page melaine |
| 123 | elseif($_GET['page'] == 'melaine') | 137 | elseif($_GET['page'] == 'melaine') |
| 124 | { | 138 | { |
| 125 | // ouverture de l'éditeur | 139 | // ouverture de l'éditeur pour modification |
| 140 | // le lien utilisé pour ouvrir l'éditeur contient un GET avec le numéro de l'article, mais pas le nom du fichier que le visiteur ne doit pas voir | ||
| 141 | // GET, POST, cookies => navigation (utiles au visiteur) | ||
| 142 | // sessions => action | ||
| 143 | // c'est ici qu'on passe des GET aux sessions | ||
| 144 | // on associe maintenant le numéro de l'article et le nom du fichier, l'article déjà existant inséré dans l'éditeur DOIT être celui qui sera modifié | ||
| 145 | // | ||
| 126 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor') | 146 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor') |
| 127 | { | 147 | { |
| 128 | // modification | 148 | // modification |
| 149 | // A MODIFIER! on a aussi besoin du nom du fichier, | ||
| 150 | // infos à mettre dans la session! | ||
| 151 | |||
| 129 | if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0) | 152 | if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0) |
| 130 | { | 153 | { |
| 154 | // obtenir le nom du fichier à l'aide du modèle | ||
| 155 | $_SESSION['nomFichier'] = getFileName($_GET['page'], $_GET['article']); | ||
| 156 | |||
| 131 | melaineEdit($_GET['article']); | 157 | melaineEdit($_GET['article']); |
| 132 | } | 158 | } |
| 133 | // nouvel article | 159 | // nouvel article |
| 134 | else | 160 | else |
| 135 | { | 161 | { |
| 162 | // prévenir une hypothétique perte de donnée | ||
| 163 | if(isset($_SESSION['nomFichier'])) | ||
| 164 | { | ||
| 165 | unset($_SESSION['nomFichier']); | ||
| 166 | } | ||
| 167 | |||
| 136 | melaineEdit(0); | 168 | melaineEdit(0); |
| 137 | } | 169 | } |
| 138 | } | 170 | } |
diff --git a/model/Article.php b/model/Article.php index afcb1ca..aee4f5d 100644 --- a/model/Article.php +++ b/model/Article.php | |||
| @@ -6,8 +6,9 @@ class Article | |||
| 6 | private $page = ''; // page et donc dossier concerné | 6 | private $page = ''; // page et donc dossier concerné |
| 7 | private $croissant = True; // ordre des éléments du tableau $files | 7 | private $croissant = True; // ordre des éléments du tableau $files |
| 8 | private $files; // noms des fichiers d'un dossier | 8 | private $files; // noms des fichiers d'un dossier |
| 9 | private $nbArticles; // peut servir | 9 | private $oneFile; // correspond à $_SESSION['nomFichier'] |
| 10 | private $articles; // contenu de ces mêmes fichiers | 10 | private $nbArticles; // un fichier = un article |
| 11 | private $articles; // contenu des fichiers | ||
| 11 | 12 | ||
| 12 | private function getFiles() | 13 | private function getFiles() |
| 13 | { | 14 | { |
| @@ -45,7 +46,7 @@ class Article | |||
| 45 | } | 46 | } |
| 46 | 47 | ||
| 47 | // read | 48 | // read |
| 48 | public function getNb() | 49 | public function getNumber() |
| 49 | { | 50 | { |
| 50 | return $this->nbArticles; | 51 | return $this->nbArticles; |
| 51 | } | 52 | } |
| @@ -55,11 +56,11 @@ class Article | |||
| 55 | 56 | ||
| 56 | public function getAll($croissant) | 57 | public function getAll($croissant) |
| 57 | { | 58 | { |
| 58 | $this->croissant = $croissant; | 59 | $this->croissant = $croissant; // inversion de $files? |
| 59 | |||
| 60 | getFiles(); | 60 | getFiles(); |
| 61 | 61 | ||
| 62 | $i = 0; | 62 | $i = 0; |
| 63 | $articles = array(); | ||
| 63 | foreach ($this->files as $file) | 64 | foreach ($this->files as $file) |
| 64 | { | 65 | { |
| 65 | $articles[$i] = file_get_contents($file); | 66 | $articles[$i] = file_get_contents($file); |
diff --git a/model/melaine-read.php b/model/melaine-read.php index 801cd3c..7105acd 100644 --- a/model/melaine-read.php +++ b/model/melaine-read.php | |||
| @@ -3,16 +3,33 @@ | |||
| 3 | // | 3 | // |
| 4 | // accès en lecture seule | 4 | // accès en lecture seule |
| 5 | 5 | ||
| 6 | function lireArticles($page_actuelle, $croissant) | 6 | // obtenir le nom du fichier de l'article qu'on modifie |
| 7 | function getFileName($page, $numArticle) | ||
| 8 | { | ||
| 9 | $files = lireNomsFichiers($page); | ||
| 10 | $fileName = $files[$numArticle - 1]; | ||
| 11 | |||
| 12 | return($fileName); | ||
| 13 | } | ||
| 14 | |||
| 15 | function lireNomsFichiers($page) | ||
| 7 | { | 16 | { |
| 8 | // créer un tableau avec le nom des fichiers html | 17 | // créer un tableau avec le nom des fichiers html |
| 9 | $files = glob('data/' . $page_actuelle . '/html/*.html'); | 18 | $files = glob('data/' . $page . '/html/*.html'); |
| 10 | 19 | ||
| 11 | // nombre de fichiers (= taille du tableau $files) | 20 | return $files; |
| 12 | //$nombreDarticles = count($files); | 21 | } |
| 13 | 22 | ||
| 14 | // tableau contenant tous les articles au format html | 23 | function lireUnArticle($nomFichier) |
| 15 | //$articles = [$nombreDarticles]; | 24 | // ce nom est le chemin complet, donc la page y figure |
| 25 | { | ||
| 26 | return(file_get_contents($nomFichier)); | ||
| 27 | } | ||
| 28 | |||
| 29 | function lireArticles($page, $croissant) | ||
| 30 | { | ||
| 31 | // créer un tableau avec le nom des fichiers html | ||
| 32 | $files = lireNomsFichiers($page); | ||
| 16 | 33 | ||
| 17 | // inverse l'ordre du tableau retourné | 34 | // inverse l'ordre du tableau retourné |
| 18 | if($croissant == False) | 35 | if($croissant == False) |
| @@ -20,23 +37,18 @@ function lireArticles($page_actuelle, $croissant) | |||
| 20 | $files = array_reverse($files); | 37 | $files = array_reverse($files); |
| 21 | } | 38 | } |
| 22 | 39 | ||
| 23 | // for ($i = 0 ; $i < $nombreDarticles ; $i++) | ||
| 24 | // { | ||
| 25 | // // les noms de fichiers commencent par 1 | ||
| 26 | // // les articles dans le tableau[] commencent par 0 | ||
| 27 | // $numero = $i + 1; | ||
| 28 | // $articles[$i] = file_get_contents('data/' . $page_actuelle . '/html/article' . $numero . '.html'); | ||
| 29 | // } | ||
| 30 | $i = 0; | 40 | $i = 0; |
| 31 | foreach ($files as $files) | 41 | $articles = array(); |
| 42 | foreach ($files as $oneFile) | ||
| 32 | { | 43 | { |
| 33 | $articles[$i] = file_get_contents($files); | 44 | $articles[$i] = file_get_contents($oneFile); |
| 34 | $i++; | 45 | $i++; |
| 35 | } | 46 | } |
| 47 | // nombre de fichiers (= taille du tableau $files) | ||
| 48 | //$nombreDarticles = count($files); | ||
| 36 | 49 | ||
| 37 | //print_r($articles); | 50 | //print_r($articles); |
| 38 | //var_dump($articles); | 51 | |
| 39 | |||
| 40 | return($articles); | 52 | return($articles); |
| 41 | } | 53 | } |
| 42 | 54 | ||
diff --git a/model/melaine-write.php b/model/melaine-write.php index 642bf05..462d59e 100644 --- a/model/melaine-write.php +++ b/model/melaine-write.php | |||
| @@ -3,22 +3,30 @@ | |||
| 3 | // | 3 | // |
| 4 | // accès en écriture pour créer ou modifier des articles | 4 | // accès en écriture pour créer ou modifier des articles |
| 5 | 5 | ||
| 6 | |||
| 7 | |||
| 6 | function nouvelArticle($page, $contenuHTML) | 8 | function nouvelArticle($page, $contenuHTML) |
| 7 | { | 9 | { |
| 8 | // manipulation du fichier | 10 | // nommer les fichiers avec le timestamp |
| 9 | //$nom_fichier = 'article' . $article . '.html'; | 11 | // pour les trier par ordre chronologique |
| 10 | $nom_fichier = time() . '.html'; | 12 | // rendre impossible d'avoir deux fois le même nom (à la condition de gérer la "concurrence") |
| 11 | $fichier = fopen('data/' . $page . '/html/' . $nom_fichier, 'w'); // w peut créer un fichier, si il existe déjà, il est effacé par le nouveau contenu | 13 | $nom_fichier = 'data/' . $_GET['page'] . '/html/' . time() . '.html'; |
| 14 | |||
| 15 | $fichier = fopen($nom_fichier, 'w'); // w peut créer un fichier, si il existe déjà, il est effacé par le nouveau contenu | ||
| 12 | fputs($fichier, $contenuHTML); | 16 | fputs($fichier, $contenuHTML); |
| 13 | fclose($fichier); | 17 | fclose($fichier); |
| 14 | chmod('data/' . $page . '/html/' . $nom_fichier, 0666); | 18 | chmod($nom_fichier, 0666); |
| 15 | } | 19 | } |
| 16 | 20 | ||
| 17 | function modifArticle($page, $nom_fichier, $contenuHTML) | 21 | function modifArticle($page, $nomFichier, $contenuHTML) |
| 18 | { | 22 | { |
| 19 | // manipulation du fichier | 23 | // manipulation du fichier |
| 20 | $fichier = fopen('data/' . $page . '/html/' . $nom_fichier, 'w'); // w peut créer un fichier, si il existe déjà, il est effacé par le nouveau contenu | 24 | //$fichier = fopen('data/' . $page . '/html/' . $nom_fichier, 'w'); |
| 25 | $fichier = fopen($nomFichier, 'w'); | ||
| 26 | // w peut créer un fichier, si il existe déjà, il est effacé par le nouveau contenu | ||
| 21 | fputs($fichier, $contenuHTML); | 27 | fputs($fichier, $contenuHTML); |
| 22 | fclose($fichier); | 28 | fclose($fichier); |
| 23 | chmod('data/' . $page . '/html/' . $nom_fichier, 0666); | 29 | //chmod('data/' . $page . '/html/' . $nom_fichier, 0666); |
| 30 | chown($nomFichier, 'http'); | ||
| 31 | chmod($nomFichier, 0666); | ||
| 24 | } \ No newline at end of file | 32 | } \ No newline at end of file |
diff --git a/view/melaine.php b/view/melaine.php index acf4962..debd4e3 100644 --- a/view/melaine.php +++ b/view/melaine.php | |||
| @@ -67,48 +67,44 @@ if($_SESSION['admin'] == 1) | |||
| 67 | // on pourrait paginer avec des onglets contenant 5 ou 10 articles chacun | 67 | // on pourrait paginer avec des onglets contenant 5 ou 10 articles chacun |
| 68 | 68 | ||
| 69 | // tableau articles[] du dernier au premier (1 case = 1 article) | 69 | // tableau articles[] du dernier au premier (1 case = 1 article) |
| 70 | //for ($i=$nombreDarticles - 1; $i >= 0 ; $i--) | ||
| 71 | |||
| 72 | //$j = 0; | ||
| 73 | $j = count($articles); | 70 | $j = count($articles); |
| 74 | foreach ($articles as $article) | 71 | foreach ($articles as $article) |
| 75 | { | 72 | { |
| 76 | //$j = $i + 1; | ||
| 77 | |||
| 78 | // la div invisible sert à la compensation des liens d'ancre # | 73 | // la div invisible sert à la compensation des liens d'ancre # |
| 79 | ?> | 74 | ?> |
| 80 | <div class="zoneVideNav" ></div> | 75 | <div class="zoneVideNav" ></div> |
| 81 | <article id="article<?= $j ?>" > | 76 | <article id="article<?= $j ?>" > |
| 82 | <?php | 77 | <?php |
| 83 | 78 | ||
| 84 | // remplacer un article par l'éditeur | 79 | // remplacer un article par l'éditeur |
| 85 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor' && isset($_GET['article']) && $_GET['article'] == $j) | 80 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor' && isset($_GET['article']) && $_GET['article'] == $j) |
| 86 | { | 81 | { |
| 87 | echo("\n<p>Modifier l'article " . $j . "</p>"); | 82 | // on pourrait utiliser le timedate, ou encore le nom de l'article |
| 88 | //echo("<p>Modification d'un article</p>"); | 83 | echo("\n<p>Modifier l'article " . $j . "</p>"); |
| 89 | echo "\n"; | 84 | //echo("<p>Modification d'un article</p>"); |
| 90 | 85 | echo "\n"; | |
| 91 | echo($editeurHTML); // injection de template-editor.php | ||
| 92 | } | ||
| 93 | 86 | ||
| 94 | // placer un article | 87 | echo($editeurHTML); // injection de template-editor.php |
| 95 | else | 88 | } |
| 96 | { | ||
| 97 | // c'était pas compliqué | ||
| 98 | echo($article . "\n"); | ||
| 99 | 89 | ||
| 100 | // bouton | 90 | // placer un article |
| 101 | if($_SESSION['admin'] == 1) | 91 | else |
| 102 | { | 92 | { |
| 103 | ?> | 93 | // c'était pas compliqué |
| 104 | <p class="boutonArticle" > | 94 | echo($article . "\n"); |
| 105 | <a href="index.php?page=melaine&action=editor&article=<?= $j ?>#article<?= $j ?>" > | 95 | |
| 106 | Modifier cet article | 96 | // bouton |
| 107 | </a> | 97 | if($_SESSION['admin'] == 1) |
| 108 | </p> | 98 | { |
| 109 | <?php | 99 | ?> |
| 100 | <p class="boutonArticle" > | ||
| 101 | <a href="index.php?page=melaine&action=editor&article=<?= $j ?>#article<?= $j ?>" > | ||
| 102 | Modifier cet article | ||
| 103 | </a> | ||
| 104 | </p> | ||
| 105 | <?php | ||
| 106 | } | ||
| 110 | } | 107 | } |
| 111 | } | ||
| 112 | 108 | ||
| 113 | ?> | 109 | ?> |
| 114 | </article> | 110 | </article> |
diff --git a/view/template-ckeditor.php b/view/template-ckeditor.php index f95344a..12e1430 100644 --- a/view/template-ckeditor.php +++ b/view/template-ckeditor.php | |||
| @@ -174,7 +174,7 @@ ob_start(); | |||
| 174 | // obtenir la liste des plugins disponibles: | 174 | // obtenir la liste des plugins disponibles: |
| 175 | //alert(ClassicEditor.builtinPlugins.map( plugin => plugin.pluginName )); | 175 | //alert(ClassicEditor.builtinPlugins.map( plugin => plugin.pluginName )); |
| 176 | 176 | ||
| 177 | var initial = '<?= $initial ?>'; | 177 | var initial = '<?= $texte ?>'; |
| 178 | editor.setData(initial); | 178 | editor.setData(initial); |
| 179 | } ) | 179 | } ) |
| 180 | .catch( error => { | 180 | .catch( error => { |
