summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2021-11-29 03:25:19 +0100
committerpolo <ordipolo@gmx.fr>2021-11-29 03:25:19 +0100
commit29df6f1362745eabf4fbcaedf309eb63795152fa (patch)
tree8c2f4839c119db193eca4f35aeac96356a8ef439 /controller
parentb97a68343ec5c4ff1fae25ff5dc41f1a2ce6a17f (diff)
downloadmelaine-29df6f1362745eabf4fbcaedf309eb63795152fa.zip
discographie
Diffstat (limited to 'controller')
-rw-r--r--controller/admin.php92
-rw-r--r--controller/ckeditor.php63
-rw-r--r--controller/visitor.php55
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
7function melaineEdit($numArticle, $suppression) 7function 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
64function discoEdit($numArticle, $albumCode, $suppression) 64function 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
10function preparationCKeditor($numArticle, $texte) 10function 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']
44function submitCKeditor($nomFichier) 36function 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
7function accueil() 7function 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');