diff options
author | polo <ordipolo@gmx.fr> | 2021-11-29 03:25:19 +0100 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2021-11-29 03:25:19 +0100 |
commit | 29df6f1362745eabf4fbcaedf309eb63795152fa (patch) | |
tree | 8c2f4839c119db193eca4f35aeac96356a8ef439 /controller | |
parent | b97a68343ec5c4ff1fae25ff5dc41f1a2ce6a17f (diff) | |
download | melaine-29df6f1362745eabf4fbcaedf309eb63795152fa.zip |
discographie
Diffstat (limited to 'controller')
-rw-r--r-- | controller/admin.php | 92 | ||||
-rw-r--r-- | controller/ckeditor.php | 63 | ||||
-rw-r--r-- | controller/visitor.php | 55 |
3 files changed, 93 insertions, 117 deletions
diff --git a/controller/admin.php b/controller/admin.php index 90924e0..e319c80 100644 --- a/controller/admin.php +++ b/controller/admin.php | |||
@@ -1,15 +1,15 @@ | |||
1 | <?php | 1 | <?php |
2 | // controller/admin.php | 2 | // controller/admin.php |
3 | // | 3 | // |
4 | // utilisation du site en écriture | 4 | // utilisation du site en écriture (admin uniquement) |
5 | // version des pages en mode admin lorsque celui-ci crée ou modifie quelque chose | 5 | // l'éditeur ouvert ou demande de suppression d'un élément |
6 | 6 | ||
7 | function melaineEdit($numArticle, $suppression) | 7 | function melaineEdit($numArticle, $suppression) |
8 | { | 8 | { |
9 | $page_actuelle = "melaine"; | 9 | $page_actuelle = "melaine"; |
10 | 10 | ||
11 | // modèle | 11 | // modèle |
12 | $Article = new Page($page_actuelle, 'html'); | 12 | $Article = new Page($page_actuelle); |
13 | 13 | ||
14 | // nouvel article | 14 | // nouvel article |
15 | if($numArticle == 0) | 15 | if($numArticle == 0) |
@@ -21,7 +21,7 @@ function melaineEdit($numArticle, $suppression) | |||
21 | { | 21 | { |
22 | // nom de l'article ciblé (objet et session) | 22 | // nom de l'article ciblé (objet et session) |
23 | $Article->findFileName($numArticle); | 23 | $Article->findFileName($numArticle); |
24 | $_SESSION['nomFichier'] = $Article->fileName; | 24 | $_SESSION['target'] = $Article->fileName; |
25 | 25 | ||
26 | // suppression | 26 | // suppression |
27 | if($suppression) | 27 | if($suppression) |
@@ -42,10 +42,10 @@ function melaineEdit($numArticle, $suppression) | |||
42 | $articles = array_reverse($Article->readAll()); // lourd | 42 | $articles = array_reverse($Article->readAll()); // lourd |
43 | 43 | ||
44 | // sécurisation du contenu pré-existant inséré dans l'éditeur | 44 | // sécurisation du contenu pré-existant inséré dans l'éditeur |
45 | if($numArticle >= 0 && !$suppression) | 45 | if($numArticle > 0 && !$suppression) |
46 | { | 46 | { |
47 | require('controller/ckeditor.php'); | 47 | require('controller/ckeditor.php'); |
48 | $texte = preparationCKeditor($numArticle, $texte); | 48 | $texte = preparationCKeditor($texte); |
49 | } | 49 | } |
50 | 50 | ||
51 | // NB: penser à ajouter au template la fonctionnalité "autosave" | 51 | // NB: penser à ajouter au template la fonctionnalité "autosave" |
@@ -61,104 +61,96 @@ function melaineEdit($numArticle, $suppression) | |||
61 | require('view/template.php'); | 61 | require('view/template.php'); |
62 | } | 62 | } |
63 | 63 | ||
64 | function discoEdit($numArticle, $albumCode, $suppression) | 64 | function discoEdit($albumCode, $suppression) |
65 | { | 65 | { |
66 | $page_actuelle = "discographie"; | 66 | $page_actuelle = "discographie"; |
67 | $title = "Discographie"; | 67 | $title = "Discographie"; |
68 | 68 | ||
69 | // modèle | 69 | // modèle |
70 | $Album = new Album($page_actuelle); | 70 | $Albums = new Album($page_actuelle); |
71 | $Album->makeFileList(); | 71 | $Albums->makeFileList(); |
72 | 72 | ||
73 | // nouvel album | 73 | // nouvel album |
74 | if($numArticle == 0) | 74 | if($albumCode == '') |
75 | { | 75 | { |
76 | unset($_SESSION['target']); | ||
76 | $title = "Ajouter un album"; | 77 | $title = "Ajouter un album"; |
78 | |||
79 | // formulaires vides | ||
80 | $vignette = ['', '', '']; | ||
77 | $texte = ''; | 81 | $texte = ''; |
78 | } | 82 | } |
79 | else | 83 | else |
80 | { | 84 | { |
81 | // nom de l'article ciblé (objet et session) | 85 | // album ciblé |
82 | $Album->findFileName($numArticle); | 86 | $Albums->albumCode = $albumCode; |
83 | $_SESSION['nomFichier'] = $Album->fileName; | ||
84 | 87 | ||
85 | // suppression | 88 | // suppression |
86 | if($suppression) | 89 | if($suppression) |
87 | { | 90 | { |
88 | $Album->delete(); | 91 | $Albums->delete(); |
89 | header('Location: index.php?page=' . $page_actuelle); | 92 | header('Location: index.php?page=' . $page_actuelle); |
90 | exit(); | 93 | exit(); |
91 | } | 94 | } |
92 | // modification | 95 | // modification |
93 | else | 96 | else |
94 | { | 97 | { |
98 | $_SESSION['target'] = $Albums->albumCode; | ||
95 | $title = "Modifier un album"; | 99 | $title = "Modifier un album"; |
96 | $texte = $Album->readOneAlbum($albumCode); | 100 | $texte = $Albums->readOneHTML($albumCode); |
97 | $vignette = json_decode($Album->getVignette(), true); | 101 | $vignette = $Albums->getVignetteJSON(); |
98 | } | 102 | } |
99 | } | 103 | } |
100 | 104 | ||
101 | // traitements PHP pour l'éditeur | 105 | // traitements PHP pour l'éditeur |
102 | // sécurisation du contenu pré-existant inséré dans l'éditeur | 106 | // sécurisation du contenu pré-existant inséré dans l'éditeur |
103 | if($numArticle >= 0 && !$suppression) | 107 | if(!empty($albumCode) && !$suppression && !empty($texte)) |
104 | { | 108 | { |
105 | require('controller/ckeditor.php'); | 109 | require('controller/ckeditor.php'); |
106 | $texte = preparationCKeditor($numArticle, $texte); | 110 | $texte = preparationCKeditor($texte); |
107 | } | 111 | } |
108 | 112 | ||
113 | // préremplir le champ <input type="file" > | ||
114 | // c'est normallement impossible | ||
115 | |||
109 | // contenu de tous les fichiers JSON (= tableau de chaines) | 116 | // contenu de tous les fichiers JSON (= tableau de chaines) |
110 | $albumsJSON = $Album->readAll(); | 117 | $albumsJSON = $Albums->readAll(); |
111 | // noms des fichiers JSON | 118 | // noms des fichiers JSON |
112 | $albumNamesJSON = $Album->fileList; | 119 | $albumNamesJSON = $Albums->fileList; |
113 | 120 | ||
114 | // changer les chaines JSON en tableaux: titre, année, pochette | 121 | $annees = []; |
115 | $i = 0; | 122 | for($i = 0; $i < count($albumsJSON); $i++) |
116 | $annees = array(); | ||
117 | foreach($albumsJSON as $oneAlbum) | ||
118 | { | 123 | { |
119 | $albumsJSON[$i] = json_decode($oneAlbum, true); | 124 | // une case supplémentaire contient le "albumCode" |
125 | $albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename']; | ||
120 | 126 | ||
121 | // ajout des noms des fichiers JSON | ||
122 | $albumsJSON[$i][3] = $albumNamesJSON[$i]; | ||
123 | $annees[$i] = $albumsJSON[$i][1]; | 127 | $annees[$i] = $albumsJSON[$i][1]; |
124 | $i++; | ||
125 | } | 128 | } |
126 | print_r($albumsJSON); | 129 | |
127 | //exit(); | ||
128 | // tri d'un tableau multidimensionnel | 130 | // tri d'un tableau multidimensionnel |
129 | array_multisort($annees, $albumsJSON); | 131 | array_multisort($annees, $albumsJSON); |
130 | 132 | ||
131 | // on passe maintenant au contenu HTML | ||
132 | $Album->format = 'html'; | ||
133 | $Album->makeFileList(); | ||
134 | $albumNamesHTML = $Album->fileList; | ||
135 | |||
136 | // lien vers le HTML ou ancre? | 133 | // lien vers le HTML ou ancre? |
137 | // pour chaque album, détecter le fichier html | ||
138 | // si non, ne fournir qu'un lien d'ancre pour la liste d'album | ||
139 | $i = 0; | ||
140 | $avecLien = []; | 134 | $avecLien = []; |
141 | foreach($albumsJSON as $oneAlbum) | 135 | $linkDiscoChrono = []; |
136 | for($i = 0; $i < count($albumsJSON); $i++) | ||
142 | { | 137 | { |
143 | // nom sans extension | 138 | // cas particulier où le dossier "html" est vide |
144 | $chemin = pathinfo($oneAlbum[3]); | 139 | if(!empty($Albums->fileList)) |
145 | $nomJSONsansExt = $chemin['filename']; | ||
146 | |||
147 | // au cas où la discographie ne contient aucun html | ||
148 | if(!empty($albumNamesHTML)) | ||
149 | { | 140 | { |
150 | if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) | 141 | if(file_exists('data/discographie/html/' . $albumsJSON[$i][3] . '.html')) |
151 | { | 142 | { |
152 | $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; | 143 | $lienAlbum[$i] = 'page=album&album_name=' . $albumsJSON[$i][0] . '&album_code=' . $albumsJSON[$i][3]; |
153 | $lienBoutonModif[$i] = 'discographie&action=edition&album_code=' . $nomJSONsansExt; | ||
154 | $avecLien[$i] = true; | 144 | $avecLien[$i] = true; |
145 | $linkDiscoChrono[$i] = 'linkChrono'; // css | ||
155 | } | 146 | } |
156 | else | 147 | else |
157 | { | 148 | { |
158 | $lienAlbum[$i] = 'discographie#' . $albumsJSON[$i][0]; | 149 | $lienAlbum[$i] = 'page=discographie#' . $albumsJSON[$i][0]; |
159 | $avecLien[$i] = false; | 150 | $avecLien[$i] = false; |
151 | $linkDiscoChrono[$i] = 'noLinkChrono'; // css | ||
160 | } | 152 | } |
161 | $i++; | 153 | $lienBoutonModif[$i] = 'page=discographie&action=edition&album_code=' . $albumsJSON[$i][3]; |
162 | } | 154 | } |
163 | } | 155 | } |
164 | 156 | ||
diff --git a/controller/ckeditor.php b/controller/ckeditor.php index 2b9f168..661e0e3 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php | |||
@@ -7,41 +7,33 @@ | |||
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($numArticle, $texte) | 10 | function preparationCKeditor($html) |
11 | { | 11 | { |
12 | // ici $numArticle sert uniquement à savoir si on crée ou modifie un article | 12 | // texte initial inséré avec setData() dans l'éditeur |
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 | ||
13 | 15 | ||
14 | // texte initial inséré avec setData() dans l'éditeur, | 16 | if(empty($html)) |
15 | // on recherche ici les causes expliquant qu'il n'apparaisse pas à l'ouverture de l'éditeur, | ||
16 | // les données précédentes sont écrasées à la validation du nouveau texte | ||
17 | if ($numArticle > 0) | ||
18 | { | 17 | { |
19 | if(empty($texte)) | 18 | header('Location: index.php?erreur=empty_input'); |
20 | { | 19 | } |
21 | header('Location: index.php?erreur=empty_input'); | ||
22 | } | ||
23 | 20 | ||
24 | // 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 |
25 | $texte = trim($texte); | 22 | $html = trim($html); |
26 | 23 | ||
27 | // supprimer les sauts de ligne | 24 | // supprimer les sauts de ligne |
28 | $sautsDeLigne = array("\n", "\r", "\r\n"); | 25 | $sautsDeLigne = array("\n", "\r", "\r\n"); |
29 | $texte = str_replace($sautsDeLigne, '', $texte); | 26 | $html = str_replace($sautsDeLigne, '', $html); |
30 | 27 | ||
31 | // échapper tous les ', ", \ et caractère NULL | 28 | // échapper tous les ', ", \ et caractère NULL |
32 | $texte = addslashes($texte); | 29 | $html = addslashes($html); |
33 | } | ||
34 | else | ||
35 | { | ||
36 | $texte = ''; // nouveau contenu | ||
37 | } | ||
38 | 30 | ||
39 | return($texte); | 31 | return($html); |
40 | } | 32 | } |
41 | 33 | ||
42 | // réception du HTML créé par l'éditeur | 34 | // réception du HTML créé par l'éditeur |
43 | // le nom du fichier est celui dans $_SESSION['nomFichier'] | 35 | // le nom du fichier est celui dans $_SESSION['nomFichier'] |
44 | function submitCKeditor($nomFichier) | 36 | function submitCKeditor($target) |
45 | { | 37 | { |
46 | $page = $_GET['page']; | 38 | $page = $_GET['page']; |
47 | 39 | ||
@@ -79,10 +71,10 @@ function submitCKeditor($nomFichier) | |||
79 | $Album = new Album($page); | 71 | $Album = new Album($page); |
80 | 72 | ||
81 | // enregistrement | 73 | // enregistrement |
82 | if($_GET['article'] == 0) | 74 | if($target == '') |
83 | { | 75 | { |
84 | // page disco | 76 | // page disco |
85 | $Album->createVignette($titre, $annee, $pochette); | 77 | $_SESSION['erreur'] = $Album->createVignette($titre, $annee, $pochette); |
86 | 78 | ||
87 | // page de l'album | 79 | // page de l'album |
88 | if(!empty($_POST['contenu'])) | 80 | if(!empty($_POST['contenu'])) |
@@ -92,28 +84,35 @@ function submitCKeditor($nomFichier) | |||
92 | } | 84 | } |
93 | else | 85 | else |
94 | { | 86 | { |
87 | $Album->albumCode = $target; | ||
88 | |||
95 | // page disco | 89 | // page disco |
96 | $Album->updateVignette($titre, $annee, $pochette); | 90 | $_SESSION['erreur'] = $Album->updateVignetteJSON($titre, $annee, $pochette); |
97 | 91 | ||
98 | // page de l'album | 92 | // page de l'album |
99 | if(isset($_POST['contenu'])) | 93 | if(isset($_POST['contenu'])) |
100 | { | 94 | { |
101 | $Album->update($content); | 95 | $Album->format = 'html'; |
96 | $Album->setFileName(); | ||
97 | if(!empty($Album->fileName)) | ||
98 | { | ||
99 | $Album->update($_POST['contenu']); | ||
100 | } | ||
102 | } | 101 | } |
103 | } | 102 | } |
104 | } | 103 | } |
105 | // autres pages | 104 | // autres pages |
106 | else | 105 | else |
107 | { | 106 | { |
108 | $Article = new Page($page, 'html'); | 107 | $Article = new Page($page); |
109 | 108 | ||
110 | if($_GET['article'] == 0) | 109 | if($target == '') |
111 | { | 110 | { |
112 | $Article->create($contenu); | 111 | $Article->create($contenu); |
113 | } | 112 | } |
114 | else | 113 | else |
115 | { | 114 | { |
116 | $Article->fileName = $nomFichier; | 115 | $Article->fileName = $target; |
117 | $Article->update($contenu); | 116 | $Article->update($contenu); |
118 | } | 117 | } |
119 | } | 118 | } |
diff --git a/controller/visitor.php b/controller/visitor.php index 0e79ee2..6c6146b 100644 --- a/controller/visitor.php +++ b/controller/visitor.php | |||
@@ -1,7 +1,7 @@ | |||
1 | <?php | 1 | <?php |
2 | // controller/visitor.php | 2 | // controller/visitor.php |
3 | // | 3 | // |
4 | // simple affichage du site au visiteur | 4 | // affichage du site en lecture seul (visiteur ou admin) |
5 | 5 | ||
6 | // pages du sites | 6 | // pages du sites |
7 | function accueil() | 7 | function accueil() |
@@ -50,63 +50,48 @@ function discoVisitor() | |||
50 | $title = "Discographie"; | 50 | $title = "Discographie"; |
51 | 51 | ||
52 | // modèle | 52 | // modèle |
53 | $AllAlbums = new Album($page_actuelle); | 53 | $Albums = new Album($page_actuelle); |
54 | $AllAlbums->makeFileList(); | 54 | $Albums->makeFileList(); |
55 | 55 | ||
56 | // contenu de tous les fichiers JSON (= tableau de chaines) | 56 | // contenu de tous les fichiers JSON (= tableau de chaines) |
57 | $albumsJSON = array_reverse($AllAlbums->readAll()); | 57 | $albumsJSON = $Albums->readAll(); |
58 | // noms des fichiers JSON | 58 | // noms des fichiers JSON |
59 | $albumNamesJSON = $AllAlbums->fileList; | 59 | $albumNamesJSON = $Albums->fileList; |
60 | 60 | ||
61 | // changer les chaines JSON en tableaux: titre, année, pochette | 61 | $annees = []; |
62 | $i = 0; | 62 | for($i = 0; $i < count($albumsJSON); $i++) |
63 | $annees = array(); | ||
64 | foreach($albumsJSON as $oneAlbum) | ||
65 | { | 63 | { |
66 | $albumsJSON[$i] = json_decode($oneAlbum, true); | 64 | // une case supplémentaire contient le "albumCode" |
67 | $annees[$i] = $albumsJSON[$i][1]; | 65 | $albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename']; |
68 | 66 | ||
69 | // ajout des noms des fichiers JSON | 67 | $annees[$i] = $albumsJSON[$i][1]; |
70 | $albumsJSON[$i][3] = $albumNamesJSON[$i]; | ||
71 | |||
72 | $i++; | ||
73 | } | 68 | } |
69 | |||
74 | // tri d'un tableau multidimensionnel | 70 | // tri d'un tableau multidimensionnel |
75 | array_multisort($annees, $albumsJSON); | 71 | array_multisort($annees, $albumsJSON); |
76 | 72 | ||
77 | // on passe maintenant au contenu HTML | ||
78 | $AllAlbums->format = 'html'; | ||
79 | $AllAlbums->makeFileList(); | ||
80 | $albumNamesHTML = $AllAlbums->fileList; | ||
81 | |||
82 | // lien vers le HTML ou ancre? | 73 | // lien vers le HTML ou ancre? |
83 | // pour chaque album, détecter le fichier html | 74 | $lienAlbum = []; |
84 | // si non, ne fournir qu'un lien d'ancre pour la liste d'album | ||
85 | $i = 0; | ||
86 | $avecLien = []; | 75 | $avecLien = []; |
87 | $linkDiscoChrono = []; | 76 | $linkDiscoChrono = []; |
88 | foreach($albumsJSON as $oneAlbum) | 77 | for($i = 0; $i < count($albumsJSON); $i++) |
89 | { | 78 | { |
90 | // nom sans extension | 79 | // cas particulier où le dossier "html" est vide |
91 | $chemin = pathinfo($oneAlbum[3]); | 80 | if(!empty($Albums->fileList)) |
92 | $nomJSONsansExt = $chemin['filename']; | ||
93 | |||
94 | // au cas où la discographie ne contient aucun html | ||
95 | if(!empty($albumNamesHTML)) | ||
96 | { | 81 | { |
97 | if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) | 82 | if(file_exists('data/discographie/html/' . $albumsJSON[$i][3] . '.html')) |
98 | { | 83 | { |
99 | $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; | 84 | $lienAlbum[$i] = 'page=album&album_name=' . $albumsJSON[$i][0] . '&album_code=' . $albumsJSON[$i][3]; |
100 | $avecLien[$i] = true; | 85 | $avecLien[$i] = true; |
101 | $linkDiscoChrono[$i] = 'linkChrono'; // css | 86 | $linkDiscoChrono[$i] = 'linkChrono'; // css |
102 | } | 87 | } |
103 | else | 88 | else |
104 | { | 89 | { |
105 | $lienAlbum[$i] = 'discographie#' . $albumsJSON[$i][0]; | 90 | $lienAlbum[$i] = 'page=discographie#' . $albumsJSON[$i][0]; |
106 | $avecLien[$i] = false; | 91 | $avecLien[$i] = false; |
107 | $linkDiscoChrono[$i] = 'noLinkChrono'; // css | 92 | $linkDiscoChrono[$i] = 'noLinkChrono'; // css |
108 | } | 93 | } |
109 | $i++; | 94 | $lienBoutonModif[$i] = 'page=discographie&action=edition&album_code=' . $albumsJSON[$i][3]; |
110 | } | 95 | } |
111 | } | 96 | } |
112 | 97 | ||
@@ -122,7 +107,7 @@ function album($albumCode, $albumName) | |||
122 | $page_actuelle = 'discographie'; | 107 | $page_actuelle = 'discographie'; |
123 | $title = $albumName; | 108 | $title = $albumName; |
124 | 109 | ||
125 | $album = Album::readOneAlbum($albumCode); // simple, efficace | 110 | $album = Album::readOneHTML($albumCode); // simple, efficace |
126 | 111 | ||
127 | // variables $css, $header et $content | 112 | // variables $css, $header et $content |
128 | require('view/album.php'); | 113 | require('view/album.php'); |