summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2023-03-03 23:44:43 +0100
committerpolo <ordipolo@gmx.fr>2023-03-03 23:44:43 +0100
commitc0b176ae142624d6a6daa0f65ea6fead448b8b47 (patch)
treee06445897db82e0f3cddd13bb2a67860fcf9fc3c
parenta1a9c5d80d800f6c38b900c66c77db05801a6f1d (diff)
downloadmelaine-c0b176ae142624d6a6daa0f65ea6fead448b8b47.zip
inversion de positions
-rw-r--r--controller/admin.php34
-rw-r--r--controller/ajax.php46
-rw-r--r--controller/installation.php24
-rw-r--r--controller/password.php2
-rw-r--r--controller/visitor.php2
-rw-r--r--index.php77
-rw-r--r--lib/ckeditor5/config online builder.pngbin0 -> 33029 bytes
-rw-r--r--model/Article.php102
-rw-r--r--public/css/discographie.css11
-rw-r--r--public/css/main.css (renamed from public/css/accueil.css)13
-rw-r--r--public/css/menu.css4
-rw-r--r--public/css/pages_articles_simples.css8
-rw-r--r--public/icone_descendre.pngbin0 -> 8648 bytes
-rw-r--r--public/icone_flèche.xcfbin0 -> 6734 bytes
-rw-r--r--public/icone_monter.pngbin0 -> 8655 bytes
-rw-r--r--public/inversion.js16
-rw-r--r--view/articlesContent.php15
-rw-r--r--view/backup.php6
-rw-r--r--view/discographie.php7
-rw-r--r--view/pageArticlesSimples.php4
-rw-r--r--view/password.php2
-rw-r--r--view/template.php2
22 files changed, 312 insertions, 63 deletions
diff --git a/controller/admin.php b/controller/admin.php
index 93d1900..845fab1 100644
--- a/controller/admin.php
+++ b/controller/admin.php
@@ -33,16 +33,14 @@ function pageArticlesSimplesAdmin(string $page, string $title, string $headerPai
33 $Articles->fileCode = $fileCode; 33 $Articles->fileCode = $fileCode;
34 $_SESSION['target'] = $Articles->fileCode; 34 $_SESSION['target'] = $Articles->fileCode;
35 35
36 // suppression
37 if($suppression) 36 if($suppression)
38 { 37 {
39 $Articles->delete(); 38 $Articles->delete();
40 39
41 // redirection immédiate avant affichage 40 // c'est fait, on recharge
42 header('Location: index.php?page=' . $page); 41 header('Location: index.php?page=' . $page);
43 exit(); 42 exit();
44 } 43 }
45 // modification
46 else 44 else
47 { 45 {
48 $title = "Modifier un article"; 46 $title = "Modifier un article";
@@ -91,7 +89,7 @@ function pageArticlesSimplesAdmin(string $page, string $title, string $headerPai
91} 89}
92 90
93// un article (= actualité) 91// un article (= actualité)
94function menuEdit($fileCode, $suppression) 92function menuEdit($fileCode, int $suppression)
95{ 93{
96 $page = "menu"; 94 $page = "menu";
97 $title = "Melaine Favennec - menu BD"; 95 $title = "Melaine Favennec - menu BD";
@@ -100,56 +98,56 @@ function menuEdit($fileCode, $suppression)
100} 98}
101 99
102// plusieurs articles 100// plusieurs articles
103function melaineEdit($fileCode, $suppression) 101function melaineEdit($fileCode, int $suppression)
104{ 102{
105 $page = "melaine"; 103 $page = "melaine";
106 $title = "Mais qui est Melaine Favennec?"; 104 $title = "Mais qui est Melaine Favennec?";
107 $headerPaintedTitle = 'Melaine Favennec'; 105 $headerPaintedTitle = 'Melaine Favennec';
108 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); 106 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
109} 107}
110function musiqueEdit($fileCode, $suppression) 108function musiqueEdit($fileCode, int $suppression)
111{ 109{
112 $page = "musique"; 110 $page = "musique";
113 $title = "Musique"; 111 $title = "Musique";
114 $headerPaintedTitle = 'Musique'; 112 $headerPaintedTitle = 'Musique';
115 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); 113 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
116} 114}
117function presseEdit($fileCode, $suppression) 115function presseEdit($fileCode, int $suppression)
118{ 116{
119 $page = "presse"; 117 $page = "presse";
120 $title = "La presse"; 118 $title = "La presse";
121 $headerPaintedTitle = 'La Presse'; 119 $headerPaintedTitle = 'La Presse';
122 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); 120 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
123} 121}
124function livresEdit($fileCode, $suppression) 122function livresEdit($fileCode, int $suppression)
125{ 123{
126 $page = "livres"; 124 $page = "livres";
127 $title = "Livres"; 125 $title = "Livres";
128 $headerPaintedTitle = 'Dans les livres'; 126 $headerPaintedTitle = 'Dans les livres';
129 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); 127 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
130} 128}
131function jaimeEdit($fileCode, $suppression) 129function jaimeEdit($fileCode, int $suppression)
132{ 130{
133 $page = "jaime"; 131 $page = "jaime";
134 $title = "J'aime"; 132 $title = "J'aime";
135 $headerPaintedTitle = 'J\'aime'; 133 $headerPaintedTitle = 'J\'aime';
136 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); 134 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
137} 135}
138function peintureEdit($fileCode, $suppression) 136function peintureEdit($fileCode, int $suppression)
139{ 137{
140 $page = "peinture"; 138 $page = "peinture";
141 $title = "peinture"; 139 $title = "peinture";
142 $headerPaintedTitle = 'Celtic Boats'; 140 $headerPaintedTitle = 'Celtic Boats';
143 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); 141 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
144} 142}
145function archivesEdit($fileCode, $suppression) 143function archivesEdit($fileCode, int $suppression)
146{ 144{
147 $page = "archives"; 145 $page = "archives";
148 $title = "Archives"; 146 $title = "Archives";
149 $headerPaintedTitle = 'Archives'; 147 $headerPaintedTitle = 'Archives';
150 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); 148 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
151} 149}
152function legalEdit($fileCode, $suppression) 150function legalEdit($fileCode, int $suppression)
153{ 151{
154 $page = "legal"; 152 $page = "legal";
155 $title = "Mentions légales"; 153 $title = "Mentions légales";
@@ -159,7 +157,7 @@ function legalEdit($fileCode, $suppression)
159 157
160 158
161// page plus complexe que les autres 159// page plus complexe que les autres
162function discoEdit($fileCode, $suppression) 160function discoEdit($fileCode, int $suppression)
163{ 161{
164 $page = "discographie"; 162 $page = "discographie";
165 $title = "Discographie"; 163 $title = "Discographie";
@@ -270,3 +268,13 @@ function discoEdit($fileCode, $suppression)
270 // fin de l'assemblage 268 // fin de l'assemblage
271 require('view/template.php'); 269 require('view/template.php');
272} 270}
271
272
273// version sans JS (l'autre est dans ajax.php)
274function inversionPositions(string $page, $fileCode, string $class, int $direction)
275{
276 $Object = new $class($page);
277 $Object->fileCode = $fileCode;
278 // direction: 1 = monter, -1 = descendre
279 $Object->inversionPositions($direction);
280} \ No newline at end of file
diff --git a/controller/ajax.php b/controller/ajax.php
index 24710d8..188b01f 100644
--- a/controller/ajax.php
+++ b/controller/ajax.php
@@ -1,7 +1,9 @@
1<?php 1<?php
2// controller/ajax.php 2// controller/ajax.php
3 3//
4// traitement des requêtes AJAX 4// traitement des requêtes AJAX
5
6
5// -> insertion d'une image dans l'éditeur 7// -> insertion d'une image dans l'éditeur
6if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image') 8if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image')
7{ 9{
@@ -30,6 +32,48 @@ if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_
30} 32}
31 33
32 34
35// inversion des positions de deux éléments d'une page
36/*if(isset($_GET['action']) && isset($_GET['page']) && ($_GET['action'] == 'monter' || $_GET['action'] == 'descendre') && isset($_GET['file_code']) && !empty($_GET['file_code']))
37{
38 // sécurité !!
39 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
40 {
41 header('Location: index.php?erreur=interdit');
42 }
43 else
44 {
45 require('controller/admin.php');
46 require('model/Article.php');
47
48 $pagesArticlesSimples = ['menu', 'melaine', 'musique', 'presse', 'livres', 'jaime', 'peinture', 'archives', 'legal'];
49 $sens = 0;
50
51 if($_GET['action'] == 'monter')
52 {
53 $sens = 1;
54 }
55 if($_GET['action'] == 'descendre')
56 {
57 $sens = 0;
58 }
59
60 if(in_array($_GET['page'], $pagesArticlesSimples))
61 {
62 // 1 pour monter
63 inversionPositions($_GET['page'], $_GET['file_code'], 'Article', $sens);
64 }
65 elseif($_GET['page'] == 'discographie')
66 {
67 require('model/Album.php');
68
69 // 1 pour monter
70 inversionPositions($_GET['page'], $_GET['file_code'], 'Album', $sens);
71 }
72 }
73 exit(); // stop !!
74}*/
75
76
33// page restauration quand le fichier zip est lourd 77// page restauration quand le fichier zip est lourd
34// -> input file onchange 78// -> input file onchange
35if(isset($_GET['action']) && $_GET['action'] == 'restauration' 79if(isset($_GET['action']) && $_GET['action'] == 'restauration'
diff --git a/controller/installation.php b/controller/installation.php
index 5aa5ac9..2e4e1c3 100644
--- a/controller/installation.php
+++ b/controller/installation.php
@@ -32,8 +32,8 @@ function installation()
32 // - créer le dossier data à la racine du site 32 // - créer le dossier data à la racine du site
33 // - lui donner les droits du dossier data pour 777 33 // - lui donner les droits du dossier data pour 777
34 34
35 // valeur en octal 35 // droits en octal
36 $droitsDossiers = 0777; // mettre 0755 en production 36 $droitsDossiers = 0777;
37 $droitsFichiers = 0666; 37 $droitsFichiers = 0666;
38 38
39 if(!file_exists('data') && !mkdir('data')) 39 if(!file_exists('data') && !mkdir('data'))
@@ -68,16 +68,22 @@ function installation()
68 { 68 {
69 createIndexPHP('data/' . $page . '/index.php', $droitsFichiers); 69 createIndexPHP('data/' . $page . '/index.php', $droitsFichiers);
70 } 70 }
71 foreach ($sousDossiers as $dossier) 71 if(!file_exists('data/' . $page . '/positions.json'))
72 { 72 {
73 if(!file_exists('data/' . $page . '/' . $dossier)) 73 // création de fichiers VIDES (gestion par le modèle)
74 touch('data/' . $page . '/positions.json');
75 chmod('data/' . $page . '/positions.json', $droitsFichiers);
76 }
77 foreach ($sousDossiers as $sousDossier)
78 {
79 if(!file_exists('data/' . $page . '/' . $sousDossier))
74 { 80 {
75 mkdir('data/' . $page . '/' . $dossier); 81 mkdir('data/' . $page . '/' . $sousDossier);
76 chmod('data/' . $page . '/' . $dossier, $droitsDossiers); 82 chmod('data/' . $page . '/' . $sousDossier, $droitsDossiers);
77 } 83 }
78 if(!file_exists('data/' . $page . '/' . $dossier . '/index.php')) 84 if(!file_exists('data/' . $page . '/' . $sousDossier . '/index.php'))
79 { 85 {
80 createIndexPHP('data/' . $page . '/' . $dossier . '/index.php', $droitsFichiers); 86 createIndexPHP('data/' . $page . '/' . $sousDossier . '/index.php', $droitsFichiers);
81 } 87 }
82 } 88 }
83 // if(!file_exists('data/' . $page . '/multimedia')) 89 // if(!file_exists('data/' . $page . '/multimedia'))
@@ -87,7 +93,7 @@ function installation()
87 // } 93 // }
88 } 94 }
89 95
90 // dossier supplémentaire dans discographie 96 // dossier "json" dans discographie
91 if(!file_exists('data/discographie/json')) 97 if(!file_exists('data/discographie/json'))
92 { 98 {
93 mkdir('data/discographie/json'); 99 mkdir('data/discographie/json');
diff --git a/controller/password.php b/controller/password.php
index 9d9b45b..efc8975 100644
--- a/controller/password.php
+++ b/controller/password.php
@@ -1,7 +1,7 @@
1<?php 1<?php
2// controller/password.php 2// controller/password.php
3 3
4// fonction exécutée à l'ouverture de chaque page 4// exécutée dans installation.php à l'ouverture de chaque page
5function existPassword() 5function existPassword()
6{ 6{
7 // création du fichier 7 // création du fichier
diff --git a/controller/visitor.php b/controller/visitor.php
index e0cd7fc..d03197d 100644
--- a/controller/visitor.php
+++ b/controller/visitor.php
@@ -32,8 +32,8 @@ function pageArticlesSimplesVisitor(string $page, string $title, string $headerP
32 { 32 {
33 // données dans $Articles->fileList['content'] 33 // données dans $Articles->fileList['content']
34 $Articles->readAll(); 34 $Articles->readAll();
35 // lourd?
35 $Articles->fileList = array_reverse($Articles->fileList); 36 $Articles->fileList = array_reverse($Articles->fileList);
36 //var_dump($Articles->fileList[0]);
37 } 37 }
38 38
39 // Assemblage 39 // Assemblage
diff --git a/index.php b/index.php
index 87c020e..66b2f89 100644
--- a/index.php
+++ b/index.php
@@ -17,18 +17,17 @@ if(!empty($_SESSION['erreur']))
17// variables globales, dépendances et config par l'utilisateur 17// variables globales, dépendances et config par l'utilisateur
18require('controller/config.php'); 18require('controller/config.php');
19 19
20// au premier démarrage du site (création du dossier "data")
21require('controller/installation.php');
22
23// penser à faire qu'on ne l'ouvre pas tout le temps
24// -> présence du data/password.txt? 20// -> présence du data/password.txt?
25require('controller/password.php'); 21require('controller/password.php');
26 22
23// au premier démarrage du site (création du dossier "data")
24require('controller/installation.php');
27installation(); 25installation();
28 26
29// traitement des requêtes AJAX 27// traitement des requêtes AJAX, execute exit() à la fin
30require('controller/ajax.php'); 28require('controller/ajax.php');
31 29
30
32// traitement des POST du ckeditor 31// traitement des POST du ckeditor
33// la fonction submitCKeditor est "autonome", elle n'affiche rien puis redirige sans GET 32// la fonction submitCKeditor est "autonome", elle n'affiche rien puis redirige sans GET
34if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 33if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1
@@ -67,13 +66,7 @@ if(isset($_GET['action']) && isset($_GET['page']))
67 66
68 67
69 68
70// construction des pages
71
72// mode visiteur (sans l'éditeur)
73require('controller/visitor.php');
74
75// modèle 69// modèle
76//if(isset($_GET['page']) && $_GET['page'] != 'menu')
77if(isset($_GET['page'])) // utile? 70if(isset($_GET['page'])) // utile?
78{ 71{
79 require('model/Article.php'); 72 require('model/Article.php');
@@ -84,6 +77,11 @@ if(isset($_GET['page'])) // utile?
84} 77}
85 78
86 79
80
81// contrôleurs
82// mode visiteur (sans l'éditeur)
83require('controller/visitor.php');
84
87// contrôleur des pages en mode admin 85// contrôleur des pages en mode admin
88if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1) 86if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1)
89{ 87{
@@ -97,7 +95,8 @@ else
97} 95}
98 96
99 97
100// page du site demandée 98
99// traitements des GET (page du site et action souhaitée)
101if(isset($_GET['page'])) 100if(isset($_GET['page']))
102{ 101{
103 $pagesArticlesSimples = ['menu', 'melaine', 'musique', 'presse', 'livres', 'jaime', 'peinture', 'archives', 'legal']; 102 $pagesArticlesSimples = ['menu', 'melaine', 'musique', 'presse', 'livres', 'jaime', 'peinture', 'archives', 'legal'];
@@ -138,6 +137,33 @@ if(isset($_GET['page']))
138 $fonctionEdit('', 0); 137 $fonctionEdit('', 0);
139 } 138 }
140 } 139 }
140 // modification d'un positions.json (version sans JS)
141 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'monter')
142 {
143 if(isset($_GET['file_code']) && !empty($_GET['file_code']))
144 {
145 // 1 pour monter
146 inversionPositions($_GET['page'], $_GET['file_code'], 'Article', 1);
147 $fonctionVisitor();
148 }
149 else
150 {
151 $fonctionVisitor();
152 }
153 }
154 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'descendre')
155 {
156 if(isset($_GET['file_code']) && !empty($_GET['file_code']))
157 {
158 // -1 pour descendre
159 inversionPositions($_GET['page'], $_GET['file_code'], 'Article', -1);
160 $fonctionVisitor();
161 }
162 else
163 {
164 $fonctionVisitor();
165 }
166 }
141 // suppression 167 // suppression
142 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression') 168 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression')
143 { 169 {
@@ -171,6 +197,33 @@ if(isset($_GET['page']))
171 discoEdit('', 0); 197 discoEdit('', 0);
172 } 198 }
173 } 199 }
200 // modification d'un positions.json (version sans JS)
201 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'monter')
202 {
203 if(isset($_GET['file_code']) && !empty($_GET['file_code']))
204 {
205 // 1 pour monter
206 inversionPositions($_GET['page'], $_GET['file_code'], 'Album', 1);
207 discoVisitor();
208 }
209 else
210 {
211 discoVisitor();
212 }
213 }
214 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'descendre')
215 {
216 if(isset($_GET['file_code']) && !empty($_GET['file_code']))
217 {
218 // 0 pour descendre
219 inversionPositions($_GET['page'], $_GET['file_code'], 'Album', -1);
220 discoVisitor();
221 }
222 else
223 {
224 discoVisitor();
225 }
226 }
174 // suppression 227 // suppression
175 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression') 228 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression')
176 { 229 {
diff --git a/lib/ckeditor5/config online builder.png b/lib/ckeditor5/config online builder.png
new file mode 100644
index 0000000..77cab31
--- /dev/null
+++ b/lib/ckeditor5/config online builder.png
Binary files differ
diff --git a/model/Article.php b/model/Article.php
index d0fb019..f4fe65a 100644
--- a/model/Article.php
+++ b/model/Article.php
@@ -10,8 +10,9 @@ class Article
10{ 10{
11 // pour tous les articles 11 // pour tous les articles
12 public $page; // page et donc dossier concerné 12 public $page; // page et donc dossier concerné
13 public $format = 'html'; // vaut 'html' ou 'json' 13 public $format = 'html'; // 'html' ou 'json'
14 public $fileListCount; 14 public $fileListCount; // pour les boucles "for"
15 // pas de "foreach", on a besoin des compteurs $i
15 public $fileList; // = toutes les données 16 public $fileList; // = toutes les données
16 17
17 // pour un article (ou album) spécifique 18 // pour un article (ou album) spécifique
@@ -30,11 +31,17 @@ class Article
30 // noter que le chemin et l'extension ne varient pas 31 // noter que le chemin et l'extension ne varient pas
31 public function makeFileList() 32 public function makeFileList()
32 { 33 {
34 // noms des fichiers
33 // globbing = utiliser un pattern pour cibler des fichiers 35 // globbing = utiliser un pattern pour cibler des fichiers
34 $nameList = glob('data/' . $this->page . '/' . $this->format . '/*.' . $this->format); 36 $nameList = glob('data/' . $this->page . '/' . $this->format . '/*.' . $this->format);
35 37
36 $this->fileListCount = count($nameList); 38 $this->fileListCount = count($nameList);
37 39
40 // associations: fileCode => position
41 $positions = $this->readPositionsJSON();
42
43 // $this->fileList[]
44 $positionMax = 0;
38 for($i = 0; $i < $this->fileListCount; $i++) 45 for($i = 0; $i < $this->fileListCount; $i++)
39 { 46 {
40 $pathInfo = pathinfo($nameList[$i]); 47 $pathInfo = pathinfo($nameList[$i]);
@@ -45,9 +52,100 @@ class Article
45 'content' => '', 52 'content' => '',
46 //'date' => getdate() // peut-être utile plus tard 53 //'date' => getdate() // peut-être utile plus tard
47 ]; 54 ];
55
56 // récupération des positions disponibles
57 // celles inutilisées sont ignorées
58 // une case dans $positions: "1677796758" => 2
59 if(isset($positions[$fileCode]) && $positions[$fileCode] > 0)
60 {
61 $this->fileList[$i]['position'] = $positions[$fileCode];
62 $positionMax = max($positions[$fileCode], $positionMax);
63 }
64 else
65 {
66 $this->fileList[$i]['position'] = 0;
67 }
68 }
69 $this->updatePositionsJSON($positionMax);
70
71 // réordonner "fileList" par rapport aux positions
72 if(!empty($this->fileList))
73 {
74 $this->sortFileListByPositions();
75 }
76 }
77
78 private function readPositionsJSON() // retourne array ou NULL
79 {
80 if(file_exists('data/' . $this->page . '/positions.json'))
81 {
82 // "true" pour retourner un tableau et non un objet
83 $positions = json_decode(file_get_contents('data/' . $this->page . '/positions.json'), true);
84 }
85 return $positions;
86 }
87
88 private function updatePositionsJSON(int $positionMax = -1)
89 {
90 // créer les positions manquantes
91 $positions = [];
92 for($i = 0; $i < $this->fileListCount; $i++)
93 {
94 // fonction appelée par makeFileList()
95 if($positionMax >= 0)
96 {
97 if($this->fileList[$i]['position'] == 0)
98 {
99 $positionMax++;
100 $this->fileList[$i]['position'] = $positionMax;
101 }
102 }
103
104 // remplissage comme ceci: "1677796758" => 2
105 $positions[$this->fileList[$i]['fileCode']] = $this->fileList[$i]['position'];
106 }
107
108 file_put_contents('data/' . $this->page . '/positions.json', json_encode($positions));
109 }
110
111 private function sortFileListByPositions()
112 {
113 // contient les positions seules
114 $positions = array_column($this->fileList, 'position');
115
116 // magique!
117 array_multisort($positions, SORT_ASC, $this->fileList);
118 }
119
120 // pour modifier l'ordre des éléments de la page
121 // faire plus tard une version statique pour traitement AJAX
122 public function inversionPositions(int $direction)
123 {
124 for($i = 0; $i < $this->fileListCount; $i++)
125 {
126 if($this->fileList[$i]['fileCode'] == $this->fileCode)
127 {
128 // si direction vaut 1, inversion avec l'élément au dessus (puisqu'on les affiche dans l'ordre décroissant)
129 if(($direction === 1 || $direction === -1) &&
130 isset($this->fileList[$i + $direction]['position']))
131 {
132 $c = $this->fileList[$i]['position'];
133 $this->fileList[$i]['position'] = $this->fileList[$i + $direction]['position'];
134 $this->fileList[$i + $direction]['position'] = $c;
135
136 // sortie de la boucle
137 $i = $this->fileListCount;
138 }
139 else // inversion du premier avec le précédent ou du dernier avec le suivant
140 {}
141 }
48 } 142 }
143
144 // écriture du positions.json
145 $this->updatePositionsJSON();
49 } 146 }
50 147
148 // du code html pour utiliser les miniatures
51 private function makeHtmlMiniImages($content) 149 private function makeHtmlMiniImages($content)
52 { 150 {
53 // insérer -mini au nom du dossier et au fichier 151 // insérer -mini au nom du dossier et au fichier
diff --git a/public/css/discographie.css b/public/css/discographie.css
index 0362bb4..4d602fa 100644
--- a/public/css/discographie.css
+++ b/public/css/discographie.css
@@ -45,6 +45,7 @@ aside div
45 z-index: 1; /* placer le menu déroulant au dessus */ 45 z-index: 1; /* placer le menu déroulant au dessus */
46 /*background-color: #9fa8d0;*/ 46 /*background-color: #9fa8d0;*/
47 background-color: #a4afd4; 47 background-color: #a4afd4;
48 /*background-color: white;*/
48 border: 2px #3d4c9d solid; 49 border: 2px #3d4c9d solid;
49} 50}
50 51
@@ -60,6 +61,8 @@ aside div
60#chronologie p a:hover 61#chronologie p a:hover
61{ 62{
62 color: black; 63 color: black;
64 /*background-color: #a4afd4;*/
65 background-color: white;
63} 66}
64 67
65.linkChrono 68.linkChrono
@@ -115,7 +118,8 @@ input
115 padding-bottom: 20px; 118 padding-bottom: 20px;
116 border-bottom: 1px black solid; 119 border-bottom: 1px black solid;
117} 120}
118.boutonAlbum a 121/* mêmes règles que .boutonArticle dans main.css */
122.boutonAlbum span
119{ 123{
120 padding: 2px; 124 padding: 2px;
121 border: 4px black groove; 125 border: 4px black groove;
@@ -132,7 +136,6 @@ input
132article 136article
133{ 137{
134 margin: 5px 0px; 138 margin: 5px 0px;
135 width: 22%;
136 /*min-width: 300px;*/ 139 /*min-width: 300px;*/
137} 140}
138.articleAvecEditeur 141.articleAvecEditeur
@@ -230,6 +233,10 @@ a:hover figure figcaption
230 /* annuler le positionnement du contenu */ 233 /* annuler le positionnement du contenu */
231 margin-top: 55px; 234 margin-top: 55px;
232 } 235 }
236 article
237 {
238 width: 32%;
239 }
233} 240}
234 241
235@media screen and (max-width: 699px) 242@media screen and (max-width: 699px)
diff --git a/public/css/accueil.css b/public/css/main.css
index 2a42e29..77ab7ff 100644
--- a/public/css/accueil.css
+++ b/public/css/main.css
@@ -1,4 +1,4 @@
1/* public/accueil.css */ 1/* public/main.css */
2 2
3/*@font-face 3/*@font-face
4{ 4{
@@ -87,6 +87,11 @@ img
87 vertical-align: bottom; 87 vertical-align: bottom;
88} 88}
89 89
90.boutonArticle span
91{
92 padding: 2px;
93 border: 4px black groove;
94}
90.boutonSubmitEditeur 95.boutonSubmitEditeur
91{ 96{
92 margin-top: 5px; 97 margin-top: 5px;
@@ -111,6 +116,12 @@ article
111 font-size: 90%; 116 font-size: 90%;
112 margin: 5px 0; 117 margin: 5px 0;
113} 118}
119/* Eviter la superposition d’une entête fixe sur une ancre */
120article:target
121{
122 padding-top: 71px;
123 margin-top: -71px;
124}
114.articleAvecEditeur 125.articleAvecEditeur
115{ 126{
116 background-color: #a8b3d9; 127 background-color: #a8b3d9;
diff --git a/public/css/menu.css b/public/css/menu.css
index 28cba08..4bf5262 100644
--- a/public/css/menu.css
+++ b/public/css/menu.css
@@ -13,11 +13,11 @@
13{ 13{
14 font-size: 90%; 14 font-size: 90%;
15} 15}
16.boutonArticle a 16/*.boutonArticle span
17{ 17{
18 padding: 2px; 18 padding: 2px;
19 border: 4px black groove; 19 border: 4px black groove;
20} 20}*/
21 21
22.sectionActu 22.sectionActu
23{} 23{}
diff --git a/public/css/pages_articles_simples.css b/public/css/pages_articles_simples.css
index 9b6d2c3..2f3e901 100644
--- a/public/css/pages_articles_simples.css
+++ b/public/css/pages_articles_simples.css
@@ -26,14 +26,14 @@ figure
26} 26}
27.boutonNouvelArticle 27.boutonNouvelArticle
28{ 28{
29 /* comme "article" dans main.css */
29 font-size: 90%; 30 font-size: 90%;
30} 31}
31.boutonArticle a 32.boutonArticle span
32{ 33{
33 padding: 2px; 34 position: relative;
34 border: 4px black groove; 35 bottom: 6px;
35} 36}
36
37@media screen and (min-width: 700px) 37@media screen and (min-width: 700px)
38{ 38{
39 #titre 39 #titre
diff --git a/public/icone_descendre.png b/public/icone_descendre.png
new file mode 100644
index 0000000..7980297
--- /dev/null
+++ b/public/icone_descendre.png
Binary files differ
diff --git a/public/icone_flèche.xcf b/public/icone_flèche.xcf
new file mode 100644
index 0000000..7fcf5d6
--- /dev/null
+++ b/public/icone_flèche.xcf
Binary files differ
diff --git a/public/icone_monter.png b/public/icone_monter.png
new file mode 100644
index 0000000..8e213ec
--- /dev/null
+++ b/public/icone_monter.png
Binary files differ
diff --git a/public/inversion.js b/public/inversion.js
new file mode 100644
index 0000000..20a6871
--- /dev/null
+++ b/public/inversion.js
@@ -0,0 +1,16 @@
1// public/inversion.js
2
3// inverser la position de deux "articles" ou albums d'une page
4function inversion()
5{
6 var page = '';
7 var action = ''; // monter ou descendre
8 var fileCode = ''; // <?= $Articles->fileList[$i]['fileCode'] ?>
9 var position = ''; // <?= $Articles->fileList[$i]['position'] ?>
10
11 const xhr = new XMLHttpRequest();
12 url = 'index.php?page='+page+'&action='+action+'&file_code='+fileCode+'&position='+position+'#'+fileCode;
13 url = 'index.php?action=restauration&file_name='+fileInfos.name+'&file_size='+fileInfos.size;
14 xhr.open("GET", url);
15 xhr.send();
16} \ No newline at end of file
diff --git a/view/articlesContent.php b/view/articlesContent.php
index 5f6b587..c07ba75 100644
--- a/view/articlesContent.php
+++ b/view/articlesContent.php
@@ -1,7 +1,7 @@
1<?php 1<?php
2// view/articlesContent.php 2// view/articlesContent.php
3 3
4// variable $articlesContent 4// tampon pour $articlesContent
5ob_start(); 5ob_start();
6if($_SESSION['admin'] == 1) 6if($_SESSION['admin'] == 1)
7{ 7{
@@ -23,7 +23,7 @@ if($_SESSION['admin'] == 1)
23 <div> 23 <div>
24 <p class="boutonArticle boutonNouvelArticle" > 24 <p class="boutonArticle boutonNouvelArticle" >
25 <a href="index.php?page=<?= $page ?>&action=editor" > 25 <a href="index.php?page=<?= $page ?>&action=editor" >
26 Nouvel article 26 <span>Nouvel article</span>
27 </a> 27 </a>
28 </p> 28 </p>
29<?php 29<?php
@@ -85,12 +85,13 @@ for($i = 0; $i < $Articles->fileListCount; $i++)
85 </div> 85 </div>
86 <p class="boutonArticle" > 86 <p class="boutonArticle" >
87 <a href="index.php?page=<?= $page ?>&action=editor&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>#<?= $Articles->fileList[$i]['fileCode'] ?>" > 87 <a href="index.php?page=<?= $page ?>&action=editor&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>#<?= $Articles->fileList[$i]['fileCode'] ?>" >
88 Modifier cet article 88 <img src="public/icone_modifier.png" ></a>
89 </a> 89 <a href="index.php?page=<?= $page ?>&action=monter&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>&position=<?= $Articles->fileList[$i]['position'] ?>#<?= $Articles->fileList[$i]['fileCode'] ?>" >
90 &nbsp;<!-- un espace --> 90 <img src="public/icone_monter.png" ></a>
91 <a href="index.php?page=<?= $page ?>&action=descendre&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>&position=<?= $Articles->fileList[$i]['position'] ?>#<?= $Articles->fileList[$i]['fileCode'] ?>" >
92 <img src="public/icone_descendre.png" ></a>
91 <a href="index.php?page=<?= $page ?>&action=suppression&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>" onclick="confirmerSuppression()" > 93 <a href="index.php?page=<?= $page ?>&action=suppression&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>" onclick="confirmerSuppression()" >
92 Supprimer cet article 94 <img src="public/icone_supprimer.png" ></a>
93 </a>
94 </p> 95 </p>
95 <?php 96 <?php
96 } 97 }
diff --git a/view/backup.php b/view/backup.php
index bbea60d..ec2e947 100644
--- a/view/backup.php
+++ b/view/backup.php
@@ -54,8 +54,8 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'restauration')
54 ob_start(); 54 ob_start();
55?> 55?>
56 <h2>Restauration des données à partir d'une sauvegarde.</h2> 56 <h2>Restauration des données à partir d'une sauvegarde.</h2>
57 <p>Vous devez avoir créé précédemment un fichier dont le nom commence par <i>melaineDATA</i><br/> 57 <p>Vous devez avoir précédemment créé et téléchargé un fichier dont le nom commence par <i>melaineDATA</i><br/>
58 à la page <i>Sauvegarder les données.</i></p><br/> 58 sur la page <i>Sauvegarder les données.</i></p><br/>
59 59
60 <form method="post" enctype="multipart/form-data" action="index.php?from=<?= $from ?>&action=restauration" > 60 <form method="post" enctype="multipart/form-data" action="index.php?from=<?= $from ?>&action=restauration" >
61 <input id="archiveUpload" type="file" name="archive" accept=".zip" class="boutonBackup" onchange="sendFileSize();" ><br/> 61 <input id="archiveUpload" type="file" name="archive" accept=".zip" class="boutonBackup" onchange="sendFileSize();" ><br/>
@@ -78,7 +78,7 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'restauration')
78 <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> --> 78 <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> -->
79 <link rel="icon" type="image/png" href="public/mouette-logo.png" > 79 <link rel="icon" type="image/png" href="public/mouette-logo.png" >
80 <link rel="stylesheet" type="text/css" href="public/css/normalize.css" /> 80 <link rel="stylesheet" type="text/css" href="public/css/normalize.css" />
81 <link rel="stylesheet" type="text/css" href="public/css/accueil.css" /> 81 <link rel="stylesheet" type="text/css" href="public/css/main.css" />
82<?php 82<?php
83if(isset($_GET['action']) && $_GET['action'] == 'restauration') 83if(isset($_GET['action']) && $_GET['action'] == 'restauration')
84{ 84{
diff --git a/view/discographie.php b/view/discographie.php
index 2220715..3007c86 100644
--- a/view/discographie.php
+++ b/view/discographie.php
@@ -81,10 +81,11 @@ if($_SESSION['admin'] == 1)
81 { 81 {
82 $style = ''; 82 $style = '';
83?> 83?>
84 <!-- le bouton Nouvel album est considéré comme un article -->
84 <article> 85 <article>
85 <p class="boutonAlbum" > 86 <p class="boutonAlbum" >
86 <a href="index.php?page=discographie&action=edition" > 87 <a href="index.php?page=discographie&action=edition" >
87 Nouvel album 88 <span>Nouvel album</span>
88 </a> 89 </a>
89 </p> 90 </p>
90 </article> 91 </article>
@@ -151,6 +152,10 @@ for($i = 0; $i < $Albums->fileListCount; $i++)
151 <a href="index.php?<?= $lienBoutonModif[$i] ?>" > 152 <a href="index.php?<?= $lienBoutonModif[$i] ?>" >
152 <img src="public/icone_modifier.png" > 153 <img src="public/icone_modifier.png" >
153 </a> 154 </a>
155 <a href="index.php?page=<?= $page ?>&action=monter&file_code=<?= $Albums->fileList[$i]['fileCode'] ?>&position=<?= $Albums->fileList[$i]['position'] ?>#<?= $Albums->fileList[$i]['fileCode'] ?>" >
156 <img src="public/icone_monter.png" ></a>
157 <a href="index.php?page=<?= $page ?>&action=descendre&file_code=<?= $Albums->fileList[$i]['fileCode'] ?>&position=<?= $Albums->fileList[$i]['position'] ?>#<?= $Albums->fileList[$i]['fileCode'] ?>" >
158 <img src="public/icone_descendre.png" ></a>
154 <a href="index.php?page=discographie&action=suppression&file_code=<?= $Albums->fileList[$i]['fileCode'] ?>" onclick="confirmerSuppression()" > 159 <a href="index.php?page=discographie&action=suppression&file_code=<?= $Albums->fileList[$i]['fileCode'] ?>" onclick="confirmerSuppression()" >
155 <img src="public/icone_supprimer.png" > 160 <img src="public/icone_supprimer.png" >
156 </a> 161 </a>
diff --git a/view/pageArticlesSimples.php b/view/pageArticlesSimples.php
index 34f5dca..95f8c46 100644
--- a/view/pageArticlesSimples.php
+++ b/view/pageArticlesSimples.php
@@ -39,9 +39,9 @@ $js = ob_get_clean();
39// message lecteur multimedia 39// message lecteur multimedia
40if($page == 'archives') 40if($page == 'archives')
41{ 41{
42 $explications = '<p > 42 $explications = '<p style="padding: 3px 3px 0 3px; background-color: white;">
43 <img style="float: right;" src="public/header_images/logo_real.png" /> 43 <img style="float: right;" src="public/header_images/logo_real.png" />
44 Certains liens vidéos nécessitent le lecteur <a href="https://www.real.com" target="_blank" >Real Media</a> (windows, android et iOS) pour être lus.</p> 44 Certains liens vidéos nécessitent le lecteur <a href="https://www.real.com" target="_blank" >Real Player</a> (windows, android et iOS) pour être lus.</p>
45 <p> 45 <p>
46 <img style="float: left;" src="public/header_images/logo_vlc.png" /> 46 <img style="float: left;" src="public/header_images/logo_vlc.png" />
47 Vous pouvez aussi utiliser le<br/><a href="https://www.videolan.org/vlc/" target="_blank" >lecteur VLC.</a></p>'; 47 Vous pouvez aussi utiliser le<br/><a href="https://www.videolan.org/vlc/" target="_blank" >lecteur VLC.</a></p>';
diff --git a/view/password.php b/view/password.php
index a72766e..93cae95 100644
--- a/view/password.php
+++ b/view/password.php
@@ -78,7 +78,7 @@ ob_start();
78 <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> --> 78 <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> -->
79 <link rel="icon" type="image/png" href="public/mouette-logo.png" > 79 <link rel="icon" type="image/png" href="public/mouette-logo.png" >
80 <link rel="stylesheet" type="text/css" href="public/css/normalize.css"> 80 <link rel="stylesheet" type="text/css" href="public/css/normalize.css">
81 <link rel="stylesheet" type="text/css" href="public/css/accueil.css" /> 81 <link rel="stylesheet" type="text/css" href="public/css/main.css" />
82 <script type="text/javascript" src="public/main.js" ></script> 82 <script type="text/javascript" src="public/main.js" ></script>
83 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 83 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
84 </head> 84 </head>
diff --git a/view/template.php b/view/template.php
index 7fafbbb..b86a41c 100644
--- a/view/template.php
+++ b/view/template.php
@@ -11,7 +11,7 @@
11 <!-- <link rel="shortcut icon" type="image/x-icon" href="public/favicon.ico" /> --> 11 <!-- <link rel="shortcut icon" type="image/x-icon" href="public/favicon.ico" /> -->
12 <link rel="icon" type="image/png" href="public/mouette-logo.png" > 12 <link rel="icon" type="image/png" href="public/mouette-logo.png" >
13 <link rel="stylesheet" type="text/css" href="public/css/normalize.css"> 13 <link rel="stylesheet" type="text/css" href="public/css/normalize.css">
14 <link rel="stylesheet" type="text/css" href="public/css/accueil.css" /> 14 <link rel="stylesheet" type="text/css" href="public/css/main.css" />
15<?php 15<?php
16if(isset($css)) // fichiers CSS supplémentaires 16if(isset($css)) // fichiers CSS supplémentaires
17{ 17{