diff options
author | polo <ordipolo@gmx.fr> | 2021-07-22 03:49:28 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2021-07-22 03:49:28 +0200 |
commit | 86c2a611e55c9e35384febecf34964e214c0296e (patch) | |
tree | e910a2f9a135bfc7059fd28c9af6c00ae46b5fde | |
parent | a23573d5aff91e18d1240a6ac84c2962a8a15f87 (diff) | |
download | melaine-86c2a611e55c9e35384febecf34964e214c0296e.zip |
patch modifs
-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 => { |