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 | |
parent | b97a68343ec5c4ff1fae25ff5dc41f1a2ce6a17f (diff) | |
download | melaine-29df6f1362745eabf4fbcaedf309eb63795152fa.zip |
discographie
-rw-r--r-- | controller/admin.php | 92 | ||||
-rw-r--r-- | controller/ckeditor.php | 63 | ||||
-rw-r--r-- | controller/visitor.php | 55 | ||||
-rw-r--r-- | index.php | 39 | ||||
-rw-r--r-- | lisez-moi.txt | 11 | ||||
-rw-r--r-- | model/Album.php | 73 | ||||
-rw-r--r-- | model/Image.php | 16 | ||||
-rw-r--r-- | model/Page.php | 15 | ||||
-rw-r--r-- | view/discographie.php | 48 | ||||
-rw-r--r-- | view/template-formulaires.php | 10 |
10 files changed, 235 insertions, 187 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'); |
@@ -47,6 +47,12 @@ | |||
47 | // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery | 47 | // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery |
48 | session_start(); | 48 | session_start(); |
49 | 49 | ||
50 | if(!empty($_SESSION['erreur'])) | ||
51 | { | ||
52 | echo('<script>alert(\'' . $_SESSION['erreur'] . '\');</script>'); | ||
53 | unset($_SESSION['erreur']); | ||
54 | } | ||
55 | |||
50 | // au premier démarrage du site | 56 | // au premier démarrage du site |
51 | // l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici: | 57 | // l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici: |
52 | require('controller/installation.php'); | 58 | require('controller/installation.php'); |
@@ -58,8 +64,10 @@ installation(); | |||
58 | if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image') | 64 | if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image') |
59 | { | 65 | { |
60 | // et une backdoor de fermée! | 66 | // et une backdoor de fermée! |
61 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1 || !isset($_FILES['upload']) || empty($_FILES['upload'])) | 67 | if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1 |
68 | || !isset($_FILES['upload']) || empty($_FILES['upload'])) | ||
62 | { | 69 | { |
70 | // sans effet? | ||
63 | header('Location: index.php?erreur=image_ajax'); | 71 | header('Location: index.php?erreur=image_ajax'); |
64 | } | 72 | } |
65 | else | 73 | else |
@@ -90,9 +98,9 @@ if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 | |||
90 | } | 98 | } |
91 | 99 | ||
92 | // modification | 100 | // modification |
93 | if(isset($_SESSION['nomFichier'])) | 101 | if(isset($_SESSION['target'])) |
94 | { | 102 | { |
95 | submitCKeditor($_SESSION['nomFichier']); | 103 | submitCKeditor($_SESSION['target']); |
96 | } | 104 | } |
97 | // nouvel article | 105 | // nouvel article |
98 | else | 106 | else |
@@ -179,10 +187,8 @@ if(isset($_GET['page'])) | |||
179 | else | 187 | else |
180 | { | 188 | { |
181 | // par sécurité | 189 | // par sécurité |
182 | if(isset($_SESSION['nomFichier'])) | 190 | unset($_SESSION['nomFichier']); |
183 | { | 191 | |
184 | unset($_SESSION['nomFichier']); | ||
185 | } | ||
186 | melaineEdit(0, 0); | 192 | melaineEdit(0, 0); |
187 | } | 193 | } |
188 | } | 194 | } |
@@ -202,29 +208,24 @@ if(isset($_GET['page'])) | |||
202 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'edition') | 208 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'edition') |
203 | { | 209 | { |
204 | // modification | 210 | // modification |
205 | if(isset($_GET['album']) && is_numeric($_GET['album']) && $_GET['album'] > 0) | 211 | if(isset($_GET['album_code']) || !empty($_GET['album_code'])) |
206 | { | 212 | { |
207 | if(!isset($_GET['album_code'])) | 213 | discoEdit($_GET['album_code'], 0); |
208 | { | ||
209 | $_GET['album_code'] = ''; | ||
210 | } | ||
211 | discoEdit($_GET['album'], $_GET['album_code'], 0); | ||
212 | } | 214 | } |
213 | // nouvel article | 215 | // nouvel article |
214 | else | 216 | else |
215 | { | 217 | { |
216 | // par sécurité | 218 | // par sécurité |
217 | if(isset($_SESSION['nomFichier'])) | 219 | $_GET['album_code'] = ''; |
218 | { | 220 | unset($_SESSION['nomFichier']); |
219 | unset($_SESSION['nomFichier']); | 221 | |
220 | } | 222 | discoEdit('', 0); |
221 | discoEdit(0, '', 0); | ||
222 | } | 223 | } |
223 | } | 224 | } |
224 | // suppression | 225 | // suppression |
225 | else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression') | 226 | else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression') |
226 | { | 227 | { |
227 | discoEdit($_GET['album'], '', 1); | 228 | discoEdit($_GET['album_code'], 1); |
228 | } | 229 | } |
229 | else | 230 | else |
230 | { | 231 | { |
diff --git a/lisez-moi.txt b/lisez-moi.txt index f15c227..255b452 100644 --- a/lisez-moi.txt +++ b/lisez-moi.txt | |||
@@ -1,20 +1,20 @@ | |||
1 | Pré-requis: | 1 | Pré-requis: |
2 | 2 | ||
3 | - Un serveur apache avec PHP. | 3 | - Un serveur apache exécutant PHP. |
4 | - Le n'utilise pas de base de données mais un ensemble de fichiers HTML. | 4 | - Le n'utilise pas de base de données mais un ensemble de fichiers HTML. |
5 | - Le module GD de PHP qui est une dépendance du "kcfinder" (bibliothèque nécessaire à l'upload d'image dans le ckeditor). | 5 | - Le module GD de PHP pour créer des miniatures des photos (bande passante). |
6 | - La possibilité d'utiliser un fichier .htaccess pour la sécurité (du mot de passe admin en particulier). | 6 | - La possibilité d'utiliser un fichier .htaccess pour la sécurité (du mot de passe admin en particulier). |
7 | - L'admin du site (Melaine lui-même à priori) ne doit pas utiliser un navigateur trop vieux (pour le code javascript du ckeditor). | 7 | - Le responsable du site (Melaine) ne doit pas utiliser un navigateur trop vieux (ckeditor). |
8 | 8 | ||
9 | 9 | ||
10 | Informations: | 10 | Informations: |
11 | 11 | ||
12 | Le site n'utilise pas de base de données mais à la place un ensemble de fichiers. Le dossier data contient des dossiers "html" et "images". | 12 | Le site n'utilise pas de base de données mais à la place un ensemble de fichiers. Le dossier data contient des dossiers "html" et "images", ainsi qu'un dossier 'json'. |
13 | - Les premiers contiennent le texte sous forme de fichiers HTML. | 13 | - Les premiers contiennent le texte sous forme de fichiers HTML. |
14 | - Les seconds les images ainsi qu'un dossier "thumbnails" (chargement rapide des pages). | 14 | - Les seconds les images ainsi qu'un dossier "thumbnails" (chargement rapide des pages). |
15 | Le code suit une architecture modèle-vue-contrôleur, il n'utilise pas de framework. | 15 | Le code suit une architecture modèle-vue-contrôleur, il n'utilise pas de framework. |
16 | - Il n'est pas possible pour l'instant d'uploader du multimedia (son et video). Peut-être plus tard. | 16 | - Il n'est pas possible pour l'instant d'uploader du multimedia (son et video). Peut-être plus tard. |
17 | - La fonctionnalité d'embarquer du multimedia (mettre une video youtube dans la page) n'est pas prévue. | 17 | - Il n'est pas possible non plus d'embarquer du multimedia (son et vidéo hébergé ailleurs). Peut-être plus tard. |
18 | 18 | ||
19 | 19 | ||
20 | Installation: | 20 | Installation: |
@@ -24,6 +24,7 @@ Installation: | |||
24 | chmod -R 777 data | 24 | chmod -R 777 data |
25 | Le php se chargera des ajustements (supprimer l'autorisation des fichiers en exécution, permettre à l'utilisateur de manipuler les nouveaux fichiers sans accès root, créer un backup des données). | 25 | Le php se chargera des ajustements (supprimer l'autorisation des fichiers en exécution, permettre à l'utilisateur de manipuler les nouveaux fichiers sans accès root, créer un backup des données). |
26 | - Autoriser le .htaccess (normalement par une manipulation dans le fichier /etc/php/php.ini du serveur) | 26 | - Autoriser le .htaccess (normalement par une manipulation dans le fichier /etc/php/php.ini du serveur) |
27 | - Augmenter la taille maximale des fichiers (par défaut de 2Mo) pouvant être téléchargés dans le php.ini, ainsi que dans le fichier model/Image.php. Une taille max de 5Mo est très raisonnable. | ||
27 | 28 | ||
28 | 29 | ||
29 | Redirections: | 30 | Redirections: |
diff --git a/model/Album.php b/model/Album.php index 2254c10..1631c46 100644 --- a/model/Album.php +++ b/model/Album.php | |||
@@ -6,6 +6,7 @@ class Album extends Page // classe "objet" | |||
6 | public function __construct($page) | 6 | public function __construct($page) |
7 | { | 7 | { |
8 | $this->page = $page; | 8 | $this->page = $page; |
9 | $this->albumCode = ''; // désigne un fichier json et un html | ||
9 | $this->format = 'json'; // vaut 'html' dans la classe mère | 10 | $this->format = 'json'; // vaut 'html' dans la classe mère |
10 | $this->time = time(); | 11 | $this->time = time(); |
11 | } | 12 | } |
@@ -19,7 +20,7 @@ class Album extends Page // classe "objet" | |||
19 | // create | 20 | // create |
20 | public function createVignette($titre, $annee, $pochette) | 21 | public function createVignette($titre, $annee, $pochette) |
21 | { | 22 | { |
22 | $this->format = 'json'; | 23 | //$this->format = 'json'; |
23 | 24 | ||
24 | if($pochette != '') | 25 | if($pochette != '') |
25 | { | 26 | { |
@@ -28,7 +29,7 @@ class Album extends Page // classe "objet" | |||
28 | $Image = new Image(false); | 29 | $Image = new Image(false); |
29 | $Image->upload(); | 30 | $Image->upload(); |
30 | 31 | ||
31 | /*$erreur = $Image->getError(); | 32 | /*$erreur = $Image->erreur; |
32 | if(!empty($erreur)) | 33 | if(!empty($erreur)) |
33 | {}*/ | 34 | {}*/ |
34 | } | 35 | } |
@@ -41,18 +42,41 @@ class Album extends Page // classe "objet" | |||
41 | fputs($fichier, $albumJSON); | 42 | fputs($fichier, $albumJSON); |
42 | fclose($fichier); | 43 | fclose($fichier); |
43 | chmod($nom_fichier, 0666); | 44 | chmod($nom_fichier, 0666); |
45 | |||
46 | return($Image->erreur); | ||
44 | } | 47 | } |
45 | 48 | ||
46 | // read | 49 | // read |
47 | public function getVignette() | 50 | public function readAll() |
51 | { | ||
52 | // lecture des données | ||
53 | $albumsJSON = parent::readAll(); | ||
54 | |||
55 | // conversion des chaines JSON en tableaux: titre, année, pochette | ||
56 | for($i = 0; $i < count($albumsJSON); $i++) | ||
57 | { | ||
58 | $albumsJSON[$i] = json_decode($albumsJSON[$i], true); | ||
59 | } | ||
60 | |||
61 | return($albumsJSON); | ||
62 | } | ||
63 | |||
64 | public function getVignetteJSON() | ||
48 | { | 65 | { |
49 | return(file_get_contents($this->fileName)); | 66 | return(json_decode(file_get_contents('data/discographie/json/' . $this->albumCode . '.json'))); |
50 | } | 67 | } |
51 | 68 | ||
52 | // page de l'album | 69 | // page de l'album |
53 | public static function readOneAlbum($albumCode) | 70 | public static function readOneHTML($albumCode) |
54 | { | 71 | { |
55 | return(file_get_contents('data/discographie/html/' . $albumCode . '.html')); | 72 | if(file_exists('data/discographie/html/' . $albumCode . '.html')) |
73 | { | ||
74 | return(file_get_contents('data/discographie/html/' . $albumCode . '.html')); | ||
75 | } | ||
76 | else | ||
77 | { | ||
78 | return(''); | ||
79 | } | ||
56 | } | 80 | } |
57 | 81 | ||
58 | // pour afficher des dates | 82 | // pour afficher des dates |
@@ -64,12 +88,43 @@ class Album extends Page // classe "objet" | |||
64 | }*/ | 88 | }*/ |
65 | 89 | ||
66 | // update | 90 | // update |
67 | public function updateVignette() | 91 | public function updateVignetteJSON($titre, $annee, $pochette) |
68 | {} | 92 | { |
93 | // garder l'ancienne image | ||
94 | $albumJSON = self::getVignetteJSON(); | ||
95 | |||
96 | if($pochette == '') | ||
97 | { | ||
98 | $pochette = $albumJSON[2]; | ||
99 | } | ||
100 | else | ||
101 | { | ||
102 | // télécharger la pochette | ||
103 | require('model/Image.php'); | ||
104 | $Image = new Image(false); | ||
105 | $Image->upload(); | ||
106 | } | ||
107 | |||
108 | $albumJSON = json_encode([$titre, $annee, $pochette]); | ||
109 | |||
110 | // écriture | ||
111 | $nom_fichier = 'data/discographie/json/' . $this->albumCode . '.json'; | ||
112 | $fichier = fopen($nom_fichier, 'w+'); // w pour créer ou écraser | ||
113 | fputs($fichier, $albumJSON); | ||
114 | fclose($fichier); | ||
115 | chmod($nom_fichier, 0666); | ||
116 | |||
117 | return($Image->erreur); | ||
118 | } | ||
69 | 119 | ||
70 | // delete | 120 | // delete |
71 | public function delete() | 121 | public function delete() |
72 | { | 122 | { |
73 | unlink($this->fileName); | 123 | unlink('data/' . $this->page . '/' . $this->format . '/' . $this->albumCode . '.json'); |
124 | |||
125 | if(file_exists('data/' . $this->page . '/html/' . $this->albumCode . '.html')); | ||
126 | { | ||
127 | unlink('data/' . $this->page . '/html/' . $this->albumCode . '.html'); | ||
128 | } | ||
74 | } | 129 | } |
75 | } | 130 | } |
diff --git a/model/Image.php b/model/Image.php index efd75cc..51d2fa4 100644 --- a/model/Image.php +++ b/model/Image.php | |||
@@ -3,10 +3,10 @@ | |||
3 | 3 | ||
4 | class Image | 4 | class Image |
5 | { | 5 | { |
6 | private const MAX_WEIGHT = 2000000; // taille max des images (par défaut 2Mo dans php.ini) | 6 | private const MAX_WEIGHT = 2000000; // à adapter au php.ini |
7 | private $page; | 7 | private $page; |
8 | private $ajax = false; | 8 | private $ajax = false; // vaut true avec le ckeditor |
9 | public $erreur = ''; | 9 | public $erreur; |
10 | 10 | ||
11 | public function __construct($ajax) | 11 | public function __construct($ajax) |
12 | { | 12 | { |
@@ -37,19 +37,21 @@ class Image | |||
37 | } | 37 | } |
38 | else{$this->erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff<br />le format svg n\'est pas supporté';} | 38 | else{$this->erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff<br />le format svg n\'est pas supporté';} |
39 | } | 39 | } |
40 | else{$this->erreur = 'fichier trop lourd';} | 40 | else |
41 | { | ||
42 | $this->erreur = 'erreur du serveur: le fichier téléchargé est trop lourd, poids max = ' . self::MAX_WEIGHT . ' octets'; | ||
43 | } | ||
41 | } | 44 | } |
42 | else | 45 | else |
43 | { | 46 | { |
44 | $this->erreur = $_FILES['upload']['error']; | 47 | $this->erreur = 'erreur du serveur: le fichier téléchargé est trop lourd, poids max = ' . self::MAX_WEIGHT . ' octets'; |
45 | } | 48 | } |
46 | 49 | ||
47 | // retour des rêquetes AJAX | 50 | // retour des rêquetes AJAX |
48 | if($this->ajax) | 51 | if($this->ajax && empty($Image->erreur)) |
49 | { | 52 | { |
50 | // nouveau chemin à renvoyer en format json | 53 | // nouveau chemin à renvoyer en format json |
51 | $chemin = '{"url": "data/' . $this->page . '/images/' . $_FILES['upload']['name'] . '"}'; | 54 | $chemin = '{"url": "data/' . $this->page . '/images/' . $_FILES['upload']['name'] . '"}'; |
52 | //echo json_encode($chemin); | ||
53 | echo $chemin; | 55 | echo $chemin; |
54 | } | 56 | } |
55 | } | 57 | } |
diff --git a/model/Page.php b/model/Page.php index e03efe1..63730d8 100644 --- a/model/Page.php +++ b/model/Page.php | |||
@@ -13,10 +13,9 @@ class Page // classe "objet" | |||
13 | public $fileName = ''; // correspond à $_SESSION['nomFichier'] | 13 | public $fileName = ''; // correspond à $_SESSION['nomFichier'] |
14 | protected $time; // timestamp pour noms des fichiers créés | 14 | protected $time; // timestamp pour noms des fichiers créés |
15 | 15 | ||
16 | public function __construct($page, $format) | 16 | public function __construct($page) |
17 | { | 17 | { |
18 | $this->page = $page; | 18 | $this->page = $page; |
19 | $this->format = $format; | ||
20 | $this->time = time(); | 19 | $this->time = time(); |
21 | $this->makeFileList(); | 20 | $this->makeFileList(); |
22 | } | 21 | } |
@@ -39,6 +38,14 @@ class Page // classe "objet" | |||
39 | } | 38 | } |
40 | } | 39 | } |
41 | 40 | ||
41 | public function setFileName() | ||
42 | { | ||
43 | if(file_exists('data/' . $this->page . '/' . $this->format . '/' . $this->albumCode . '.' . $this->format)) | ||
44 | { | ||
45 | $this->fileName = 'data/' . $this->page . '/' . $this->format . '/' . $this->albumCode . '.' . $this->format; | ||
46 | } | ||
47 | } | ||
48 | |||
42 | // GET | 49 | // GET |
43 | 50 | ||
44 | // SET | 51 | // SET |
@@ -48,7 +55,7 @@ class Page // classe "objet" | |||
48 | // create | 55 | // create |
49 | public function create($content) | 56 | public function create($content) |
50 | { | 57 | { |
51 | $format = 'html'; | 58 | //$format = 'html'; |
52 | 59 | ||
53 | // nommer les fichiers avec le timestamp pour: | 60 | // nommer les fichiers avec le timestamp pour: |
54 | // - les trier par ordre chronologique | 61 | // - les trier par ordre chronologique |
@@ -65,7 +72,7 @@ class Page // classe "objet" | |||
65 | public function readAll() | 72 | public function readAll() |
66 | { | 73 | { |
67 | $i = 0; | 74 | $i = 0; |
68 | $articles = array(); | 75 | $articles = []; |
69 | foreach ($this->fileList as $oneFile) | 76 | foreach ($this->fileList as $oneFile) |
70 | { | 77 | { |
71 | $articles[$i] = file_get_contents($oneFile); | 78 | $articles[$i] = file_get_contents($oneFile); |
diff --git a/view/discographie.php b/view/discographie.php index 25b82e1..d9bc6be 100644 --- a/view/discographie.php +++ b/view/discographie.php | |||
@@ -49,16 +49,15 @@ ob_start(); | |||
49 | <div id="chronologie" > | 49 | <div id="chronologie" > |
50 | <!-- ajouter à chaque entrée une ancre et un lien soit vers l'ancre soit vers la page dédiée --> | 50 | <!-- ajouter à chaque entrée une ancre et un lien soit vers l'ancre soit vers la page dédiée --> |
51 | <?php | 51 | <?php |
52 | //$i = 0; | ||
53 | for($i = count($albumsJSON) - 1; $i >= 0; $i--) | 52 | for($i = count($albumsJSON) - 1; $i >= 0; $i--) |
53 | //for($i = 0; $i < count($albumsJSON); $i++) | ||
54 | //foreach($albumsJSON as $oneAlbum) | 54 | //foreach($albumsJSON as $oneAlbum) |
55 | { | 55 | { |
56 | // mettre une adresse lorsqu'un fichier html existe | 56 | // menu dessous la mouette |
57 | // si il n'existe pas, mettre une ancre vers l'endroit sur la page | 57 | // comporte un lien si fichier html existe, sinon une ancre |
58 | ?> | 58 | ?> |
59 | <p><a class="<?= $linkDiscoChrono[$i] ?>" href="index.php?page=<?= $lienAlbum[$i] ?>" ><?= $albumsJSON[$i][1] ?> <?= $albumsJSON[$i][0] ?></a></p> | 59 | <p><a class="<?= $linkDiscoChrono[$i] ?>" href="index.php?<?= $lienAlbum[$i] ?>" ><?= $albumsJSON[$i][1] ?> - <?= $albumsJSON[$i][0] ?></a></p> |
60 | <?php | 60 | <?php |
61 | //$i++; | ||
62 | } | 61 | } |
63 | ?> | 62 | ?> |
64 | </div> | 63 | </div> |
@@ -66,9 +65,10 @@ for($i = count($albumsJSON) - 1; $i >= 0; $i--) | |||
66 | </aside> | 65 | </aside> |
67 | <section> | 66 | <section> |
68 | <?php | 67 | <?php |
68 | // éditeur ou bouton "Nouvel album" | ||
69 | if($_SESSION['admin'] == 1) | 69 | if($_SESSION['admin'] == 1) |
70 | { | 70 | { |
71 | if(isset($_GET['action']) && $_GET['action'] == 'edition' && !isset($_GET['album'])) | 71 | if(isset($_GET['action']) && $_GET['action'] == 'edition' && $albumCode == '') |
72 | { | 72 | { |
73 | ?> | 73 | ?> |
74 | <h3>Ajouter un album</h3> | 74 | <h3>Ajouter un album</h3> |
@@ -88,31 +88,36 @@ if($_SESSION['admin'] == 1) | |||
88 | } | 88 | } |
89 | 89 | ||
90 | // tableau des albums | 90 | // tableau des albums |
91 | //$i = count($albumsJSON); | 91 | for($i = count($albumsJSON) - 1; $i >= 0; $i--) |
92 | $i = 0; | 92 | //for($i = 0; $i < count($albumsJSON); $i++) |
93 | //for($i = count($albumsJSON) - 1; $i >= 0; $i--) | ||
94 | foreach($albumsJSON as $oneAlbum) | ||
95 | { | 93 | { |
96 | //$i--; | 94 | // formulaires et éditeur |
97 | // modification | 95 | // comparer le GET avec $albumsJSON[3] |
98 | if(false) | 96 | if(isset($_GET['action']) && $_GET['action'] == 'edition' |
99 | {} | 97 | && $albumsJSON[$i][3] == $_GET['album_code']) |
98 | { | ||
99 | ?> | ||
100 | <h3>Modifier un album</h3> | ||
101 | <?= $editeurHTML ?> | ||
102 | <?php | ||
103 | } | ||
104 | // affichage normal | ||
100 | else | 105 | else |
101 | { | 106 | { |
102 | // mettre une adresse lorsqu'un fichier html existe | ||
103 | ?> | 107 | ?> |
104 | <article id="<?= $oneAlbum[0] ?>" > | 108 | <article id="<?= $albumsJSON[$i][0] ?>" > |
105 | <?php | 109 | <?php |
110 | // mettre une adresse lorsqu'un fichier html existe | ||
106 | if($avecLien[$i]) | 111 | if($avecLien[$i]) |
107 | { | 112 | { |
108 | ?> | 113 | ?> |
109 | <a href="index.php?page=<?= $lienAlbum[$i] ?>" > | 114 | <a href="index.php?<?= $lienAlbum[$i] ?>" > |
110 | <?php | 115 | <?php |
111 | } | 116 | } |
112 | ?> | 117 | ?> |
113 | <figure> | 118 | <figure> |
114 | <img class="vignette" src="data/discographie/images/<?= $oneAlbum[2] ?>" alt="" > | 119 | <img class="vignette" src="data/discographie/images/<?= $albumsJSON[$i][2] ?>" alt="" > |
115 | <figcaption><?= $oneAlbum[0] ?><br><?= $oneAlbum[1] ?></figcaption> | 120 | <figcaption><?= $albumsJSON[$i][0] ?><br><?= $albumsJSON[$i][1] ?></figcaption> |
116 | </figure> | 121 | </figure> |
117 | <?php | 122 | <?php |
118 | if($avecLien[$i]) | 123 | if($avecLien[$i]) |
@@ -126,11 +131,11 @@ foreach($albumsJSON as $oneAlbum) | |||
126 | { | 131 | { |
127 | ?> | 132 | ?> |
128 | <p> | 133 | <p> |
129 | <a href="index.php?page=<?= $lienBoutonModif[$i] ?>" > | 134 | <a href="index.php?<?= $lienBoutonModif[$i] ?>" > |
130 | Modifier cet article | 135 | Modifier cet article |
131 | </a> | 136 | </a> |
132 | <!-- un espace --> | 137 | <!-- un espace --> |
133 | <a href="index.php?page=discographie&action=suppression&album=<?= $i ?>" onclick="confirmerSuppression()" > | 138 | <a href="index.php?page=discographie&action=suppression&album_code=<?= $albumsJSON[$i][3] ?>" onclick="confirmerSuppression()" > |
134 | Supprimer cet article | 139 | Supprimer cet article |
135 | </a> | 140 | </a> |
136 | </p> | 141 | </p> |
@@ -144,7 +149,6 @@ foreach($albumsJSON as $oneAlbum) | |||
144 | if($_SESSION['admin'] == 1) | 149 | if($_SESSION['admin'] == 1) |
145 | {} | 150 | {} |
146 | } | 151 | } |
147 | $i++; | ||
148 | } | 152 | } |
149 | ?> | 153 | ?> |
150 | </section> | 154 | </section> |
diff --git a/view/template-formulaires.php b/view/template-formulaires.php index 391f729..e864719 100644 --- a/view/template-formulaires.php +++ b/view/template-formulaires.php | |||
@@ -18,14 +18,16 @@ | |||
18 | 18 | ||
19 | 19 | ||
20 | // variable $inputsAlbum (page discographie uniquement) | 20 | // variable $inputsAlbum (page discographie uniquement) |
21 | // note: on ne peut préremplir le champ input texte | ||
22 | // solution: on affiche le nom du fichier, si l'utilisateur en télécharge un autre, on le remplace | ||
21 | ob_start(); | 23 | ob_start(); |
22 | ?> | 24 | ?> |
23 | <p><i>Infos qui seront affichées sur cette page:</i></p> | 25 | <p><i>Infos qui seront affichées sur cette page:</i></p> |
24 | <label for="titre" >Titre</label> | 26 | <label for="titre" >Titre</label> |
25 | <input type="text" name="titre" required ><br /> | 27 | <input type="text" name="titre" value="<?= $vignette[0] ?>" required ><br /> |
26 | <label for="annee" >Année</label> | 28 | <label for="annee" >Année</label> |
27 | <input type="text" name="annee" required ><br /> | 29 | <input type="text" name="annee" value="<?= $vignette[1] ?>" required ><br /> |
28 | <label for="pochette" >Pochette du disque (jpg ou png)</label> | 30 | <label for="pochette" >Pochette du disque (jpg ou png) : <?= $vignette[2] ?></label><br/> |
29 | <input type="file" name="upload" > | 31 | <input type="file" name="upload" > |
30 | <br /><br /> | 32 | <br /><br /> |
31 | <?php | 33 | <?php |
@@ -37,7 +39,7 @@ ob_start(); | |||
37 | ?> | 39 | ?> |
38 | 40 | ||
39 | <div class="conteneur_article" > | 41 | <div class="conteneur_article" > |
40 | <form action="index.php?page=<?= $page_actuelle ?>&article=<?= $numArticle ?>&action=submit" method="post" enctype="multipart/form-data" > | 42 | <form action="index.php?page=<?= $page_actuelle ?>&article=<?= $album_code ?>&action=submit" method="post" enctype="multipart/form-data" > |
41 | <?php | 43 | <?php |
42 | if($page_actuelle == 'discographie') | 44 | if($page_actuelle == 'discographie') |
43 | { | 45 | { |