diff options
-rw-r--r-- | config.php | 5 | ||||
-rw-r--r-- | controller/admin.php | 3 | ||||
-rw-r--r-- | controller/backup.php | 188 | ||||
-rw-r--r-- | controller/visitor.php | 38 | ||||
-rw-r--r-- | index.php | 11 | ||||
-rw-r--r-- | model/Album.php | 33 | ||||
-rw-r--r-- | model/Article.php | 8 | ||||
-rw-r--r-- | model/Image.php | 5 | ||||
-rw-r--r-- | public/css/accueil.css | 99 | ||||
-rw-r--r-- | public/css/menu.css | 54 | ||||
-rw-r--r-- | public/main.js | 24 | ||||
-rw-r--r-- | view/album.php | 21 | ||||
-rw-r--r-- | view/backup.php | 32 | ||||
-rw-r--r-- | view/discographie.php | 3 | ||||
-rw-r--r-- | view/menu.php | 6 | ||||
-rw-r--r-- | view/password.php | 6 | ||||
-rw-r--r-- | view/template-formulaires.php | 8 | ||||
-rw-r--r-- | view/template.php | 22 | ||||
-rw-r--r-- | à faire après livraison.txt | 19 | ||||
-rw-r--r-- | à faire avant livraison.txt | 10 |
20 files changed, 397 insertions, 198 deletions
@@ -3,6 +3,11 @@ | |||
3 | // écrire 'gd' ou 'imagick' | 3 | // écrire 'gd' ou 'imagick' |
4 | $imageLibrary = 'imagick'; | 4 | $imageLibrary = 'imagick'; |
5 | 5 | ||
6 | // taille max des fichiers à adapter au php.ini | ||
7 | $maxWeight = 2000000; | ||
8 | |||
6 | // mode de stockage des données | 9 | // mode de stockage des données |
7 | // écrire 'files' ou 'database' | 10 | // écrire 'files' ou 'database' |
8 | $storage = 'files'; | 11 | $storage = 'files'; |
12 | // laisser 'files'!! | ||
13 | // l'utilisation d'une BDD n'est pas prévue pour l'instant \ No newline at end of file | ||
diff --git a/controller/admin.php b/controller/admin.php index 50f15e2..b8ef7ff 100644 --- a/controller/admin.php +++ b/controller/admin.php | |||
@@ -191,7 +191,8 @@ function discoEdit($fileCode, $suppression) | |||
191 | { | 191 | { |
192 | if(file_exists('data/discographie/html/' . $Albums->fileList[$i]['fileCode'] . '.html')) | 192 | if(file_exists('data/discographie/html/' . $Albums->fileList[$i]['fileCode'] . '.html')) |
193 | { | 193 | { |
194 | $lienAlbum[$i] = 'page=album&album_name=' . $Albums->fileList[$i]['titre'] . '&file_code=' . $Albums->fileList[$i]['fileCode']; | 194 | /*$lienAlbum[$i] = 'page=album&album_name=' . $Albums->fileList[$i]['titre'] . '&file_code=' . $Albums->fileList[$i]['fileCode'];*/ |
195 | $lienAlbum[$i] = 'page=album&file_code=' . $Albums->fileList[$i]['fileCode']; | ||
195 | $avecLien[$i] = true; | 196 | $avecLien[$i] = true; |
196 | $linkDiscoChrono[$i] = 'linkChrono'; // css | 197 | $linkDiscoChrono[$i] = 'linkChrono'; // css |
197 | } | 198 | } |
diff --git a/controller/backup.php b/controller/backup.php index 13b68df..81d72b9 100644 --- a/controller/backup.php +++ b/controller/backup.php | |||
@@ -1,84 +1,64 @@ | |||
1 | <?php | 1 | <?php |
2 | // controller/backup.php | 2 | // controller/backup.php |
3 | 3 | ||
4 | // note: faire que cette fonction soit exécutée automatiquement de temps en temps | ||
4 | function sauvegarder($from) | 5 | function sauvegarder($from) |
5 | { | 6 | { |
6 | $title = 'extraction des données'; | 7 | $title = 'extraction des données'; |
7 | 8 | ||
8 | $chemin = "data/"; | 9 | $cheminDestination = "data/"; |
9 | $nomFichier = "melaineDATA.zip"; | 10 | $date = date("d-m-Y", time()); |
11 | $nomFichier = "melaineDATA_" . $date . ".zip"; | ||
12 | // ne prendre que les dossiers pour exclure les fichiers password.txt, melaineDATA.zip et melainePHP.zip existant | ||
13 | $dossiersCibles = [ 'data/archives', 'data/concerts', 'data/liens', 'data/presse', 'data/ateliers', 'data/discographie', 'data/melaine', 'data/peinture' ]; | ||
14 | //$fichiersALaRacine = []; | ||
10 | 15 | ||
11 | // création ou remplacement d'une archive zip | 16 | createZip($cheminDestination, $nomFichier, $dossiersCibles); |
12 | // une erreur est jetée si l'extension zip n'est pas activée | ||
13 | try | ||
14 | { | ||
15 | $zip = new ZipArchive(); | ||
16 | } | ||
17 | catch (Throwable $e) | ||
18 | { | ||
19 | echo($erreur); | ||
20 | die(); | ||
21 | } | ||
22 | |||
23 | // création du fichier zip vide | ||
24 | // j'ai utilisé l'option ZipArchive::OVERWRITE, | ||
25 | // ZipArchive::FL_OVERWRITE n'apparaît qu'avec PHP 8 | ||
26 | if ($zip->open($chemin . $nomFichier, ZipArchive::CREATE | ZipArchive::OVERWRITE)!==TRUE) { | ||
27 | exit("Impossible d'ouvrir le fichier <i>" . $chemin . $nomFichier . "</i>.\n"); | ||
28 | } | ||
29 | |||
30 | // ajout des fichiers | ||
31 | // chemin complet = data/"pages"/"html ou images"/"tous les fichiers" | ||
32 | $zip->addGlob($chemin . '*/*/*', 0, array('')); | ||
33 | $zip->close(); | ||
34 | |||
35 | // pour pouvoir manipuler le fichier depuis filezilla ou ssh | ||
36 | chmod($chemin . $nomFichier, 0666); // écriture 4 chiffres | ||
37 | |||
38 | require('view/backup.php'); | ||
39 | } | ||
40 | |||
41 | function restaurer($from) | ||
42 | { | ||
43 | $title = 'Restauration des données'; | ||
44 | |||
45 | $chemin = "data/"; | ||
46 | $nomFichier = "melaineDATA.zip"; | ||
47 | 17 | ||
48 | require('view/backup.php'); | 18 | require('view/backup.php'); |
49 | } | 19 | } |
50 | 20 | ||
51 | // inutile | ||
52 | function creerMelainePHP() | 21 | function creerMelainePHP() |
53 | { | 22 | { |
23 | $cheminDestination = 'data/'; | ||
54 | $nomFichier = "melainePHP.zip"; | 24 | $nomFichier = "melainePHP.zip"; |
25 | // tous les dossiers sauf data et .git | ||
26 | $dossiersCibles = ['model', 'view', 'controller', 'public', 'lib']; | ||
27 | $fichiersALaRacine = ['*.php', '.htaccess', '*.txt']; // robots? | ||
28 | |||
29 | createZip($cheminDestination, $nomFichier, $dossiersCibles, $fichiersALaRacine); | ||
30 | } | ||
55 | 31 | ||
56 | try | ||
57 | { | ||
58 | $Zip = new ZipArchive(); | ||
59 | } | ||
60 | catch (Throwable $e) // absence de l'extension zip | ||
61 | { | ||
62 | echo($erreur); | ||
63 | die(); | ||
64 | } | ||
65 | 32 | ||
66 | if ($Zip->open('data/' . $nomFichier, ZipArchive::CREATE | ZipArchive::OVERWRITE)!==TRUE) | 33 | // les deux premiers paramètres concernent le fichier créé |
67 | { | 34 | // le quatrième est optionnel et concerne les fichiers à la racine |
68 | exit("Impossible d'ouvrir le fichier <i>" . $nomFichier . "</i>.\n"); | 35 | function createZip($destinationPath, $zipFileName, array $targetDirectories, array $allPattern = []) |
69 | } | 36 | { |
37 | try | ||
38 | { | ||
39 | $Zip = new ZipArchive(); | ||
40 | } | ||
41 | catch (Throwable $e) // l'extension zip n'est pas activée | ||
42 | { | ||
43 | echo($e); | ||
44 | die(); | ||
45 | } | ||
46 | |||
47 | // note: j'ai utilisé l'option ZipArchive::OVERWRITE, | ||
48 | // ZipArchive::FL_OVERWRITE n'apparaît qu'avec PHP 8 | ||
49 | if ($Zip->open($destinationPath . $zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== TRUE) | ||
50 | { | ||
51 | exit("Impossible de créer ou d'ouvrir ou créer le fichier <i>data/" . $zipFileName . ".</i><br /> | ||
52 | Il est possible que ce fichier existe déjà et soit interdit en écriture.<br /> | ||
53 | <p><a href=\"index.php\" >Retour au site</a></p>"); | ||
54 | } | ||
70 | 55 | ||
71 | // fichiers à la racine | 56 | $compteur = 0; |
72 | $Zip->addGlob('*.php', 0, array('')); | ||
73 | $Zip->addGlob('.htaccess', 0, array('')); | ||
74 | $Zip->addGlob('*.txt', 0, array('')); | ||
75 | 57 | ||
76 | // tous les dossiers sauf data et .git | 58 | // recherche récursive dans les dossiers dans $directories |
77 | $listeDossiers = array('model', 'view', 'controller', 'public', 'lib'); | 59 | foreach($targetDirectories as $path) |
78 | foreach($listeDossiers as $path) | ||
79 | { | 60 | { |
80 | // les deux lignes suivantes me dépassent un peu, | 61 | // les deux lignes suivantes reviennent à utiliser le paramètre "-r" dans la console |
81 | // mais ça marche et c'est comme ça qu'il faut faire | ||
82 | $directory = new RecursiveDirectoryIterator($path); | 62 | $directory = new RecursiveDirectoryIterator($path); |
83 | $iterator = new RecursiveIteratorIterator($directory); | 63 | $iterator = new RecursiveIteratorIterator($directory); |
84 | 64 | ||
@@ -87,13 +67,93 @@ function creerMelainePHP() | |||
87 | // chemins inutiles . et .. | 67 | // chemins inutiles . et .. |
88 | if($info->getFilename() != "." && $info->getFilename() != "..") | 68 | if($info->getFilename() != "." && $info->getFilename() != "..") |
89 | { | 69 | { |
90 | //var_dump($info->getPathname()); | ||
91 | $Zip->addGlob($info->getPathname(), 0, array('')); | 70 | $Zip->addGlob($info->getPathname(), 0, array('')); |
71 | $compteur++; | ||
92 | } | 72 | } |
93 | } | 73 | } |
94 | } | 74 | } |
95 | 75 | ||
76 | // recherche à la racine avec des pattern de noms de fichiers | ||
77 | // possibilité d'un tableau vide (paramètre optionnel) | ||
78 | foreach($allPattern as $onePattern) | ||
79 | { | ||
80 | $Zip->addGlob($onePattern, 0, array('')); | ||
81 | } | ||
82 | |||
96 | $Zip->close(); | 83 | $Zip->close(); |
97 | 84 | ||
98 | chmod('data/' . $nomFichier, 0644); // écriture 4 chiffres (octal) | 85 | if($compteur > 0) |
99 | } \ No newline at end of file | 86 | { |
87 | chmod($destinationPath . $zipFileName, 0666); // en octal | ||
88 | } | ||
89 | else | ||
90 | { | ||
91 | $_SESSION['erreur'] = "Extraction des données impossible, le site entier est vide."; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | |||
96 | function restaurer($from) | ||
97 | { | ||
98 | $title = 'Restauration des données'; | ||
99 | $message = ''; | ||
100 | |||
101 | // recharger la même page en écrivant les données | ||
102 | if(isset($_FILES['archive']) && $_FILES['archive']['error'] == 0) | ||
103 | { | ||
104 | // une copie du zip est conservée dans data/ au cas où | ||
105 | move_uploaded_file($_FILES['archive']['tmp_name'], 'data/' . $_FILES['archive']['name']); | ||
106 | chmod('data/' . $_FILES['archive']['name'], 0666); | ||
107 | |||
108 | $nomFichier = 'data/' . $_FILES['archive']['name']; | ||
109 | |||
110 | // extraction | ||
111 | try | ||
112 | { | ||
113 | $Zip = new ZipArchive(); | ||
114 | } | ||
115 | catch (Throwable $e) // l'extension zip n'est pas activée | ||
116 | { | ||
117 | echo($e); | ||
118 | die(); | ||
119 | } | ||
120 | |||
121 | //var_dump($Zip->open($nomFichier, ZipArchive::RDONLY)); | ||
122 | //var_dump(ZipArchive::ER_NOENT); | ||
123 | |||
124 | if($Zip->open($nomFichier, ZipArchive::RDONLY) === TRUE) | ||
125 | { | ||
126 | $j = 0; | ||
127 | for($i = 0; $i < $Zip->numFiles; $i++) | ||
128 | { | ||
129 | $nomEntree = $Zip->getNameIndex($i); | ||
130 | if($Zip->extractTo('.', $nomEntree) === TRUE) | ||
131 | { | ||
132 | $j++; | ||
133 | } | ||
134 | else | ||
135 | { | ||
136 | $message = '<p style="color: red;" >Erreur: extraction du zip impossible.</p>'; | ||
137 | } | ||
138 | chmod($nomEntree, 0666); | ||
139 | } | ||
140 | |||
141 | if($j == $Zip->numFiles) | ||
142 | { | ||
143 | $message = '<p style="color: red;" >Restauration réussie !!</p>'; | ||
144 | } | ||
145 | $Zip->close(); | ||
146 | } | ||
147 | else | ||
148 | { | ||
149 | // mauvais fichier | ||
150 | $message = '<p style="color: red;" >Erreur: Impossible d\'ouvrir l\'archive Zip."</p>'; | ||
151 | } | ||
152 | } | ||
153 | elseif(isset($_FILES['archive']) && $_FILES['archive']['error'] != 0) | ||
154 | { | ||
155 | $message = '<p style="color: red;" >Erreur: Le fichier n\'a pas pu être téléchargé correctement."</p>'; | ||
156 | } | ||
157 | |||
158 | require('view/backup.php'); | ||
159 | } | ||
diff --git a/controller/visitor.php b/controller/visitor.php index 2656798..f0dc877 100644 --- a/controller/visitor.php +++ b/controller/visitor.php | |||
@@ -59,7 +59,7 @@ function discoVisitor() | |||
59 | 59 | ||
60 | // modèle | 60 | // modèle |
61 | $Albums = new Album($page_actuelle); | 61 | $Albums = new Album($page_actuelle); |
62 | $Albums->makeFileList(); | 62 | //var_dump($Albums->fileList); die(); |
63 | 63 | ||
64 | // on récupère tout: JSON, HTML, noms et chemins des fichiers | 64 | // on récupère tout: JSON, HTML, noms et chemins des fichiers |
65 | $Albums->readAll(); | 65 | $Albums->readAll(); |
@@ -88,19 +88,22 @@ function discoVisitor() | |||
88 | /*$lienAlbum = []; | 88 | /*$lienAlbum = []; |
89 | $avecLien = []; | 89 | $avecLien = []; |
90 | $linkDiscoChrono = [];*/ | 90 | $linkDiscoChrono = [];*/ |
91 | |||
92 | // liens vers les albums | ||
91 | for($i = 0; $i < $Albums->fileListCount; $i++) | 93 | for($i = 0; $i < $Albums->fileListCount; $i++) |
92 | { | 94 | { |
93 | if(file_exists('data/discographie/html/' . $Albums->fileList[$i]['fileCode'] . '.html')) | 95 | if(file_exists('data/discographie/html/' . $Albums->fileList[$i]['fileCode'] . '.html')) |
94 | { | 96 | { |
95 | $lienAlbum[$i] = 'page=album&album_name=' . $Albums->fileList[$i]['titre'] . '&file_code=' . $Albums->fileList[$i]['fileCode']; | 97 | /*$lienAlbum[$i] = 'page=album&album_name=' . $Albums->fileList[$i]['titre'] . '&file_code=' . $Albums->fileList[$i]['fileCode'];*/ |
98 | $lienAlbum[$i] = 'page=album&file_code=' . $Albums->fileList[$i]['fileCode']; | ||
96 | $avecLien[$i] = true; | 99 | $avecLien[$i] = true; |
97 | $linkDiscoChrono[$i] = 'linkChrono'; // css | 100 | $linkDiscoChrono[$i] = 'linkChrono'; // pour le css |
98 | } | 101 | } |
99 | else | 102 | else |
100 | { | 103 | { |
101 | $lienAlbum[$i] = 'page=discographie#' . $Albums->fileList[$i]['titre']; | 104 | $lienAlbum[$i] = 'page=discographie#' . $Albums->fileList[$i]['titre']; |
102 | $avecLien[$i] = false; | 105 | $avecLien[$i] = false; |
103 | $linkDiscoChrono[$i] = 'noLinkChrono'; // css | 106 | $linkDiscoChrono[$i] = 'noLinkChrono'; // pour le css |
104 | } | 107 | } |
105 | $lienBoutonModif[$i] = 'page=discographie&action=edition&file_code=' . $Albums->fileList[$i]['fileCode']; | 108 | $lienBoutonModif[$i] = 'page=discographie&action=edition&file_code=' . $Albums->fileList[$i]['fileCode']; |
106 | } | 109 | } |
@@ -112,12 +115,31 @@ function discoVisitor() | |||
112 | } | 115 | } |
113 | 116 | ||
114 | // page d'un album | 117 | // page d'un album |
115 | function album($fileCode, $albumName) | 118 | function album($fileCode) |
116 | { | 119 | { |
117 | $page_actuelle = 'discographie'; | 120 | $page_actuelle = 'discographie'; // ??? |
118 | $title = $albumName; | 121 | |
122 | $Albums = new Album($page_actuelle); | ||
123 | $Albums->getAllJSON(); | ||
124 | $Albums->fileCode = $fileCode; | ||
125 | $Albums->readOne(); | ||
119 | 126 | ||
120 | $album = Album::readOneHTML($fileCode); // simple, efficace | 127 | //var_dump($Albums); die(); |
128 | |||
129 | $album = $Albums->oneAlbum['HTMLcontent']; | ||
130 | //$album = Album::readOneHTML($fileCode); | ||
131 | |||
132 | for($i = 0; $i < $Albums->fileListCount; $i++) | ||
133 | { | ||
134 | if(file_exists('data/discographie/html/' . $Albums->fileList[$i]['fileCode'] . '.html')) | ||
135 | { | ||
136 | $lienAlbum[$i] = 'page=album&file_code=' . $Albums->fileList[$i]['fileCode']; | ||
137 | } | ||
138 | else | ||
139 | { | ||
140 | $lienAlbum[$i] = 'page=discographie#' . $Albums->fileList[$i]['titre']; | ||
141 | } | ||
142 | } | ||
121 | 143 | ||
122 | // variables $css, $header et $content | 144 | // variables $css, $header et $content |
123 | require('view/album.php'); | 145 | require('view/album.php'); |
@@ -193,7 +193,7 @@ if(isset($_GET['page'])) | |||
193 | // page visiteur uniquement | 193 | // page visiteur uniquement |
194 | elseif($_GET['page'] == 'album') | 194 | elseif($_GET['page'] == 'album') |
195 | { | 195 | { |
196 | album($_GET['file_code'], $_GET['album_name']); | 196 | album($_GET['file_code']); |
197 | } | 197 | } |
198 | // page connexion | 198 | // page connexion |
199 | elseif($_GET['page'] == 'connexion') | 199 | elseif($_GET['page'] == 'connexion') |
@@ -221,21 +221,16 @@ elseif($_SESSION['admin'] == 1 && isset($_GET['action'])) | |||
221 | { | 221 | { |
222 | require_once('controller/backup.php'); | 222 | require_once('controller/backup.php'); |
223 | 223 | ||
224 | // extraction du contenu du dossier data | 224 | // sauvegarde du dossier 'data' |
225 | if($_GET['action'] == 'sauvegarde') | 225 | if($_GET['action'] == 'sauvegarde') |
226 | { | 226 | { |
227 | sauvegarder($_GET['from']); | 227 | sauvegarder($_GET['from']); |
228 | } | 228 | } |
229 | // insertion des données d'une sauvegarde | 229 | // restauration avec une sauvegarde |
230 | elseif($_GET['action'] == 'restauration') | 230 | elseif($_GET['action'] == 'restauration') |
231 | { | 231 | { |
232 | restaurer($_GET['from']); | 232 | restaurer($_GET['from']); |
233 | } | 233 | } |
234 | // tout sauf le dossier data | ||
235 | /*elseif($_GET['action'] == 'extrairePHP') | ||
236 | { | ||
237 | extrairePHP($_GET['from']); | ||
238 | }*/ | ||
239 | else | 234 | else |
240 | { | 235 | { |
241 | accueil(); | 236 | accueil(); |
diff --git a/model/Album.php b/model/Album.php index 9c90a6b..3f13939 100644 --- a/model/Album.php +++ b/model/Album.php | |||
@@ -7,16 +7,32 @@ class Album extends Article | |||
7 | 7 | ||
8 | public function __construct($page) | 8 | public function __construct($page) |
9 | { | 9 | { |
10 | $this->format = 'json'; // vaut 'html' dans la classe mère | ||
11 | |||
10 | // pour: page, fileCode, time et makeFileList() | 12 | // pour: page, fileCode, time et makeFileList() |
11 | parent::__construct($page); | 13 | parent::__construct($page); |
12 | //$this->page = $page; | ||
13 | //$this->fileCode = ''; // désigne un fichier json et un html | ||
14 | $this->format = 'json'; // vaut 'html' dans la classe mère | ||
15 | //$this->time = time(); | ||
16 | //$this->makeFileList(); | ||
17 | } | 14 | } |
18 | 15 | ||
19 | // GET | 16 | // GET |
17 | public function getAllJSON() // pour la page album | ||
18 | { | ||
19 | // mettre le JSON dans fileList[$i]['content'] | ||
20 | parent::readAll(); | ||
21 | |||
22 | $this->format = 'html'; | ||
23 | |||
24 | for($i = 0; $i < $this->fileListCount; $i++) | ||
25 | { | ||
26 | $content = json_decode($this->fileList[$i]['content'], true); | ||
27 | $this->fileList[$i]['titre'] = $content[0]; | ||
28 | $this->fileList[$i]['annee'] = $content[1]; | ||
29 | $this->fileList[$i]['pochette'] = $content[2]; | ||
30 | $this->fileList[$i]['pochetteMini'] = $content[3]; | ||
31 | } | ||
32 | |||
33 | // on remet comme avant | ||
34 | $this->format = 'json'; | ||
35 | } | ||
20 | 36 | ||
21 | // SET | 37 | // SET |
22 | 38 | ||
@@ -70,6 +86,7 @@ class Album extends Article | |||
70 | // permet de ne pas la remplacer par la nouvelle | 86 | // permet de ne pas la remplacer par la nouvelle |
71 | 87 | ||
72 | $this->format = 'html'; | 88 | $this->format = 'html'; |
89 | |||
73 | for($i = 0; $i < $this->fileListCount; $i++) | 90 | for($i = 0; $i < $this->fileListCount; $i++) |
74 | { | 91 | { |
75 | // ajout du JSON | 92 | // ajout du JSON |
@@ -103,7 +120,7 @@ class Album extends Article | |||
103 | { | 120 | { |
104 | for($i = 0; $i < $this->fileListCount; $i++) | 121 | for($i = 0; $i < $this->fileListCount; $i++) |
105 | { | 122 | { |
106 | if($_SESSION['target'] == $this->fileList[$i]['fileCode']) | 123 | if($this->fileCode == $this->fileList[$i]['fileCode']) |
107 | { | 124 | { |
108 | // json | 125 | // json |
109 | $this->oneAlbum['fileCode'] = $this->fileList[$i]['fileCode']; | 126 | $this->oneAlbum['fileCode'] = $this->fileList[$i]['fileCode']; |
@@ -127,7 +144,7 @@ class Album extends Article | |||
127 | } | 144 | } |
128 | 145 | ||
129 | // page d'un album | 146 | // page d'un album |
130 | public static function readOneHTML($fileCode) | 147 | /*public static function readOneHTML($fileCode) |
131 | { | 148 | { |
132 | if(file_exists('data/discographie/html/' . $fileCode . '.html')) | 149 | if(file_exists('data/discographie/html/' . $fileCode . '.html')) |
133 | { | 150 | { |
@@ -137,7 +154,7 @@ class Album extends Article | |||
137 | { | 154 | { |
138 | return(''); | 155 | return(''); |
139 | } | 156 | } |
140 | } | 157 | }*/ |
141 | 158 | ||
142 | public function getVignetteJSON() | 159 | public function getVignetteJSON() |
143 | { | 160 | { |
diff --git a/model/Article.php b/model/Article.php index fa9fce1..4ef3a5b 100644 --- a/model/Article.php +++ b/model/Article.php | |||
@@ -18,6 +18,12 @@ | |||
18 | // $fileList[$fileCode] => [$fileName => 'code', $content => 'contenu'], etc | 18 | // $fileList[$fileCode] => [$fileName => 'code', $content => 'contenu'], etc |
19 | 19 | ||
20 | 20 | ||
21 | // ma struture est mauvaise, elle n'est pas très orientée objet | ||
22 | // créer une classe structure de données | ||
23 | // celle-ci sera instanciée dans la première (ou pas du tout) | ||
24 | // et accesssible avec des GET et des SET | ||
25 | |||
26 | |||
21 | class Article | 27 | class Article |
22 | { | 28 | { |
23 | // pour tous les articles | 29 | // pour tous les articles |
@@ -25,8 +31,6 @@ class Article | |||
25 | public $format = 'html'; // vaut 'html' ou 'json' | 31 | public $format = 'html'; // vaut 'html' ou 'json' |
26 | public $fileListCount; | 32 | public $fileListCount; |
27 | public $fileList; // = toutes les données | 33 | public $fileList; // = toutes les données |
28 | //protected $articles; // contenu de toute la page | ||
29 | //protected $nbArticles; // un fichier = un article | ||
30 | 34 | ||
31 | // pour un article (ou album) spécifique | 35 | // pour un article (ou album) spécifique |
32 | //public $fileName = ''; // = $_SESSION['nomFichier'] | 36 | //public $fileName = ''; // = $_SESSION['nomFichier'] |
diff --git a/model/Image.php b/model/Image.php index ac05f24..793bd8d 100644 --- a/model/Image.php +++ b/model/Image.php | |||
@@ -3,7 +3,6 @@ | |||
3 | 3 | ||
4 | class Image | 4 | class Image |
5 | { | 5 | { |
6 | private const MAX_WEIGHT = 2000000; // à adapter au php.ini | ||
7 | private $page; | 6 | private $page; |
8 | private $ajax; // vaut true avec le ckeditor | 7 | private $ajax; // vaut true avec le ckeditor |
9 | public $path; | 8 | public $path; |
@@ -26,10 +25,12 @@ class Image | |||
26 | 25 | ||
27 | public function upload() | 26 | public function upload() |
28 | { | 27 | { |
28 | global $maxWeight; | ||
29 | |||
29 | // traitement et enregistrement de l'image | 30 | // traitement et enregistrement de l'image |
30 | if (isset($_FILES['upload']) AND $_FILES['upload']['error'] == 0) // 0 signifie ok | 31 | if (isset($_FILES['upload']) AND $_FILES['upload']['error'] == 0) // 0 signifie ok |
31 | { | 32 | { |
32 | if ($_FILES['upload']['size'] <= self::MAX_WEIGHT) | 33 | if ($_FILES['upload']['size'] <= $maxWeight) |
33 | { | 34 | { |
34 | $this->pathInfos = pathinfo($_FILES['upload']['name']); | 35 | $this->pathInfos = pathinfo($_FILES['upload']['name']); |
35 | $extension = $this->pathInfos['extension']; | 36 | $extension = $this->pathInfos['extension']; |
diff --git a/public/css/accueil.css b/public/css/accueil.css index 622ce1f..8f7f8c7 100644 --- a/public/css/accueil.css +++ b/public/css/accueil.css | |||
@@ -134,7 +134,7 @@ form | |||
134 | 134 | ||
135 | .zoneVideAdmin | 135 | .zoneVideAdmin |
136 | { | 136 | { |
137 | padding-top: 20px; | 137 | padding-top: 10px; |
138 | } | 138 | } |
139 | 139 | ||
140 | #modeAdmin | 140 | #modeAdmin |
@@ -144,8 +144,9 @@ form | |||
144 | bottom: 0px; | 144 | bottom: 0px; |
145 | width: 700px; | 145 | width: 700px; |
146 | z-index: 2; | 146 | z-index: 2; |
147 | padding-top: 5px; | 147 | padding-top: 2px; |
148 | text-align: center; | 148 | /*text-align: center;*/ |
149 | /*font-family: Sans-serif;*/ | ||
149 | } | 150 | } |
150 | 151 | ||
151 | #modeAdmin p | 152 | #modeAdmin p |
@@ -156,33 +157,26 @@ form | |||
156 | } | 157 | } |
157 | #modeAdmin>div p | 158 | #modeAdmin>div p |
158 | { | 159 | { |
159 | /*border: 1px black solid;*/ | 160 | /*margin: 5px;*/ |
160 | margin: 5px; | 161 | /*padding: 0px;*/ |
161 | padding: 0px; | ||
162 | } | 162 | } |
163 | #modeAdmin>p a | 163 | #modeAdmin>p a |
164 | { | 164 | { |
165 | padding: 2px; | 165 | text-decoration: none; |
166 | } | 166 | color: initial; |
167 | |||
168 | #modeAdmin div | ||
169 | { | ||
170 | display: flex; | ||
171 | justify-content: space-around; | ||
172 | |||
173 | margin: 0px; | ||
174 | font-size: 85%; | ||
175 | } | 167 | } |
176 | 168 | ||
177 | #lienModeAdmin | 169 | #lienModeAdmin |
178 | { | 170 | { |
179 | margin: 0px 20px; | 171 | margin: 0px 20px; |
180 | padding-bottom: 20px; | ||
181 | } | 172 | } |
182 | 173 | ||
183 | #lienModeAdmin p | 174 | #lienModeAdmin p |
184 | { | 175 | { |
185 | text-align: right; | 176 | text-align: right; |
177 | /* enlever la bande bleue en dessous du bloc_page */ | ||
178 | margin-bottom: 0; | ||
179 | padding-bottom: 5px; | ||
186 | } | 180 | } |
187 | 181 | ||
188 | #lienModeAdmin p a | 182 | #lienModeAdmin p a |
@@ -225,6 +219,28 @@ form | |||
225 | color: #666; | 219 | color: #666; |
226 | } | 220 | } |
227 | 221 | ||
222 | .boutonBackup | ||
223 | { | ||
224 | /*font-size: initial;*/ /* corrigé par normalize.css */ | ||
225 | margin: 2px; | ||
226 | } | ||
227 | .boutonBackup a | ||
228 | { | ||
229 | text-decoration: none; | ||
230 | color: initial; | ||
231 | } | ||
232 | |||
233 | /* options au survol */ | ||
234 | #options | ||
235 | { | ||
236 | /*display: none;*/ | ||
237 | display: flex; | ||
238 | } | ||
239 | /*#modeAdmin:hover #options | ||
240 | { | ||
241 | display: flex; | ||
242 | }*/ | ||
243 | |||
228 | 244 | ||
229 | /* PC, y compris vieux écrans 800x600 */ | 245 | /* PC, y compris vieux écrans 800x600 */ |
230 | @media screen and (min-width: 700px) | 246 | @media screen and (min-width: 700px) |
@@ -267,7 +283,7 @@ form | |||
267 | 283 | ||
268 | #bienvenue | 284 | #bienvenue |
269 | { | 285 | { |
270 | background-image: url("accueil/bienvenue.png"); | 286 | background-image: url("../accueil/bienvenue.png"); |
271 | width: 630px; | 287 | width: 630px; |
272 | height: 596px; | 288 | height: 596px; |
273 | } | 289 | } |
@@ -285,8 +301,14 @@ form | |||
285 | 301 | ||
286 | .zoneVideAdmin, #modeAdmin | 302 | .zoneVideAdmin, #modeAdmin |
287 | { | 303 | { |
288 | height: 70px; | 304 | /*height: 30px;*/ |
305 | height: 76px; | ||
289 | } | 306 | } |
307 | |||
308 | /*#modeAdmin:hover | ||
309 | { | ||
310 | height: 76px; | ||
311 | }*/ | ||
290 | } | 312 | } |
291 | 313 | ||
292 | /* "tablettes" et vieux écrans 640x480 */ | 314 | /* "tablettes" et vieux écrans 640x480 */ |
@@ -341,7 +363,7 @@ form | |||
341 | 363 | ||
342 | #bienvenue | 364 | #bienvenue |
343 | { | 365 | { |
344 | background-image: url("accueil/bienvenue_petit.png"); | 366 | background-image: url("../accueil/bienvenue_petit.png"); |
345 | width: 480px; | 367 | width: 480px; |
346 | height: 463px; | 368 | height: 463px; |
347 | margin: auto; | 369 | margin: auto; |
@@ -360,7 +382,7 @@ form | |||
360 | 382 | ||
361 | .zoneVideAdmin, #modeAdmin | 383 | .zoneVideAdmin, #modeAdmin |
362 | { | 384 | { |
363 | height: 75px; | 385 | height: 71px; |
364 | } | 386 | } |
365 | 387 | ||
366 | #modeAdmin | 388 | #modeAdmin |
@@ -384,7 +406,7 @@ form | |||
384 | } | 406 | } |
385 | .zoneVideAdmin, #modeAdmin | 407 | .zoneVideAdmin, #modeAdmin |
386 | { | 408 | { |
387 | height: 70px; | 409 | height: 66px; |
388 | } | 410 | } |
389 | } | 411 | } |
390 | 412 | ||
@@ -439,7 +461,7 @@ form | |||
439 | 461 | ||
440 | #bienvenue | 462 | #bienvenue |
441 | { | 463 | { |
442 | background-image: url("accueil/bienvenue_mini.png"); | 464 | background-image: url("../accueil/bienvenue_mini.png"); |
443 | width: 320px; | 465 | width: 320px; |
444 | height: 316px; | 466 | height: 316px; |
445 | } | 467 | } |
@@ -462,7 +484,7 @@ form | |||
462 | 484 | ||
463 | .zoneVideAdmin, #modeAdmin | 485 | .zoneVideAdmin, #modeAdmin |
464 | { | 486 | { |
465 | height: 65px; | 487 | height: 61px; |
466 | } | 488 | } |
467 | 489 | ||
468 | #modeAdmin | 490 | #modeAdmin |
@@ -470,9 +492,16 @@ form | |||
470 | max-width: 380px; | 492 | max-width: 380px; |
471 | } | 493 | } |
472 | 494 | ||
473 | #modeAdmin div | 495 | .boutonBackup |
474 | { | 496 | { |
475 | /*margin: 5px;*/ | 497 | /*margin: 5px;*/ |
498 | /*padding: 1px;*/ | ||
499 | |||
500 | } | ||
501 | #modeAdmin button | ||
502 | { | ||
503 | font-size: 95%; | ||
504 | padding: 1px; | ||
476 | } | 505 | } |
477 | } | 506 | } |
478 | 507 | ||
@@ -481,18 +510,19 @@ form | |||
481 | { | 510 | { |
482 | .zoneVideAdmin, #modeAdmin | 511 | .zoneVideAdmin, #modeAdmin |
483 | { | 512 | { |
484 | height: 80px; | 513 | height: 76px; |
485 | } | 514 | } |
486 | 515 | ||
487 | #modeAdmin | 516 | #modeAdmin |
488 | { | 517 | { |
489 | font-size: 95%; | 518 | /*font-size: 95%;*/ |
490 | padding: 0px; | 519 | padding: 0px; |
491 | } | 520 | } |
492 | #modeAdmin>p | 521 | #modeAdmin>p |
493 | { | 522 | { |
494 | font-size: 90%; | 523 | /*font-size: 90%;*/ |
495 | margin: 3px; | 524 | /*margin: 1px;*/ |
525 | text-align: left; | ||
496 | } | 526 | } |
497 | 527 | ||
498 | #modeAdmin div | 528 | #modeAdmin div |
@@ -501,6 +531,15 @@ form | |||
501 | } | 531 | } |
502 | #modeAdmin>div p | 532 | #modeAdmin>div p |
503 | { | 533 | { |
504 | margin: 0px 5px; | 534 | /*margin: 0px 5px;*/ |
505 | } | 535 | } |
506 | } | 536 | } |
537 | |||
538 | /* spécial */ | ||
539 | @media screen and (max-width: 320px) | ||
540 | { | ||
541 | nav | ||
542 | { | ||
543 | margin: auto; | ||
544 | } | ||
545 | } \ No newline at end of file | ||
diff --git a/public/css/menu.css b/public/css/menu.css index 0e17e34..4c521c0 100644 --- a/public/css/menu.css +++ b/public/css/menu.css | |||
@@ -44,7 +44,7 @@ | |||
44 | { | 44 | { |
45 | width: 630px; | 45 | width: 630px; |
46 | height: 171px; | 46 | height: 171px; |
47 | background-image: url("mouette.png"); | 47 | background-image: url("../mouette.png"); |
48 | } | 48 | } |
49 | 49 | ||
50 | #contenu | 50 | #contenu |
@@ -67,14 +67,14 @@ | |||
67 | 67 | ||
68 | #pochette | 68 | #pochette |
69 | { | 69 | { |
70 | background-image: url("menu/pochette.png"); | 70 | background-image: url("../menu/pochette.png"); |
71 | width: 308px; | 71 | width: 308px; |
72 | height: 271px; | 72 | height: 271px; |
73 | } | 73 | } |
74 | 74 | ||
75 | #fille_qui_tombe | 75 | #fille_qui_tombe |
76 | { | 76 | { |
77 | background-image: url("menu/fille_qui_tombe.jpg"); | 77 | background-image: url("../menu/fille_qui_tombe.jpg"); |
78 | width: 208px; | 78 | width: 208px; |
79 | height: 163px; | 79 | height: 163px; |
80 | margin: 5px 0px; | 80 | margin: 5px 0px; |
@@ -82,14 +82,14 @@ | |||
82 | 82 | ||
83 | #canoe | 83 | #canoe |
84 | { | 84 | { |
85 | background-image: url("menu/canoe.png"); | 85 | background-image: url("../menu/canoe.png"); |
86 | width: 207px; | 86 | width: 207px; |
87 | height: 144px; | 87 | height: 144px; |
88 | } | 88 | } |
89 | 89 | ||
90 | #cavalier | 90 | #cavalier |
91 | { | 91 | { |
92 | background-image: url("menu/cavalier.jpg"); | 92 | background-image: url("../menu/cavalier.jpg"); |
93 | width: 159px; | 93 | width: 159px; |
94 | height: 312px; | 94 | height: 312px; |
95 | position: relative; | 95 | position: relative; |
@@ -98,7 +98,7 @@ | |||
98 | 98 | ||
99 | #pommes | 99 | #pommes |
100 | { | 100 | { |
101 | background-image: url("menu/pommes.jpg"); | 101 | background-image: url("../menu/pommes.jpg"); |
102 | width: 59px; | 102 | width: 59px; |
103 | height: 97px; | 103 | height: 97px; |
104 | position: relative; | 104 | position: relative; |
@@ -107,14 +107,14 @@ | |||
107 | 107 | ||
108 | #sirene | 108 | #sirene |
109 | { | 109 | { |
110 | background-image: url("menu/sirene.jpg"); | 110 | background-image: url("../menu/sirene.jpg"); |
111 | width: 320px; | 111 | width: 320px; |
112 | height: 174px; | 112 | height: 174px; |
113 | } | 113 | } |
114 | 114 | ||
115 | #mouette_ocean | 115 | #mouette_ocean |
116 | { | 116 | { |
117 | background-image: url("menu/mouette_ocean.jpg"); | 117 | background-image: url("../menu/mouette_ocean.jpg"); |
118 | width: 257px; | 118 | width: 257px; |
119 | height: 171px; | 119 | height: 171px; |
120 | margin: 5px 0px; | 120 | margin: 5px 0px; |
@@ -122,7 +122,7 @@ | |||
122 | 122 | ||
123 | #blonde | 123 | #blonde |
124 | { | 124 | { |
125 | background-image: url("menu/blonde.jpg"); | 125 | background-image: url("../menu/blonde.jpg"); |
126 | width: 257px; | 126 | width: 257px; |
127 | height: 233px; | 127 | height: 233px; |
128 | } | 128 | } |
@@ -143,7 +143,7 @@ | |||
143 | { | 143 | { |
144 | width: 480px; | 144 | width: 480px; |
145 | height: 131px; | 145 | height: 131px; |
146 | background-image: url("mouette_petit.png"); | 146 | background-image: url("../mouette_petit.png"); |
147 | margin: auto; | 147 | margin: auto; |
148 | } | 148 | } |
149 | 149 | ||
@@ -167,14 +167,14 @@ | |||
167 | 167 | ||
168 | #pochette | 168 | #pochette |
169 | { | 169 | { |
170 | background-image: url("menu/pochette_petit.png"); | 170 | background-image: url("../menu/pochette_petit.png"); |
171 | width: 234px; | 171 | width: 234px; |
172 | height: 206px; | 172 | height: 206px; |
173 | } | 173 | } |
174 | 174 | ||
175 | #fille_qui_tombe | 175 | #fille_qui_tombe |
176 | { | 176 | { |
177 | background-image: url("menu/fille_qui_tombe_petit.jpg"); | 177 | background-image: url("../menu/fille_qui_tombe_petit.jpg"); |
178 | width: 158px; | 178 | width: 158px; |
179 | height: 124px; | 179 | height: 124px; |
180 | margin: 4px 0px; | 180 | margin: 4px 0px; |
@@ -182,14 +182,14 @@ | |||
182 | 182 | ||
183 | #canoe | 183 | #canoe |
184 | { | 184 | { |
185 | background-image: url("menu/canoe_petit.png"); | 185 | background-image: url("../menu/canoe_petit.png"); |
186 | width: 157px; | 186 | width: 157px; |
187 | height: 109px; | 187 | height: 109px; |
188 | } | 188 | } |
189 | 189 | ||
190 | #cavalier | 190 | #cavalier |
191 | { | 191 | { |
192 | background-image: url("menu/cavalier_petit.jpg"); | 192 | background-image: url("../menu/cavalier_petit.jpg"); |
193 | width: 121px; | 193 | width: 121px; |
194 | height: 237px; | 194 | height: 237px; |
195 | position: relative; | 195 | position: relative; |
@@ -198,7 +198,7 @@ | |||
198 | 198 | ||
199 | #pommes | 199 | #pommes |
200 | { | 200 | { |
201 | background-image: url("menu/pommes_petit.jpg"); | 201 | background-image: url("../menu/pommes_petit.jpg"); |
202 | width: 45px; | 202 | width: 45px; |
203 | height: 74px; | 203 | height: 74px; |
204 | position: relative; | 204 | position: relative; |
@@ -207,14 +207,14 @@ | |||
207 | 207 | ||
208 | #sirene | 208 | #sirene |
209 | { | 209 | { |
210 | background-image: url("menu/sirene_petit.jpg"); | 210 | background-image: url("../menu/sirene_petit.jpg"); |
211 | width: 243px; | 211 | width: 243px; |
212 | height: 132px; | 212 | height: 132px; |
213 | } | 213 | } |
214 | 214 | ||
215 | #mouette_ocean | 215 | #mouette_ocean |
216 | { | 216 | { |
217 | background-image: url("menu/mouette_ocean_petit.jpg"); | 217 | background-image: url("../menu/mouette_ocean_petit.jpg"); |
218 | width: 195px; | 218 | width: 195px; |
219 | height: 130px; | 219 | height: 130px; |
220 | margin: 4px 0px; | 220 | margin: 4px 0px; |
@@ -222,7 +222,7 @@ | |||
222 | 222 | ||
223 | #blonde | 223 | #blonde |
224 | { | 224 | { |
225 | background-image: url("menu/blonde_petit.jpg"); | 225 | background-image: url("../menu/blonde_petit.jpg"); |
226 | width: 195px; | 226 | width: 195px; |
227 | height: 177px; | 227 | height: 177px; |
228 | } | 228 | } |
@@ -243,7 +243,7 @@ | |||
243 | { | 243 | { |
244 | width: 320px; | 244 | width: 320px; |
245 | height: 88px; | 245 | height: 88px; |
246 | background-image: url("mouette_mini.png"); | 246 | background-image: url("../mouette_mini.png"); |
247 | margin: auto; | 247 | margin: auto; |
248 | } | 248 | } |
249 | 249 | ||
@@ -267,14 +267,14 @@ | |||
267 | 267 | ||
268 | #pochette | 268 | #pochette |
269 | { | 269 | { |
270 | background-image: url("menu/pochette_mini.png"); | 270 | background-image: url("../menu/pochette_mini.png"); |
271 | width: 156px; | 271 | width: 156px; |
272 | height: 137px; | 272 | height: 137px; |
273 | } | 273 | } |
274 | 274 | ||
275 | #fille_qui_tombe | 275 | #fille_qui_tombe |
276 | { | 276 | { |
277 | background-image: url("menu/fille_qui_tombe_mini.jpg"); | 277 | background-image: url("../menu/fille_qui_tombe_mini.jpg"); |
278 | width: 105px; | 278 | width: 105px; |
279 | height: 82px; | 279 | height: 82px; |
280 | margin: 3px 0px; | 280 | margin: 3px 0px; |
@@ -282,14 +282,14 @@ | |||
282 | 282 | ||
283 | #canoe | 283 | #canoe |
284 | { | 284 | { |
285 | background-image: url("menu/canoe_mini.png"); | 285 | background-image: url("../menu/canoe_mini.png"); |
286 | width: 105px; | 286 | width: 105px; |
287 | height: 73px; | 287 | height: 73px; |
288 | } | 288 | } |
289 | 289 | ||
290 | #cavalier | 290 | #cavalier |
291 | { | 291 | { |
292 | background-image: url("menu/cavalier_mini.jpg"); | 292 | background-image: url("../menu/cavalier_mini.jpg"); |
293 | width: 80px; | 293 | width: 80px; |
294 | height: 158px; | 294 | height: 158px; |
295 | position: relative; | 295 | position: relative; |
@@ -298,7 +298,7 @@ | |||
298 | 298 | ||
299 | #pommes | 299 | #pommes |
300 | { | 300 | { |
301 | background-image: url("menu/pommes_mini.jpg"); | 301 | background-image: url("../menu/pommes_mini.jpg"); |
302 | width: 30px; | 302 | width: 30px; |
303 | height: 49px; | 303 | height: 49px; |
304 | position: relative; | 304 | position: relative; |
@@ -308,14 +308,14 @@ | |||
308 | 308 | ||
309 | #sirene | 309 | #sirene |
310 | { | 310 | { |
311 | background-image: url("menu/sirene_mini.jpg"); | 311 | background-image: url("../menu/sirene_mini.jpg"); |
312 | width: 162px; | 312 | width: 162px; |
313 | height: 88px; | 313 | height: 88px; |
314 | } | 314 | } |
315 | 315 | ||
316 | #mouette_ocean | 316 | #mouette_ocean |
317 | { | 317 | { |
318 | background-image: url("menu/mouette_ocean_mini.jpg"); | 318 | background-image: url("../menu/mouette_ocean_mini.jpg"); |
319 | width: 130px; | 319 | width: 130px; |
320 | height: 86px; | 320 | height: 86px; |
321 | margin: 3px 0px; | 321 | margin: 3px 0px; |
@@ -323,7 +323,7 @@ | |||
323 | 323 | ||
324 | #blonde | 324 | #blonde |
325 | { | 325 | { |
326 | background-image: url("menu/blonde_mini.jpg"); | 326 | background-image: url("../menu/blonde_mini.jpg"); |
327 | width: 130px; | 327 | width: 130px; |
328 | height: 118px; | 328 | height: 118px; |
329 | } | 329 | } |
diff --git a/public/main.js b/public/main.js index 9764394..f3fe6f0 100644 --- a/public/main.js +++ b/public/main.js | |||
@@ -4,7 +4,7 @@ function versMenu() | |||
4 | { | 4 | { |
5 | // ergonomique | 5 | // ergonomique |
6 | window.setTimeout("location=('index.php?page=menu');", 10000); | 6 | window.setTimeout("location=('index.php?page=menu');", 10000); |
7 | window.setTimeout(function(){location.href="index.php?page=menu"}, 3000); | 7 | //window.setTimeout(function(){location.href="index.php?page=menu"}, 10000); |
8 | } | 8 | } |
9 | 9 | ||
10 | function deconnexionAutomatique() | 10 | function deconnexionAutomatique() |
@@ -88,4 +88,24 @@ function nouveauMotdepasse(page) | |||
88 | { | 88 | { |
89 | confirm('Le mot de passe a été modifié.'); | 89 | confirm('Le mot de passe a été modifié.'); |
90 | window.setTimeout(location=('index.php?page=' + page + '&message=nouveau_mdp'), 0); | 90 | window.setTimeout(location=('index.php?page=' + page + '&message=nouveau_mdp'), 0); |
91 | } \ No newline at end of file | 91 | } |
92 | |||
93 | // envoie gros fichier ZIP | ||
94 | // si le fichier ne passe pas la limite de l'hébergeur (php.ini) | ||
95 | // l'ouvrir en javascript chaque envoyer progressivement | ||
96 | function extraireZIPetEnvoyerUnParUn() | ||
97 | { | ||
98 | // taille du fichier? | ||
99 | |||
100 | // taille limite autorisée? | ||
101 | // obtenue avant avec phpinfo() puis insérée dans le code JS | ||
102 | |||
103 | // si le fichier est plus gros que la limite: | ||
104 | // extraire l'archive | ||
105 | // envoyer les fichiers un par un par des requêtes AJAX | ||
106 | // le serveur peut aussi limiter le nombre de fichiers | ||
107 | // lors d'un envoie multiple | ||
108 | // en les envoyant un par un ça devrait être bon | ||
109 | |||
110 | // sinon ne rien faire et laisser l'envoi normal se faire | ||
111 | } | ||
diff --git a/view/album.php b/view/album.php index e2731a1..86f1e58 100644 --- a/view/album.php +++ b/view/album.php | |||
@@ -23,7 +23,7 @@ echo "\n"; | |||
23 | ?> | 23 | ?> |
24 | <header> | 24 | <header> |
25 | <div id="titre" > | 25 | <div id="titre" > |
26 | <span class="police_titre" ><?= $albumName ?></span> | 26 | <span class="police_titre" ><?= $Albums->oneAlbum['titre'] ?> - <?= $Albums->oneAlbum['annee'] ?></span> |
27 | </div> | 27 | </div> |
28 | <div id="photo" ></div> | 28 | <div id="photo" ></div> |
29 | </header> | 29 | </header> |
@@ -33,6 +33,25 @@ $header = ob_get_clean(); | |||
33 | // variable $content | 33 | // variable $content |
34 | ob_start(); | 34 | ob_start(); |
35 | ?> | 35 | ?> |
36 | <aside> | ||
37 | <div> | ||
38 | <p id="bouton_chronologie" >Chronologie</p> | ||
39 | <div id="chronologie" > | ||
40 | <!-- ajouter à chaque entrée une ancre et un lien soit vers l'ancre soit vers la page dédiée --> | ||
41 | <?php | ||
42 | //for($i = $Albums->fileListCount - 1; $i >= 0; $i--) | ||
43 | for($i = 0; $i < $Albums->fileListCount; $i++) | ||
44 | { | ||
45 | // menu dessous la mouette | ||
46 | // comporte un lien si fichier html existe, sinon une ancre | ||
47 | ?> | ||
48 | <p><a class="<?= $linkDiscoChrono[$i] ?>" href="index.php?<?= $lienAlbum[$i] ?>" ><?= $Albums->fileList[$i]['annee'] ?> - <?= $Albums->fileList[$i]['titre'] ?></a></p> | ||
49 | <?php | ||
50 | } | ||
51 | ?> | ||
52 | </div> | ||
53 | </div> | ||
54 | </aside> | ||
36 | <article id="albumHTML" > | 55 | <article id="albumHTML" > |
37 | <?= $album ?> | 56 | <?= $album ?> |
38 | </article> | 57 | </article> |
diff --git a/view/backup.php b/view/backup.php index b4339e4..9fce805 100644 --- a/view/backup.php +++ b/view/backup.php | |||
@@ -25,12 +25,13 @@ if(isset($_GET['action']) && $_GET['action'] == 'sauvegarde') | |||
25 | { | 25 | { |
26 | ob_start(); | 26 | ob_start(); |
27 | ?> | 27 | ?> |
28 | <p>Toutes les données du sites (textes, photos) ont été rassemblées dans un gros fichier que vous pouvez garder si vous le souhaitez sur votre ordinateur.</p> | 28 | <h2>Sauvegarde complète</h2> |
29 | <p>Vous pourrez l'utiliser plus tard pour restaurer le site dans l'état où il se trouve aujourd'hui. Ceci est utile dans le cas d'un changement d'hébergement ou dans le cas d'un problème affectant le serveur.</p> | 29 | <p>Toutes les données du sites (textes, photos) ont été rassemblées dans un unique fichier que vous pouvez conserver si vous le souhaitez sur votre ordinateur.</p> |
30 | <p>Ce fichier se nomme <i>melaineDATA.zip</i>.</p><br/> | 30 | <p>Vous pourrez l'utiliser plus tard pour restaurer le site dans l'état où il se trouve aujourd'hui ou pour récupérer des fichiers effacés ou perdus. Ceci est utile dans le cas d'un changement d'hébergement, d'un problème affectant le serveur, ou encore d'une mauvaise manipulation.</p> |
31 | <p>Ce fichier se nomme <i><?= $nomFichier ?></i>.</p> | ||
31 | 32 | ||
32 | <p><a href="data/melaineDATA.zip" style="border: 2px black ridge; padding: 2px;" >Cliquez ici pour télécharger</a></p><br/> | 33 | <button class="boutonBackup" ><a href="data/<?= $nomFichier ?>" >Le télécharger</a></button> |
33 | <p><a href="index.php?page=<?= $from ?>" >Retour au site</a></p> | 34 | <button class="boutonBackup" ><a class="boutonBackup" href="index.php?page=<?= $from ?>" >Retour au site</a></button> |
34 | <?php | 35 | <?php |
35 | $content = ob_get_clean(); | 36 | $content = ob_get_clean(); |
36 | 37 | ||
@@ -43,22 +44,26 @@ if(isset($_GET['action']) && $_GET['action'] == 'sauvegarde') | |||
43 | <?php | 44 | <?php |
44 | $erreur = ob_get_clean(); | 45 | $erreur = ob_get_clean(); |
45 | } | 46 | } |
47 | |||
46 | // page restauration | 48 | // page restauration |
49 | // attention à la taille maximale des fichiers téléchargés en fonction de l'hébergeur | ||
50 | // si le fichier est trop gros il faut l'ouvrir en javascript en envoyer les données petit à petit | ||
47 | elseif(isset($_GET['action']) && $_GET['action'] == 'restauration') | 51 | elseif(isset($_GET['action']) && $_GET['action'] == 'restauration') |
48 | { | 52 | { |
49 | ob_start(); | 53 | ob_start(); |
50 | ?> | 54 | ?> |
51 | <p>Restauration des données à partir d'une sauvegarde.</p> | 55 | <h2>Restauration des données à partir d'une sauvegarde.</h2> |
52 | <p>Vous devez avoir créé un fichier nommé <i>melaineDATA.zip</i><br/> | 56 | <p>Vous devez avoir créé précédemment un fichier <i>melaineDATA.zip</i><br/> |
53 | en cliquant sur <i>Extraire les données</i>.</p><br/> | 57 | à la page <i>Sauvegarder les données.</i></p><br/> |
54 | 58 | ||
55 | <form action="index.php?from=<?= $from ?>&action=insertion" method="post" > | 59 | <form method="post" enctype="multipart/form-data" action="index.php?from=<?= $from ?>&action=restauration" > |
56 | <input type="file" accept=".zip" ><br/> | 60 | <input type="file" name="archive" accept=".zip" class="boutonBackup" ><br/> |
57 | 61 | ||
58 | <!-- demande de confirmation en JS au submit --> | 62 | <!-- demande de confirmation en JS au submit --> |
59 | 63 | ||
60 | <input type="submit" value="Injecter les données" ><br/><br/> | 64 | <input type="submit" class="boutonBackup" value="Valider" ><br/><br/> |
61 | <a href="index.php?page=<?= $from ?>" >Retour au site</a> | 65 | <?= $message ?> |
66 | <button class="boutonBackup" ><a href="index.php?page=<?= $from ?>" >Retour au site</a></button> | ||
62 | </form> | 67 | </form> |
63 | <?php | 68 | <?php |
64 | $content = ob_get_clean(); | 69 | $content = ob_get_clean(); |
@@ -69,6 +74,9 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'restauration') | |||
69 | <head> | 74 | <head> |
70 | <meta charset="utf-8" /> | 75 | <meta charset="utf-8" /> |
71 | <title><?= $title ?></title> | 76 | <title><?= $title ?></title> |
77 | <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> --> | ||
78 | <link rel="icon" type="image/png" href="public/mouette-logo.png" > | ||
79 | <link rel="stylesheet" type="text/css" href="public/css/normalize.css" /> | ||
72 | <link rel="stylesheet" type="text/css" href="public/css/accueil.css" /> | 80 | <link rel="stylesheet" type="text/css" href="public/css/accueil.css" /> |
73 | <?php | 81 | <?php |
74 | if(isset($_GET['action']) && $_GET['action'] == 'restauration') | 82 | if(isset($_GET['action']) && $_GET['action'] == 'restauration') |
diff --git a/view/discographie.php b/view/discographie.php index 904201a..e234f58 100644 --- a/view/discographie.php +++ b/view/discographie.php | |||
@@ -158,9 +158,6 @@ for($i = 0; $i < $Albums->fileListCount; $i++) | |||
158 | </p> | 158 | </p> |
159 | <?php | 159 | <?php |
160 | } | 160 | } |
161 | ?> | ||
162 | <!-- </article> --> | ||
163 | <?php | ||
164 | 161 | ||
165 | // bouton pour modifier | 162 | // bouton pour modifier |
166 | if($_SESSION['admin'] == 1) | 163 | if($_SESSION['admin'] == 1) |
diff --git a/view/menu.php b/view/menu.php index c20acf9..4c9e341 100644 --- a/view/menu.php +++ b/view/menu.php | |||
@@ -4,7 +4,7 @@ | |||
4 | // variable $css | 4 | // variable $css |
5 | ob_start(); | 5 | ob_start(); |
6 | ?> | 6 | ?> |
7 | <link rel="stylesheet" type="text/css" href="public/<?= $page_actuelle ?>.css" /> | 7 | <link rel="stylesheet" type="text/css" href="public/css/<?= $page_actuelle ?>.css" /> |
8 | <?php | 8 | <?php |
9 | $css = ob_get_clean(); | 9 | $css = ob_get_clean(); |
10 | 10 | ||
@@ -25,8 +25,8 @@ echo "\n\n"; | |||
25 | </div> | 25 | </div> |
26 | </header> | 26 | </header> |
27 | <?php | 27 | <?php |
28 | $header = ob_get_clean(); | 28 | $header = ob_get_clean(); |
29 | 29 | ||
30 | // variable $content | 30 | // variable $content |
31 | ob_start(); | 31 | ob_start(); |
32 | echo "\n"; | 32 | echo "\n"; |
diff --git a/view/password.php b/view/password.php index d63e986..1509f68 100644 --- a/view/password.php +++ b/view/password.php | |||
@@ -38,6 +38,9 @@ ob_start(); | |||
38 | <input type="password" name="nouveauMotdepasse" required > | 38 | <input type="password" name="nouveauMotdepasse" required > |
39 | <br /><br /> | 39 | <br /><br /> |
40 | <input type="submit" value="Valider" > | 40 | <input type="submit" value="Valider" > |
41 | <a href="index.php?page=<?= $_GET['from'] ?>" > | ||
42 | <input type="button" value="Annuler" /> | ||
43 | </a> | ||
41 | </form> | 44 | </form> |
42 | <?php | 45 | <?php |
43 | $formulaireModifMDP = ob_get_clean(); | 46 | $formulaireModifMDP = ob_get_clean(); |
@@ -97,8 +100,7 @@ $warning = ob_get_clean(); | |||
97 | ob_start(); | 100 | ob_start(); |
98 | ?> | 101 | ?> |
99 | <p class="connexionFooter" > | 102 | <p class="connexionFooter" > |
100 | <i>N'oubliez de cliquer sur "déconnexion" quand vous aurez fini.</i><br /> | 103 | <i>N'oubliez de cliquer sur "déconnexion" quand vous aurez fini.</i> |
101 | <a href="index.php?page=<?= $_GET['from'] ?>" >Retour à la page précédente</a> | ||
102 | </p> | 104 | </p> |
103 | </div> | 105 | </div> |
104 | </body> | 106 | </body> |
diff --git a/view/template-formulaires.php b/view/template-formulaires.php index 7873500..d1d47c4 100644 --- a/view/template-formulaires.php +++ b/view/template-formulaires.php | |||
@@ -69,7 +69,9 @@ if($page_actuelle == 'discographie') | |||
69 | // barre d'outils à adapter au "custom build" | 69 | // barre d'outils à adapter au "custom build" |
70 | // la liste ici: lib/ckeditor5/src/ckeditor.js | 70 | // la liste ici: lib/ckeditor5/src/ckeditor.js |
71 | toolbar: { | 71 | toolbar: { |
72 | items: [ 'undo', 'redo', 'selectAll', '|', 'heading', '|', 'alignment', 'bulletedList', 'numberedList', 'todoList', 'blockQuote', 'horizontalLine', '-', 'bold', 'italic', 'underline', | 72 | items: [ 'undo', 'redo', 'selectAll', '|', 'heading', '|', 'alignment', 'bulletedList', 'numberedList', |
73 | //'todoList', | ||
74 | 'blockQuote', 'horizontalLine', '-', 'bold', 'italic', 'underline', | ||
73 | //'strikethrough', | 75 | //'strikethrough', |
74 | '|', | 76 | '|', |
75 | //'fontFamily', | 77 | //'fontFamily', |
@@ -149,8 +151,8 @@ if($page_actuelle == 'discographie') | |||
149 | // Headers supplémentaires envoyés avec la requête | 151 | // Headers supplémentaires envoyés avec la requête |
150 | // c'est ici qu'on installe les mécanismes de sécurités comme l'authentification et la protection au CSRF | 152 | // c'est ici qu'on installe les mécanismes de sécurités comme l'authentification et la protection au CSRF |
151 | headers: { | 153 | headers: { |
152 | 'X-CSRF-TOKEN': 'CSRF-Token', | 154 | //'X-CSRF-TOKEN': 'CSRF-Token', |
153 | Authorization: 'Bearer <JSON Web Token>' | 155 | //Authorization: 'Bearer <JSON Web Token>' |
154 | } | 156 | } |
155 | }, | 157 | }, |
156 | // formats acceptés par défaut: jpeg, png, gif, bmp, webp, tiff | 158 | // formats acceptés par défaut: jpeg, png, gif, bmp, webp, tiff |
diff --git a/view/template.php b/view/template.php index 9422736..4cf0e52 100644 --- a/view/template.php +++ b/view/template.php | |||
@@ -71,18 +71,18 @@ if($_SESSION['admin'] == 1) | |||
71 | 71 | ||
72 | <div id="modeAdmin" > | 72 | <div id="modeAdmin" > |
73 | <p>Vous êtes en mode administrateur. | 73 | <p>Vous êtes en mode administrateur. |
74 | <a id="options" >Options</a> | 74 | <!-- <button id="boutonOptions" >Options</button> --> |
75 | <a href="index.php?page=<?= $page_actuelle ?>&action=deconnexion" >Déconnexion</a> | 75 | <button><a href="index.php?page=<?= $page_actuelle ?>&action=deconnexion" >Déconnexion</a></button> |
76 | </p> | 76 | </p> |
77 | <div> | 77 | <div id="options" > |
78 | <p><a href="index.php?from=<?= $page_actuelle ?>&action=modif_mdp" > | 78 | <button class="boutonBackup" ><a href="index.php?from=<?= $page_actuelle ?>&action=modif_mdp" > |
79 | Changer le mot de passe de connexion.</a></p> | 79 | Changer de mot de passe</a></button> |
80 | <p><a href="index.php?from=<?= $page_actuelle ?>&action=sauvegarde" > | 80 | <button class="boutonBackup" ><a href="index.php?from=<?= $page_actuelle ?>&action=sauvegarde" > |
81 | Sauvegarder les données de tout le site.</a></p> | 81 | Sauvegarder les données</a></button> |
82 | <p><a href="index.php?from=<?= $page_actuelle ?>&action=restauration" >Restaurer les données avec une sauvegarde.</a></p> | 82 | <button class="boutonBackup" ><a href="index.php?from=<?= $page_actuelle ?>&action=restauration" >Les restaurer avec une sauvegarde</a></button> |
83 | <p><a href="data/melainePHP.zip" > | 83 | <button class="boutonBackup" ><a href="data/melainePHP.zip" > |
84 | Télécharger le code PHP pour migration. | 84 | Télécharger le code PHP |
85 | </a></p> | 85 | </a></button> |
86 | </div> | 86 | </div> |
87 | </div> | 87 | </div> |
88 | <?php | 88 | <?php |
diff --git a/à faire après livraison.txt b/à faire après livraison.txt index c283c22..c151c0d 100644 --- a/à faire après livraison.txt +++ b/à faire après livraison.txt | |||
@@ -1,7 +1,24 @@ | |||
1 | Le reste du site | 1 | remplacer le survol par un clic sur les smartphones |
2 | |||
3 | changer de format de sauvegarde (y a mieux que zip) | ||
4 | |||
5 | tri des albums selon l'année | ||
6 | (avec des plages de timestamps?) | ||
7 | |||
8 | Identification avec deux codes (login + mot de passe) | ||
9 | |||
10 | pages manquantes | ||
2 | 11 | ||
3 | liens sans http dans l'éditeur | 12 | liens sans http dans l'éditeur |
4 | 13 | ||
14 | zoom sur images | ||
15 | voir ici pour une galerie en css | ||
16 | https://www.guyom-design.com/blog/astuces/css/tuto_diapo_css/ | ||
17 | |||
18 | système d'onglets | ||
19 | |||
20 | onglets AJAX | ||
21 | |||
5 | plugin autosave | 22 | plugin autosave |
6 | 23 | ||
7 | Editeur "inline" ou "balloon block" | 24 | Editeur "inline" ou "balloon block" |
diff --git a/à faire avant livraison.txt b/à faire avant livraison.txt deleted file mode 100644 index 7823545..0000000 --- a/à faire avant livraison.txt +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | Sauvegarde des données !! | ||
2 | |||
3 | menu chronologie page album | ||
4 | |||
5 | remplacer l'encadré orange | ||
6 | |||
7 | tri des albums selon l'année | ||
8 | (avec des plages de timestamps?) | ||
9 | |||
10 | Identification avec deux codes (login + mot de passe) | ||