summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2021-05-10 03:31:18 +0200
committerpolo <ordipolo@gmx.fr>2021-05-10 03:31:18 +0200
commit610291f311aeab7363d1dbc39e62cbce8533c73f (patch)
tree757d9eabc31560e2aea08fba5b7ebc8ab17ff887
parent9cc7651e7eb2b3dfff6151f5226b4411ac7adcb3 (diff)
downloadmelaine-610291f311aeab7363d1dbc39e62cbce8533c73f.zip
classe
-rw-r--r--.htaccess12
-rw-r--r--controller/admin.php60
-rw-r--r--controller/ckeditor.php22
-rw-r--r--controller/visitor.php4
-rw-r--r--index.php4
-rw-r--r--model/Article.php84
-rw-r--r--model/melaine-read.php49
-rw-r--r--model/melaine-write.php17
-rw-r--r--view/melaine.php11
-rw-r--r--view/template-ckeditor.php8
10 files changed, 216 insertions, 55 deletions
diff --git a/.htaccess b/.htaccess
index 9c3a9cc..f4a4cf8 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1 +1,11 @@
1ErrorDocument 404 http://localhost/melaine-polo-mvc/erreur404.php 1# redirection en cas d'erreur 404
2
3# site simple
4#ErrorDocument 404 http://localhost/melaine/erreur404.php
5
6# site "hôte virtuel" (cas des hébergeurs et d'une debian par défaut)
7ErrorDocument 404 http://melaine.localhost/erreur404.php
8#ErrorDocument 404 "<a href='http://melaine.localhost/erreur404.php' >retour au site</a>"
9
10# Interdire exploration du répertoire
11#Options All -Indexes
diff --git a/controller/admin.php b/controller/admin.php
index 2b3583f..77ab34e 100644
--- a/controller/admin.php
+++ b/controller/admin.php
@@ -4,37 +4,59 @@
4// utilisation du site en écriture 4// utilisation du site en écriture
5 5
6// pages du site en version admin 6// pages du site en version admin
7function melaineAdmin($numArticle) 7function melaineEdit($numArticle)
8{ 8{
9 $title = "Ajouter ou modifier un article";
10 $page_actuelle = "melaine"; 9 $page_actuelle = "melaine";
11 10
12 // variables $nombreDarticles et tableau $articles[] 11 // tableau $articles[]
13 require('model/melaine-read.php'); 12 require('model/melaine-read.php');
13 $croissant = False;
14 $articles = lireArticles($page_actuelle, $croissant);
15
16 if($numArticle == 0)
17 {
18 $title = "Ajouter un article";
19 $texte = '';
20 //$numArticle = count($articles) + 1;
21 }
22 else
23 {
24 $title = "Modifier un article";
25 // faire correspondre le numéro de l'article du GET et le tableau des articles qui est inversé
26 $texte = $articles[count($articles) - $numArticle];
27 }
14 28
15 // traitements PHP pour l'éditeur 29 // traitements PHP pour l'éditeur
16 require('controller/ckeditor.php'); 30 require('controller/ckeditor.php');
31 // sécurisation du contenu pré-existant inséré dans l'éditeur
32 $initial = preparationCKeditor($numArticle, $texte);
17 33
18 // NB: penser à ajouter au template la fonctionnalité "autosave" 34 // NB: penser à ajouter au template la fonctionnalité "autosave"
19 // https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/saving-data.html 35 // https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/saving-data.html
20 36
21 // récupération des dones du modèle 37 // if($numArticle > $nombreDarticles || $numArticle < 0) // erreur nombre trop grand (bug?)
22 if($numArticle > $nombreDarticles || $numArticle < 0) // erreur nombre trop grand (bug?) 38 // {
23 { 39 // header('Location: index.php?page=melaine');
24 header('Location: index.php?page=melaine'); 40 // }
25 } 41 // elseif($numArticle == 0) // nouvel article
26 elseif($numArticle == 0) // nouvel article 42 // {
27 { 43 // $texte = '';
28 $texte = ''; 44 // $numArticle = $nombreDarticles + 1;
29 $numArticle = $nombreDarticles + 1; 45 // }
30 } 46 // else // modification d'un article
31 else // modification d'un article 47 // {
32 { 48 // $texte = $articles[$numArticle - 1];
33 $texte = $articles[$numArticle - 1]; 49 // }
34 } 50
35 51
36 // traitement du contenu pré-existant 52 // if($initial == '')
37 $initial = preparationCKeditor($page_actuelle, $numArticle, $texte); 53 // {
54 // $article = "nouveau";
55 // }
56 // else
57 // {
58 // $article = "modif";
59 // }
38 60
39 // variable $editeurHTML, $initial est inséré dedans 61 // variable $editeurHTML, $initial est inséré dedans
40 require('view/template-ckeditor.php'); 62 require('view/template-ckeditor.php');
diff --git a/controller/ckeditor.php b/controller/ckeditor.php
index 1d085a7..013d6b5 100644
--- a/controller/ckeditor.php
+++ b/controller/ckeditor.php
@@ -7,10 +7,9 @@
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
10function preparationCKeditor($page, $numArticle, $texte) 10function preparationCKeditor($numArticle, $texte)
11{ 11{
12 // $page sert à lire et écrire du contenu dans le bon dossier 12 // $numArticle sert à placer l'éditeur sur la page et à lire et écrire dans le bon dossier
13 // $article sert à placer l'éditeur sur la page et à lire et écrire dans le bon dossier
14 13
15 // texte initial pour setData() à modifier avec l'éditeur 14 // texte initial pour setData() à modifier avec l'éditeur
16 if ($numArticle > 0) 15 if ($numArticle > 0)
@@ -83,10 +82,23 @@ function submitCKeditor($page, $article, $contenuPOST)
83 // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; 82 // 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... 83 // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert...
85 84
85 // echo($page);
86 // echo($article);
87 // echo($contenu);
88 // die();
89
86 // enregistrement 90 // enregistrement
87 require('model/melaine-write.php'); 91 require('model/melaine-write.php');
88 nouvelArticle($page, $article, $contenu); 92 if($article == 0)
89 93 {
94 nouvelArticle($page, $contenu);
95 }
96 else
97 {
98 // $article est le nom du fichier
99 modifArticle($page, $article, $contenu);
100 }
101
90 // debuggage 102 // debuggage
91 //exit(); 103 //exit();
92} \ No newline at end of file 104} \ No newline at end of file
diff --git a/controller/visitor.php b/controller/visitor.php
index 98d7a45..9bd3461 100644
--- a/controller/visitor.php
+++ b/controller/visitor.php
@@ -32,8 +32,10 @@ function melaineVisitor()
32 $page_actuelle = "melaine"; 32 $page_actuelle = "melaine";
33 $title = "Mais qui est Melaine Favennec?"; 33 $title = "Mais qui est Melaine Favennec?";
34 34
35 // variables $nombreDarticles et tableau $articles 35 // tableau $articles
36 require('model/melaine-read.php'); 36 require('model/melaine-read.php');
37 $croissant = False;
38 $articles = lireArticles($page_actuelle, $croissant);
37 39
38 // vérification pour protéger les visiteurs 40 // vérification pour protéger les visiteurs
39 // normalement déjà faite dans submit.php, 41 // normalement déjà faite dans submit.php,
diff --git a/index.php b/index.php
index 72791fd..81d5faf 100644
--- a/index.php
+++ b/index.php
@@ -128,12 +128,12 @@ if(isset($_GET['page']))
128 // modification 128 // modification
129 if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0) 129 if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0)
130 { 130 {
131 melaineAdmin($_GET['article']); 131 melaineEdit($_GET['article']);
132 } 132 }
133 // nouvel article 133 // nouvel article
134 else 134 else
135 { 135 {
136 melaineAdmin(0); 136 melaineEdit(0);
137 } 137 }
138 } 138 }
139 else 139 else
diff --git a/model/Article.php b/model/Article.php
new file mode 100644
index 0000000..cee594f
--- /dev/null
+++ b/model/Article.php
@@ -0,0 +1,84 @@
1<?php
2// model/Article.php
3
4class Article
5{
6 private $page = ''; // page et donc dossier concerné
7 private $croissant = True; // ordre des éléments du tableau $files
8 private $files; // noms des fichiers d'un dossier
9 private $nbArticles; // peut servir
10 private $articles; // contenu de ces mêmes fichiers
11
12 private function getFiles()
13 {
14 if($this->page == '')
15 {
16 die("debug: la méthode setPage() doit être appelée avant toute autre.");
17 }
18
19 $this->files = glob('data/' . $this->page . '/html/*.html');
20
21 if($croissant == False)
22 {
23 $files = array_reverse($files);
24 }
25
26 $this->nbArticles = count($this->files);
27 }
28
29 public function getNb()
30 {
31 return $this->nbArticles;
32 }
33
34 public function getAll($croissant)
35 {
36 $this->croissant = $croissant;
37
38 getFiles();
39
40 $i = 0;
41 foreach ($this->files as $file)
42 {
43 $articles[$i] = file_get_contents($file);
44 $i++;
45 }
46
47 return $articles;
48 }
49
50 public function getOne()
51 {}
52
53 public function getDate($fileNumber)
54 {
55 // le 2è paramètre exclut le suffixe .html
56 $timestamp = basename($this->files[$fileNumber], '.html');
57 return getdate($timestamp);
58 }
59
60 public function new($content)
61 {
62 if($this->page == '')
63 {
64 die("debug: la méthode setPage() doit être appelée avant toute autre.");
65 }
66
67 $nom_fichier = time() . '.html';
68 $fichier = fopen('data/' . $this->page . '/html/' . $nom_fichier, 'w'); // w peut créer un fichier, si il existe déjà, il est effacé par le nouveau contenu
69 fputs($fichier, $content);
70 fclose($fichier);
71 chmod('data/' . $this->page . '/html/' . $nom_fichier, 0666);
72 }
73
74 public function update()
75 {}
76
77 public function remove()
78 {}
79
80 public function setPage($page)
81 {
82 $this->page = $page;
83 }
84} \ No newline at end of file
diff --git a/model/melaine-read.php b/model/melaine-read.php
index 7e51b2c..801cd3c 100644
--- a/model/melaine-read.php
+++ b/model/melaine-read.php
@@ -3,21 +3,42 @@
3// 3//
4// accès en lecture seule 4// accès en lecture seule
5 5
6// créer un tableau avec le nom des fichiers html 6function lireArticles($page_actuelle, $croissant)
7$files = glob('data/' . $page_actuelle . '/html/*.html'); 7{
8// nombre de fichiers (= taille du tableau $files) 8 // créer un tableau avec le nom des fichiers html
9$nombreDarticles = count($files); 9 $files = glob('data/' . $page_actuelle . '/html/*.html');
10 10
11// tableau contenant tous les articles au format html 11 // nombre de fichiers (= taille du tableau $files)
12$articles = [$nombreDarticles]; 12 //$nombreDarticles = count($files);
13for ($i = 0 ; $i < $nombreDarticles ; $i++) 13
14{ 14 // tableau contenant tous les articles au format html
15 // les noms de fichiers commencent par 1 15 //$articles = [$nombreDarticles];
16 // les articles dans le tableau[] commencent par 0 16
17 $numero = $i + 1; 17 // inverse l'ordre du tableau retourné
18 $articles[$i] = file_get_contents('data/' . $page_actuelle . '/html/article' . $numero . '.html'); 18 if($croissant == False)
19} 19 {
20 $files = array_reverse($files);
21 }
20 22
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;
31 foreach ($files as $files)
32 {
33 $articles[$i] = file_get_contents($files);
34 $i++;
35 }
36
37 //print_r($articles);
38 //var_dump($articles);
39
40 return($articles);
41}
21 42
22// note: les pros font de l'hydration 43// note: les pros font de l'hydration
23// le code du modèle est orienté objet et "refactorisé" d'une manière précise: 44// le code du modèle est orienté objet et "refactorisé" d'une manière précise:
diff --git a/model/melaine-write.php b/model/melaine-write.php
index 4f5b441..642bf05 100644
--- a/model/melaine-write.php
+++ b/model/melaine-write.php
@@ -3,15 +3,22 @@
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
6function nouvelArticle($page, $article, $contenuHTML) 6function nouvelArticle($page, $contenuHTML)
7{ 7{
8 // debuggage
9 //exit();
10
11 // manipulation du fichier 8 // manipulation du fichier
12 $nom_fichier = 'article' . $article . '.html'; 9 //$nom_fichier = 'article' . $article . '.html';
10 $nom_fichier = time() . '.html';
13 $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 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
14 fputs($fichier, $contenuHTML); 12 fputs($fichier, $contenuHTML);
15 fclose($fichier); 13 fclose($fichier);
16 chmod('data/' . $page . '/html/' . $nom_fichier, 0666); 14 chmod('data/' . $page . '/html/' . $nom_fichier, 0666);
17} 15}
16
17function modifArticle($page, $nom_fichier, $contenuHTML)
18{
19 // 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
21 fputs($fichier, $contenuHTML);
22 fclose($fichier);
23 chmod('data/' . $page . '/html/' . $nom_fichier, 0666);
24} \ No newline at end of file
diff --git a/view/melaine.php b/view/melaine.php
index 9fb8482..acf4962 100644
--- a/view/melaine.php
+++ b/view/melaine.php
@@ -67,9 +67,13 @@ 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)
70for ($i=$nombreDarticles - 1; $i >= 0 ; $i--) 70//for ($i=$nombreDarticles - 1; $i >= 0 ; $i--)
71
72//$j = 0;
73$j = count($articles);
74foreach ($articles as $article)
71{ 75{
72 $j = $i + 1; 76 //$j = $i + 1;
73 77
74 // la div invisible sert à la compensation des liens d'ancre # 78 // la div invisible sert à la compensation des liens d'ancre #
75?> 79?>
@@ -91,7 +95,7 @@ if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'edit
91else 95else
92{ 96{
93 // c'était pas compliqué 97 // c'était pas compliqué
94 echo($articles[$i] . "\n"); 98 echo($article . "\n");
95 99
96 // bouton 100 // bouton
97 if($_SESSION['admin'] == 1) 101 if($_SESSION['admin'] == 1)
@@ -109,5 +113,6 @@ else
109?> 113?>
110 </article> 114 </article>
111<?php 115<?php
116 $j--;
112} 117}
113$content = ob_get_clean(); 118$content = ob_get_clean();
diff --git a/view/template-ckeditor.php b/view/template-ckeditor.php
index 48b673a..f95344a 100644
--- a/view/template-ckeditor.php
+++ b/view/template-ckeditor.php
@@ -114,10 +114,9 @@ ob_start();
114 114
115 // plugin code HTML 115 // plugin code HTML
116 // pour coller le code HTML "embed" proposé par certains sites 116 // pour coller le code HTML "embed" proposé par certains sites
117 //
118 117
119 // media embarqué (audio, vidéo, carte) 118 // media embarqué (audio, vidéo, carte)
120 mediaEmbed: { 119 //mediaEmbed: {
121 //previewsInData: true, 120 //previewsInData: true,
122 // vaut "false" par defaut, on crée la balise non standard <oembed url="" > // https://oembed.com/ 121 // vaut "false" par defaut, on crée la balise non standard <oembed url="" > // https://oembed.com/
123 // qui nécessite un traitement (en JS ou côté serveur) en utilisant le lien à l'intérieur 122 // qui nécessite un traitement (en JS ou côté serveur) en utilisant le lien à l'intérieur
@@ -130,7 +129,7 @@ ob_start();
130 // permettent d'afficher un aperçu (preview): une image avec un bouton lecture dessus 129 // permettent d'afficher un aperçu (preview): une image avec un bouton lecture dessus
131 // cette image est envoyée imédiatement par le serveur, et le contenu après un clic dessus 130 // cette image est envoyée imédiatement par le serveur, et le contenu après un clic dessus
132 // 131 //
133 }, 132 //},
134 133
135 // images 134 // images
136 // https://ckeditor.com/docs/ckeditor5/latest/features/image-upload/simple-upload-adapter.html 135 // https://ckeditor.com/docs/ckeditor5/latest/features/image-upload/simple-upload-adapter.html
@@ -144,7 +143,6 @@ ob_start();
144 // - à télécharger l'image avant de la placer dans l'éditeur 143 // - à télécharger l'image avant de la placer dans l'éditeur
145 // - écrire le HTML qu'on enregistrera ensuite 144 // - écrire le HTML qu'on enregistrera ensuite
146 // en effet, le fichier est téléchargé sur le serveur avant de revenir dans l'éditeur comme un téléchargement classique 145 // en effet, le fichier est téléchargé sur le serveur avant de revenir dans l'éditeur comme un téléchargement classique
147
148 simpleUpload: { 146 simpleUpload: {
149 uploadUrl: 'imageAJAX.php?page=<?= $page_actuelle ?>', 147 uploadUrl: 'imageAJAX.php?page=<?= $page_actuelle ?>',
150 // noter qu'il est possible (parce que souhaitable je ne pense pas) d'envoyer une requête AJAX 148 // noter qu'il est possible (parce que souhaitable je ne pense pas) d'envoyer une requête AJAX
@@ -158,7 +156,7 @@ ob_start();
158 } 156 }
159 }, 157 },
160 // formats acceptés par défaut: jpeg, png, gif, bmp, webp, tiff 158 // formats acceptés par défaut: jpeg, png, gif, bmp, webp, tiff
161 // le svg n'est pas dans la liste, pour raison de sécurité il me semble, apparemment on peut mettre du javascript à l'intérieur 159 // le svg n'est pas dans la liste, pour raison de sécurité apparemment, il parait qu'on peut mettre du javascript à l'intérieur
162 160
163 // ce plugin a l'intérêt de ne pas imposer l'utilisation de l'extension GD de PHP, 161 // ce plugin a l'intérêt de ne pas imposer l'utilisation de l'extension GD de PHP,
164 // Reste qu'il sera quand même intéressant de l'ajouter pour le redimensionnement des images trop lourdes, 162 // Reste qu'il sera quand même intéressant de l'ajouter pour le redimensionnement des images trop lourdes,