summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.php5
-rw-r--r--controller/Security.php8
-rw-r--r--controller/admin.php70
-rw-r--r--controller/backup.php16
-rw-r--r--controller/installation.php7
-rw-r--r--controller/password.php79
-rw-r--r--controller/visitor.php100
-rw-r--r--index.php30
-rw-r--r--model/Image.php4
-rw-r--r--public/css/accueil.css5
-rw-r--r--public/css/donnees_hors_editeur.css19
-rw-r--r--public/css/melaine.css107
-rw-r--r--public/css/pages_articles_simples.css244
-rw-r--r--public/header_images/blonde.jpgbin0 -> 39839 bytes
-rw-r--r--public/header_images/blonde_mini.jpgbin0 -> 22167 bytes
-rw-r--r--public/header_images/blonde_petit.jpgbin0 -> 29931 bytes
-rw-r--r--public/header_images/canoe.pngbin0 -> 58206 bytes
-rw-r--r--public/header_images/canoe_mini.pngbin0 -> 23013 bytes
-rw-r--r--public/header_images/canoe_petit.pngbin0 -> 37555 bytes
-rw-r--r--public/header_images/cavalier.jpgbin0 -> 32299 bytes
-rw-r--r--public/header_images/cavalier_mini.jpgbin0 -> 17202 bytes
-rw-r--r--public/header_images/cavalier_petit.jpgbin0 -> 24059 bytes
-rw-r--r--public/header_images/fille_qui_tombe.jpgbin0 -> 22520 bytes
-rw-r--r--public/header_images/fille_qui_tombe_mini.jpgbin0 -> 14105 bytes
-rw-r--r--public/header_images/fille_qui_tombe_petit.jpgbin0 -> 17566 bytes
-rw-r--r--public/header_images/melaine.png (renamed from public/melaine/photo.png)bin233561 -> 233561 bytes
-rw-r--r--public/header_images/melaine_mini.png (renamed from public/melaine/photo_mini.png)bin66245 -> 66245 bytes
-rw-r--r--public/header_images/melaine_petit.png (renamed from public/melaine/photo_petit.png)bin136131 -> 136131 bytes
-rw-r--r--public/header_images/mouette_ocean.jpgbin0 -> 22830 bytes
-rw-r--r--public/header_images/mouette_ocean_mini.jpgbin0 -> 13174 bytes
-rw-r--r--public/header_images/mouette_ocean_petit.jpgbin0 -> 17474 bytes
-rw-r--r--public/header_images/sirene.jpgbin0 -> 27544 bytes
-rw-r--r--public/header_images/sirene_mini.jpgbin0 -> 14850 bytes
-rw-r--r--public/header_images/sirene_petit.jpgbin0 -> 20385 bytes
-rw-r--r--view/backup.php13
-rw-r--r--view/discographie.php2
-rw-r--r--view/menu.php2
-rw-r--r--view/nav.php18
-rw-r--r--view/pageArticlesSimples.php (renamed from view/melaine.php)16
-rw-r--r--view/password.php16
-rw-r--r--view/template-formulaires.php8
-rw-r--r--view/template.php12
-rw-r--r--à faire après livraison.txt30
43 files changed, 547 insertions, 264 deletions
diff --git a/config.php b/config.php
index be894e9..4d7dcfe 100644
--- a/config.php
+++ b/config.php
@@ -3,6 +3,11 @@
3// écrire 'gd' ou 'imagick' 3// écrire 'gd' ou 'imagick'
4$imageLibrary = 'imagick'; 4$imageLibrary = 'imagick';
5 5
6// format des sauvegardes à la création
7// écrire 'zip' ou 'tar' ou 'phar'
8$archiveFormat = 'zip';
9// seul zip est supporté pour l'instant
10
6// taille max des fichiers à adapter au php.ini 11// taille max des fichiers à adapter au php.ini
7$maxWeight = 2000000; 12$maxWeight = 2000000;
8 13
diff --git a/controller/Security.php b/controller/Security.php
index 6ea121c..c53cdc6 100644
--- a/controller/Security.php
+++ b/controller/Security.php
@@ -14,10 +14,16 @@ class Security
14 ); 14 );
15 private static $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs 15 private static $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs
16 16
17 public static function secureString($chaine) 17 public static function secureString(string $chaine): string
18 { 18 {
19 $chaine = htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed); 19 $chaine = htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed);
20 $chaine = trim($chaine); // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur) 20 $chaine = trim($chaine); // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur)
21 return $chaine; 21 return $chaine;
22 } 22 }
23} 23}
24
25function removeSpacesTabsCRLF(string $chaine): string
26{
27 $cibles = [' ', "\t", "\n", "\r"]; // doubles quotes !!
28 return(str_replace($cibles, '', $chaine));
29}
diff --git a/controller/admin.php b/controller/admin.php
index b8ef7ff..ee5c217 100644
--- a/controller/admin.php
+++ b/controller/admin.php
@@ -4,12 +4,12 @@
4// utilisation du site en écriture (admin uniquement) 4// utilisation du site en écriture (admin uniquement)
5// éditeur ouvert ou suppression d'un élément 5// éditeur ouvert ou suppression d'un élément
6 6
7function melaineEdit($fileCode, $suppression) 7function pageArticlesSimplesAdmin(string $page, string $title, string $headerPaintedTitle, $fileCode, int $suppression)
8{ 8{
9 $page_actuelle = "melaine"; 9 $headerImage = '<div class="photo" id="photo_' . $page . '" ></div>';
10 10
11 // infos sur les fichiers 11 // infos sur les fichiers
12 $Articles = new Article($page_actuelle); 12 $Articles = new Article($page);
13 13
14 // nouvel article 14 // nouvel article
15 if($fileCode == '') 15 if($fileCode == '')
@@ -29,7 +29,7 @@ function melaineEdit($fileCode, $suppression)
29 $Articles->delete(); 29 $Articles->delete();
30 30
31 // redirection immédiate avant affichage 31 // redirection immédiate avant affichage
32 header('Location: index.php?page=' . $page_actuelle); 32 header('Location: index.php?page=' . $page);
33 exit(); 33 exit();
34 } 34 }
35 // modification 35 // modification
@@ -68,18 +68,70 @@ function melaineEdit($fileCode, $suppression)
68 require('view/template-formulaires.php'); 68 require('view/template-formulaires.php');
69 // variables $css, $js, $header et $content, 69 // variables $css, $js, $header et $content,
70 // $content contient $articles et $editeurHTML 70 // $content contient $articles et $editeurHTML
71 require('view/melaine.php'); 71 require('view/pageArticlesSimples.php');
72 // fin de l'assemblage 72 // fin de l'assemblage
73 require('view/template.php'); 73 require('view/template.php');
74} 74}
75 75
76function melaineEdit($fileCode, $suppression)
77{
78 $page = "melaine";
79 $title = "Mais qui est Melaine Favennec?";
80 $headerPaintedTitle = 'Melaine Favennec';
81 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
82}
83function concertsEdit($fileCode, $suppression)
84{
85 $page = "concerts";
86 $title = "Concerts";
87 $headerPaintedTitle = 'Concerts';
88 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
89}
90function presseEdit($fileCode, $suppression)
91{
92 $page = "presse";
93 $title = "La presse";
94 $headerPaintedTitle = 'La Presse';
95 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
96}
97function ateliersEdit($fileCode, $suppression)
98{
99 $page = "ateliers";
100 $title = "Ateliers";
101 $headerPaintedTitle = 'Les ateliers de Melaine';
102 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
103}
104function liensEdit($fileCode, $suppression)
105{
106 $page = "liens";
107 $title = "Liens";
108 $headerPaintedTitle = 'Liens';
109 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
110}
111function peintureEdit($fileCode, $suppression)
112{
113 $page = "peinture";
114 $title = "peinture";
115 $headerPaintedTitle = 'Celtic Boats';
116 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
117}
118function archivesEdit($fileCode, $suppression)
119{
120 $page = "archives";
121 $title = "Archives";
122 $headerPaintedTitle = 'Archives';
123 pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression);
124}
125
126
127// page plus complexe que les autres
76function discoEdit($fileCode, $suppression) 128function discoEdit($fileCode, $suppression)
77{ 129{
78 $page_actuelle = "discographie"; 130 $page = "discographie";
79 $title = "Discographie"; 131 $title = "Discographie";
80 132
81 // modèle 133 // modèle
82 $Albums = new Album($page_actuelle); 134 $Albums = new Album($page);
83 $Albums->makeFileList(); 135 $Albums->makeFileList();
84 136
85 // contenu: JSON, HTML, noms et chemins des fichiers 137 // contenu: JSON, HTML, noms et chemins des fichiers
@@ -109,7 +161,7 @@ function discoEdit($fileCode, $suppression)
109 if($suppression) 161 if($suppression)
110 { 162 {
111 $Albums->delete(); 163 $Albums->delete();
112 header('Location: index.php?page=' . $page_actuelle); 164 header('Location: index.php?page=' . $page);
113 exit(); 165 exit();
114 } 166 }
115 // modification 167 // modification
@@ -132,7 +184,7 @@ function discoEdit($fileCode, $suppression)
132 // image affichée à côté des formulaires 184 // image affichée à côté des formulaires
133 if(!empty($vignette[2])) 185 if(!empty($vignette[2]))
134 { 186 {
135 $imageFormulaire = '<img class="imageFormulaire" src="data/' . $page_actuelle . '/images/' . $vignette[2] . '" ><br/>'; 187 $imageFormulaire = '<img class="imageFormulaire" src="data/' . $page . '/images/' . $vignette[2] . '" ><br/>';
136 } 188 }
137 else 189 else
138 { 190 {
diff --git a/controller/backup.php b/controller/backup.php
index 81d72b9..4fb01ef 100644
--- a/controller/backup.php
+++ b/controller/backup.php
@@ -8,20 +8,23 @@ function sauvegarder($from)
8 8
9 $cheminDestination = "data/"; 9 $cheminDestination = "data/";
10 $date = date("d-m-Y", time()); 10 $date = date("d-m-Y", time());
11 $nomFichier = "melaineDATA_" . $date . ".zip"; 11 $nomFichier = "melaineDATA_" . $date;
12 // ne prendre que les dossiers pour exclure les fichiers password.txt, melaineDATA.zip et melainePHP.zip existant 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' ]; 13 $dossiersCibles = [ 'data/archives', 'data/concerts', 'data/liens', 'data/presse', 'data/ateliers', 'data/discographie', 'data/melaine', 'data/peinture' ];
14 //$fichiersALaRacine = []; 14 //$fichiersALaRacine = [];
15 15
16 createZip($cheminDestination, $nomFichier, $dossiersCibles); 16 createZip($cheminDestination, $nomFichier, $dossiersCibles);
17 17
18 global $archiveFormat;
19 $nomFichier = $nomFichier . '.' . $archiveFormat;
20
18 require('view/backup.php'); 21 require('view/backup.php');
19} 22}
20 23
21function creerMelainePHP() 24function creerMelainePHP()
22{ 25{
23 $cheminDestination = 'data/'; 26 $cheminDestination = 'data/';
24 $nomFichier = "melainePHP.zip"; 27 $nomFichier = "melainePHP";
25 // tous les dossiers sauf data et .git 28 // tous les dossiers sauf data et .git
26 $dossiersCibles = ['model', 'view', 'controller', 'public', 'lib']; 29 $dossiersCibles = ['model', 'view', 'controller', 'public', 'lib'];
27 $fichiersALaRacine = ['*.php', '.htaccess', '*.txt']; // robots? 30 $fichiersALaRacine = ['*.php', '.htaccess', '*.txt']; // robots?
@@ -34,6 +37,9 @@ function creerMelainePHP()
34// le quatrième est optionnel et concerne les fichiers à la racine 37// le quatrième est optionnel et concerne les fichiers à la racine
35function createZip($destinationPath, $zipFileName, array $targetDirectories, array $allPattern = []) 38function createZip($destinationPath, $zipFileName, array $targetDirectories, array $allPattern = [])
36{ 39{
40 global $archiveFormat; // choix du format
41 $zipFileName = $zipFileName . '.' . $archiveFormat;
42
37 try 43 try
38 { 44 {
39 $Zip = new ZipArchive(); 45 $Zip = new ZipArchive();
@@ -101,6 +107,8 @@ function restaurer($from)
101 // recharger la même page en écrivant les données 107 // recharger la même page en écrivant les données
102 if(isset($_FILES['archive']) && $_FILES['archive']['error'] == 0) 108 if(isset($_FILES['archive']) && $_FILES['archive']['error'] == 0)
103 { 109 {
110 // détecter le format (zip ou autre)
111
104 // une copie du zip est conservée dans data/ au cas où 112 // une copie du zip est conservée dans data/ au cas où
105 move_uploaded_file($_FILES['archive']['tmp_name'], 'data/' . $_FILES['archive']['name']); 113 move_uploaded_file($_FILES['archive']['tmp_name'], 'data/' . $_FILES['archive']['name']);
106 chmod('data/' . $_FILES['archive']['name'], 0666); 114 chmod('data/' . $_FILES['archive']['name'], 0666);
@@ -117,10 +125,6 @@ function restaurer($from)
117 echo($e); 125 echo($e);
118 die(); 126 die();
119 } 127 }
120
121 //var_dump($Zip->open($nomFichier, ZipArchive::RDONLY));
122 //var_dump(ZipArchive::ER_NOENT);
123
124 if($Zip->open($nomFichier, ZipArchive::RDONLY) === TRUE) 128 if($Zip->open($nomFichier, ZipArchive::RDONLY) === TRUE)
125 { 129 {
126 $j = 0; 130 $j = 0;
diff --git a/controller/installation.php b/controller/installation.php
index 6037e17..bf6826d 100644
--- a/controller/installation.php
+++ b/controller/installation.php
@@ -103,12 +103,6 @@ function installation()
103 mkdir('data/discographie/images-mini'); 103 mkdir('data/discographie/images-mini');
104 chmod('data/discographie/images-mini', $droitsDossiers); 104 chmod('data/discographie/images-mini', $droitsDossiers);
105 } 105 }
106 // fichier password.txt
107 if(!file_exists('data/password.txt'))
108 {
109 touch('data/password.txt');
110 chmod('data/password.txt', 0600);
111 }
112 106
113 // créer le melainePHP.zip 107 // créer le melainePHP.zip
114 if(!file_exists("data/melainePHP.zip")) 108 if(!file_exists("data/melainePHP.zip"))
@@ -116,7 +110,6 @@ function installation()
116 require('controller/backup.php'); 110 require('controller/backup.php');
117 creerMelainePHP(); 111 creerMelainePHP();
118 } 112 }
119
120 // le modèle donnera les droits 0666 (octal) aux nouveaux fichiers à l'intérieur des dossiers 113 // le modèle donnera les droits 0666 (octal) aux nouveaux fichiers à l'intérieur des dossiers
121 114
122 // création d'un mot de passe si password.txt est vide 115 // création d'un mot de passe si password.txt est vide
diff --git a/controller/password.php b/controller/password.php
index 4ca9f4f..8f6a875 100644
--- a/controller/password.php
+++ b/controller/password.php
@@ -5,11 +5,25 @@
5// affichage 5// affichage
6function createPassword() 6function createPassword()
7{ 7{
8 // si installation() vient de créer un fichier vide 8 // création du fichier
9 $hashedPassword = trim(file_get_contents('data/password.txt')); 9 if(!file_exists('data/password.txt'))
10 {
11 touch('data/password.txt');
12 chmod('data/password.txt', 0600);
13 }
14
15 // lecture
16 $hashedPassword = file_get_contents('data/password.txt');
17 if($hashedPassword === false)
18 {
19 echo('Erreur: ouverture du fichier password.txt impossible.');
20 exit();
21 }
22
23 // création du mot de passe
10 if(empty($hashedPassword)) 24 if(empty($hashedPassword))
11 { 25 {
12 // paranoïa 26 // paranoïa?
13 if(isset($_SESSION['admin'])) 27 if(isset($_SESSION['admin']))
14 { 28 {
15 unset($_SESSION['admin']); 29 unset($_SESSION['admin']);
@@ -17,23 +31,31 @@ function createPassword()
17 exit(); 31 exit();
18 } 32 }
19 33
20 // au rechargement: un mot de passe a été saisi 34 // au rechargement après saisi
21 // les espaces/tabulations sont considérés commes des erreurs 35 // impossible d'entrer un espace ou une tabulation et de valider par erreur
22 if(isset($_POST['motdepasse']) && !empty(trim($_POST['motdepasse']))) 36 if(isset($_POST['motdepasse']) && !empty($_POST['motdepasse']))
37 {
38 // caractères non désirés supprimés
39 require('controller/Security.php');
40 $password = Security::secureString($_POST['motdepasse']);
41 $password = removeSpacesTabsCRLF($_POST['motdepasse']);
42 }
43 // enregistrement
44 if(isset($password) && $password == $_POST['motdepasse'])
23 { 45 {
24 // enregistrement
25 hashNewPassword($_POST['motdepasse']); 46 hashNewPassword($_POST['motdepasse']);
26 header('Location: index.php'); 47 header('Location: index.php');
27 } 48 }
28 // 1ère fois 49 // 1ère fois
29 else 50 else
30 { 51 {
31 $title = "Créer un mot de passe"; 52 $title = 'Créer un mot de passe';
32 $subHeading = "Veuillez choisir le mot de passe que vous utiliserez pour gérer le site."; 53 $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.';
33 54
34 require('view/password.php'); 55 require('view/password.php');
35 56
36 echo($header); 57 echo($header);
58 echo($errorBadCharacters);
37 echo($formulaireNouveauMDP); 59 echo($formulaireNouveauMDP);
38 echo($warning); 60 echo($warning);
39 } 61 }
@@ -103,37 +125,40 @@ function changePassword()
103 $title = "Nouveau mot de passe"; 125 $title = "Nouveau mot de passe";
104 $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; 126 $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau.";
105 127
106 // cette page utilise la même vue que la fonction connexion() dans controller/visiteur.php
107 require('view/password.php'); 128 require('view/password.php');
108
109 echo($header); 129 echo($header);
110 130
111 // traitements: vérification ancien mot de passe et choix du nouveau 131 // conformité du nouveau mot de passe
132 if(isset($_POST['nouveauMotdepasse']) && !empty($_POST['nouveauMotdepasse']))
133 {
134 require('controller/Security.php');
135 $newPassword = Security::secureString($_POST['nouveauMotdepasse']);
136 $newPassword = removeSpacesTabsCRLF($_POST['nouveauMotdepasse']);
137 }
138
112 // bon mot de passe 139 // bon mot de passe
113 //if(isset ($_POST["ancienMotdepasse"]) AND $_POST["ancienMotdepasse"] == $secret) 140 if(isset($newPassword) && $newPassword === $_POST['nouveauMotdepasse']
114 if(isset ($_POST["ancienMotdepasse"]) AND testPassword($_POST["ancienMotdepasse"])) 141 && isset ($_POST["ancienMotdepasse"]) AND testPassword($_POST["ancienMotdepasse"]))
115 { 142 {
116 // enregistrement 143 // enregistrement et confirmation
117 hashNewPassword($_POST["nouveauMotdepasse"]); 144 hashNewPassword($_POST["nouveauMotdepasse"]);
118 145 echo($message);
119 // confirmation
120 echo($message);
121 //exit();
122
123 /*header('Location: index.php?page=' . $_GET['from'] . '&message=nouveau_mdp');
124 exit();*/
125 } 146 }
126
127 // mauvais mot de passe 147 // mauvais mot de passe
128 elseif(isset ($_POST["ancienMotdepasse"]) AND !testPassword($_POST["ancienMotdepasse"])) 148 elseif(isset ($_POST["ancienMotdepasse"]) AND !testPassword($_POST["ancienMotdepasse"]))
129 { 149 {
130 // défense aux attaques par force brute 150 // défense aux attaques par force brute
131 // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site 151 // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site
132 echo($erreurMDP); 152 echo($errorPassword);
133 sleep(1); 153 sleep(1);
134 echo($formulaireModifMDP); 154 echo($formulaireModifMDP);
135 } 155 }
136 156 // erreur de conformité
157 elseif(isset($newPassword) && $newPassword !== $_POST['nouveauMotdepasse'])
158 {
159 echo($errorBadCharacters);
160 echo($formulaireModifMDP);
161 }
137 // première arrivée sur la page 162 // première arrivée sur la page
138 else 163 else
139 { 164 {
@@ -146,7 +171,7 @@ function changePassword()
146 171
147 172
148// hachage 173// hachage
149function hashNewPassword($newPassword) 174function hashNewPassword(string $newPassword)
150{ 175{
151 // "réparation" des espaces accidentels 176 // "réparation" des espaces accidentels
152 $newPassword= trim($newPassword); 177 $newPassword= trim($newPassword);
@@ -160,7 +185,7 @@ function hashNewPassword($newPassword)
160 chmod('data/password.txt', 0600); 185 chmod('data/password.txt', 0600);
161} 186}
162 187
163function testPassword($password) 188function testPassword(string $password): bool
164{ 189{
165 // lecture 190 // lecture
166 $oldHashedPassword = file_get_contents('data/password.txt'); 191 $oldHashedPassword = file_get_contents('data/password.txt');
diff --git a/controller/visitor.php b/controller/visitor.php
index f0dc877..aae15a7 100644
--- a/controller/visitor.php
+++ b/controller/visitor.php
@@ -7,7 +7,7 @@
7function accueil() 7function accueil()
8{ 8{
9 $title = "Bienvenue sur le site de Melaine Favennec"; 9 $title = "Bienvenue sur le site de Melaine Favennec";
10 $page_actuelle = "accueil"; 10 $page = "accueil";
11 $content = ''; 11 $content = '';
12 12
13 // variables $js et $header 13 // variables $js et $header
@@ -19,7 +19,7 @@ function accueil()
19function menu() 19function menu()
20{ 20{
21 $title = "Melaine Favennec - menu BD"; 21 $title = "Melaine Favennec - menu BD";
22 $page_actuelle = "menu"; 22 $page = "menu";
23 23
24 // variables $css, $js, $header et $content 24 // variables $css, $js, $header et $content
25 require('view/menu.php'); 25 require('view/menu.php');
@@ -27,38 +27,91 @@ function menu()
27 require('view/template.php'); 27 require('view/template.php');
28} 28}
29 29
30function melaineVisitor() 30// toutes celles du menu sauf: menu et discographie
31function pageArticlesSimplesVisitor(string $page, string $title, string $headerPaintedTitle)
31{ 32{
32 $page_actuelle = "melaine"; 33 $headerImage = '<div class="photo" id="photo_' . $page . '" ></div>';
33 $title = "Mais qui est Melaine Favennec?";
34 34
35 // infos sur les fichiers 35 // infos sur les fichiers $Articles->fileList
36 $Articles = new Article($page_actuelle); 36 $Articles = new Article($page);
37 37
38 // données des dates 38 // données des dates
39 //print_r($Articles->fileList[$i]['date']); 39 //print_r($Articles->fileList[$i]['date']);
40 //getdate($Albums->fileList[$i]['fileCode']); 40 //getdate($Albums->fileList[$i]['fileCode']);
41 41
42 // ajout des dones dans $Articles->fileList['content'] 42 // si la page n'est pas vide
43 if(!empty($Articles->fileList)) 43 if(!empty($Articles->fileList))
44 { 44 {
45 // données dans $Articles->fileList['content']
45 $Articles->readAll(); 46 $Articles->readAll();
46 $Articles->fileList = array_reverse($Articles->fileList); 47 $Articles->fileList = array_reverse($Articles->fileList);
47 } 48 }
48 49
49 // variables $css, $js, $header et $content 50 // variables $css, $js, $header et $content
50 require('view/melaine.php'); 51 require('view/pageArticlesSimples.php');
51 // HTML 52 // HTML
52 require('view/template.php'); 53 require('view/template.php');
53} 54}
54 55
56function melaineVisitor()
57{
58 $page = "melaine";
59 $title = "Mais qui est Melaine Favennec?";
60 $headerPaintedTitle = 'Melaine Favennec';
61 pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle);
62}
63function concertsVisitor()
64{
65 $page = "concerts";
66 $title = "Concerts";
67 $headerPaintedTitle = 'Concerts';
68 pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle);
69}
70function presseVisitor()
71{
72 $page = "presse";
73 $title = "La presse";
74 $headerPaintedTitle = 'La Presse';
75 pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle);
76}
77function ateliersVisitor()
78{
79 $page = "ateliers";
80 $title = "Ateliers";
81 $headerPaintedTitle = 'Les ateliers de Melaine';
82 pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle);
83}
84function liensVisitor()
85{
86 $page = "liens";
87 $title = "Liens";
88 $headerPaintedTitle = 'Liens';
89 pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle);
90}
91function peintureVisitor()
92{
93 $page = "peinture";
94 $title = "peinture";
95 $headerPaintedTitle = 'Celtic Boats';
96 pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle);
97}
98function archivesVisitor()
99{
100 $page = "archives";
101 $title = "Archives";
102 $headerPaintedTitle = 'Archives';
103 pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle);
104}
105
106
107// page plus complexe que les autres
55function discoVisitor() 108function discoVisitor()
56{ 109{
57 $page_actuelle = "discographie"; 110 $page = "discographie";
58 $title = "Discographie"; 111 $title = "Discographie";
59 112
60 // modèle 113 // modèle
61 $Albums = new Album($page_actuelle); 114 $Albums = new Album($page);
62 //var_dump($Albums->fileList); die(); 115 //var_dump($Albums->fileList); die();
63 116
64 // on récupère tout: JSON, HTML, noms et chemins des fichiers 117 // on récupère tout: JSON, HTML, noms et chemins des fichiers
@@ -117,27 +170,27 @@ function discoVisitor()
117// page d'un album 170// page d'un album
118function album($fileCode) 171function album($fileCode)
119{ 172{
120 $page_actuelle = 'discographie'; // ??? 173 $page = 'discographie'; // = nom du dossier où sont les données
121 174
122 $Albums = new Album($page_actuelle); 175 $Albums = new Album($page);
123 $Albums->getAllJSON(); 176 $Albums->getAllJSON();
124 $Albums->fileCode = $fileCode; 177 $Albums->fileCode = $fileCode;
125 $Albums->readOne(); 178 $Albums->readOne();
126 179
127 //var_dump($Albums); die(); 180 $title = $Albums->oneAlbum['titre'];
128
129 $album = $Albums->oneAlbum['HTMLcontent']; 181 $album = $Albums->oneAlbum['HTMLcontent'];
130 //$album = Album::readOneHTML($fileCode);
131 182
132 for($i = 0; $i < $Albums->fileListCount; $i++) 183 for($i = 0; $i < $Albums->fileListCount; $i++)
133 { 184 {
134 if(file_exists('data/discographie/html/' . $Albums->fileList[$i]['fileCode'] . '.html')) 185 if(file_exists('data/discographie/html/' . $Albums->fileList[$i]['fileCode'] . '.html'))
135 { 186 {
136 $lienAlbum[$i] = 'page=album&file_code=' . $Albums->fileList[$i]['fileCode']; 187 $lienAlbum[$i] = 'page=album&file_code=' . $Albums->fileList[$i]['fileCode'];
188 $linkDiscoChrono[$i] = 'linkChrono'; // pour le css
137 } 189 }
138 else 190 else
139 { 191 {
140 $lienAlbum[$i] = 'page=discographie#' . $Albums->fileList[$i]['titre']; 192 $lienAlbum[$i] = 'page=discographie#' . $Albums->fileList[$i]['titre'];
193 $linkDiscoChrono[$i] = 'noLinkChrono'; // pour le css
141 } 194 }
142 } 195 }
143 196
@@ -146,18 +199,3 @@ function album($fileCode)
146 // HTML 199 // HTML
147 require('view/template.php'); 200 require('view/template.php');
148} 201}
149
150function presse()
151{}
152
153function ateliers()
154{}
155
156function liens()
157{}
158
159function peinture()
160{}
161
162function archives()
163{} \ No newline at end of file
diff --git a/index.php b/index.php
index c37ffc1..ea50afe 100644
--- a/index.php
+++ b/index.php
@@ -4,8 +4,10 @@
4// routeur MVC ou controlleur principal 4// routeur MVC ou controlleur principal
5// il traite les GET et passe la main aux contrôleurs 5// il traite les GET et passe la main aux contrôleurs
6 6
7declare(strict_types=1);
7session_start(); 8session_start();
8 9
10// erreurs affichées au rechargement (ça concerne une partie des erreurs)
9if(!empty($_SESSION['erreur'])) 11if(!empty($_SESSION['erreur']))
10{ 12{
11 echo('<script>alert(\'' . $_SESSION['erreur'] . '\');</script>'); 13 echo('<script>alert(\'' . $_SESSION['erreur'] . '\');</script>');
@@ -113,6 +115,8 @@ else
113// page du site demandée 115// page du site demandée
114if(isset($_GET['page'])) 116if(isset($_GET['page']))
115{ 117{
118 $pagesArticlesSimples = ['melaine', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'];
119
116 // page d'accueil 120 // page d'accueil
117 if($_GET['page'] == 'accueil') 121 if($_GET['page'] == 'accueil')
118 { 122 {
@@ -123,9 +127,11 @@ if(isset($_GET['page']))
123 { 127 {
124 menu(); 128 menu();
125 } 129 }
126 // page melaine 130 // pages avec articles simples
127 elseif($_GET['page'] == 'melaine') 131 elseif(in_array($_GET['page'], $pagesArticlesSimples))
128 { 132 {
133 $fonctionVisitor = $_GET['page'] . 'Visitor';
134 $fonctionEdit = $_GET['page'] . 'Edit';
129 // cas de l'ouverture de l'éditeur pour modification: 135 // cas de l'ouverture de l'éditeur pour modification:
130 // on récupère le GET qui sera placé dans une session 136 // on récupère le GET qui sera placé dans une session
131 // GET, POST, cookies => navigation (utiles au visiteur) 137 // GET, POST, cookies => navigation (utiles au visiteur)
@@ -136,30 +142,35 @@ if(isset($_GET['page']))
136 // rédaction 142 // rédaction
137 if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor') 143 if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor')
138 { 144 {
139 //echo($_GET['file_code']); die();
140
141 // modification 145 // modification
142 if(isset($_GET['file_code']) || !empty($_GET['file_code'])) 146 if(isset($_GET['file_code']) || !empty($_GET['file_code']))
143 { 147 {
144 melaineEdit($_GET['file_code'], 0); 148 //melaineEdit($_GET['file_code'], 0);
149 $fonctionEdit($_GET['file_code'], 0);
145 } 150 }
146 // nouvel article 151 // nouvel article
147 else 152 else
148 { 153 {
149 melaineEdit('', 0); 154 //melaineEdit('', 0);
155 $fonctionEdit('', 0);
150 } 156 }
151 } 157 }
152 // suppression 158 // suppression
153 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression') 159 else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression')
154 { 160 {
155 melaineEdit($_GET['file_code'], 1); 161 //melaineEdit($_GET['file_code'], 1);
162 $fonctionEdit($_GET['file_code'], 1);
156 } 163 }
157 else 164 else
158 { 165 {
159 melaineVisitor(); 166 //melaineVisitor();
167 $fonctionVisitor();
160 } 168 }
169
170 if($_GET['page'] == 'melaine')
171 {}
161 } 172 }
162 // page discographie 173 // page discographie (avec albums et articles)
163 elseif($_GET['page'] == 'discographie') 174 elseif($_GET['page'] == 'discographie')
164 { 175 {
165 // rédaction 176 // rédaction
@@ -214,7 +225,6 @@ elseif($_SESSION['admin'] == 1 && isset($_GET['action']))
214{ 225{
215 if($_GET['action'] == 'modif_mdp') 226 if($_GET['action'] == 'modif_mdp')
216 { 227 {
217 //changePassword($secret);
218 changePassword(); 228 changePassword();
219 } 229 }
220 else 230 else
diff --git a/model/Image.php b/model/Image.php
index 793bd8d..d94e95d 100644
--- a/model/Image.php
+++ b/model/Image.php
@@ -45,12 +45,12 @@ class Image
45 } 45 }
46 else 46 else
47 { 47 {
48 $this->erreur = 'erreur du serveur: le fichier téléchargé est trop lourd, poids max = ' . self::MAX_WEIGHT . ' octets'; 48 $this->erreur = 'erreur du serveur: le fichier téléchargé est trop lourd, poids max = ' . $maxWeight . ' octets';
49 } 49 }
50 } 50 }
51 else 51 else
52 { 52 {
53 $this->erreur = 'erreur du serveur: le fichier téléchargé est trop lourd, poids max = ' . self::MAX_WEIGHT . ' octets'; 53 $this->erreur = 'erreur du serveur: le fichier téléchargé est trop lourd, poids max = ' . $maxWeight . ' octets';
54 } 54 }
55 55
56 // retour des rêquetes AJAX 56 // retour des rêquetes AJAX
diff --git a/public/css/accueil.css b/public/css/accueil.css
index 8f7f8c7..8c8ff35 100644
--- a/public/css/accueil.css
+++ b/public/css/accueil.css
@@ -99,12 +99,13 @@ h3
99{ 99{
100 background-color: #a8b3d9; 100 background-color: #a8b3d9;
101 padding: 2px 0px; 101 padding: 2px 0px;
102 margin-bottom: 15px;
102} 103}
103 104
104form 105form
105{ 106{
106 padding-bottom: 14px; 107 padding-bottom: 14px;
107 border-bottom: 1px black solid; 108 /*border-bottom: 1px black solid;*/
108} 109}
109 110
110#courriel 111#courriel
@@ -201,6 +202,7 @@ form
201 color: red; 202 color: red;
202 font-size: 90%; 203 font-size: 90%;
203 text-align: center; 204 text-align: center;
205 padding-bottom: 10px;
204} 206}
205 207
206.connexionFormulaire 208.connexionFormulaire
@@ -358,6 +360,7 @@ form
358 360
359 header 361 header
360 { 362 {
363 margin: 0px 30px;
361 padding-top: 61px; 364 padding-top: 61px;
362 } 365 }
363 366
diff --git a/public/css/donnees_hors_editeur.css b/public/css/donnees_hors_editeur.css
index 7b377ea..25436a4 100644
--- a/public/css/donnees_hors_editeur.css
+++ b/public/css/donnees_hors_editeur.css
@@ -24,8 +24,9 @@ input[type="checkbox"]:checked{border: none; background: #26ab33;}
24.table td{border: 1px grey solid; padding: 7px; min-width: 30px;} 24.table td{border: 1px grey solid; padding: 7px; min-width: 30px;}
25td p{margin: 0px;} 25td p{margin: 0px;}
26 26
27.image{margin: 0px;text-align: center;margin: auto;height: 100%;} 27.image{width: fit-content;margin: 0px;text-align: center;margin: auto;/*height: 100%;*/}
28.image img{width: 100%;} 28.image img{width: 100%;}
29/*.image:not(.image_resized) img{width: auto;}*/
29.image-style-side{float: right;} 30.image-style-side{float: right;}
30.image-style-side:not(.image_resized){max-width: 50%;} 31.image-style-side:not(.image_resized){max-width: 50%;}
31.image>figcaption{padding: 7px; text-align: center; font-size: small; background-color: #f0f0f0;} 32.image>figcaption{padding: 7px; text-align: center; font-size: small; background-color: #f0f0f0;}
@@ -35,22 +36,26 @@ article:after{content: ""; display: block; clear: both;}
35 36
36iframe{min-width: 400px; min-height: 300px; max-width: 1200px; max-height: 900px;} 37iframe{min-width: 400px; min-height: 300px; max-width: 1200px; max-height: 900px;}
37 38
38/*@media screen and (max-width: 1000px) 39
40
41
42
43@media screen and (max-width: 1000px)
39{ 44{
40 img{max-width: 900px;} 45 /*img{max-width: 900px;}*/
41}*/ 46}
42 47
43@media screen and (min-width: 700px) 48@media screen and (min-width: 700px)
44{ 49{
45 .image{/*max-width: 630px;*/width: auto;} 50 /*.image{width: auto;}*/
46} 51}
47 52
48@media screen and (max-width: 699px) 53@media screen and (max-width: 699px)
49{ 54{
50 .image{max-width: 480px;} 55 /*.image{max-width: 480px;}*/
51} 56}
52 57
53@media screen and (max-width: 479px) 58@media screen and (max-width: 479px)
54{ 59{
55 .image{max-width: 320px;} 60 /*.image{max-width: 320px;}*/
56} \ No newline at end of file 61} \ No newline at end of file
diff --git a/public/css/melaine.css b/public/css/melaine.css
deleted file mode 100644
index 429ccec..0000000
--- a/public/css/melaine.css
+++ /dev/null
@@ -1,107 +0,0 @@
1/* public/melaine.css */
2
3.police_titre
4{
5 color: #e9d4be;
6}
7
8td
9{
10 vertical-align: top;
11}
12
13pre
14{
15 font-family: 'Arial', 'sans';
16 white-space: pre-wrap;
17}
18
19figure
20{
21 /*margin: 5px;*/
22}
23.boutonArticle
24{
25 border-bottom: 3px black double;
26}
27.boutonArticle a
28{
29 padding: 2px;
30 border: 4px black groove;
31}
32
33@media screen and (min-width: 700px)
34{
35 #titre
36 {
37 width: 630px;
38 height: 171px;
39 background-image: url("../mouette.png");
40 }
41
42 #photo
43 {
44 width: 630px;
45 height: 230px;
46 background-image: url("../melaine/photo.png");
47 position: relative;
48 bottom: 30px;
49 }
50
51 /*img
52 {
53 max-width: 630px;
54 }*/
55}
56
57@media screen and (max-width: 699px)
58{
59 #titre
60 {
61 width: 480px;
62 height: 131px;
63 background-image: url("../mouette_petit.png");
64 margin: auto;
65 }
66
67 #photo
68 {
69 width: 480px;
70 height: 191px;
71 background-image: url("../melaine/photo_petit.png");
72 margin: auto;
73 position: relative;
74 bottom: 24px;
75 }
76
77 /*img
78 {
79 max-width: 480px;
80 }*/
81}
82
83@media screen and (max-width: 479px)
84{
85 #titre
86 {
87 width: 320px;
88 height: 88px;
89 background-image: url("../mouette_mini.png");
90 margin: auto;
91 }
92
93 #photo
94 {
95 width: 320px;
96 height: 127px;
97 background-image: url("../melaine/photo_mini.png");
98 margin: auto;
99 position: relative;
100 bottom: 17px;
101 }
102
103 /*img
104 {
105 max-width: 320px;
106 }*/
107}
diff --git a/public/css/pages_articles_simples.css b/public/css/pages_articles_simples.css
new file mode 100644
index 0000000..03e4317
--- /dev/null
+++ b/public/css/pages_articles_simples.css
@@ -0,0 +1,244 @@
1/* public/css/pages_articles_simples.css */
2
3.police_titre
4{
5 color: #e9d4be;
6}
7
8td
9{
10 vertical-align: top;
11}
12
13pre
14{
15 font-family: 'Arial', 'sans';
16 white-space: pre-wrap;
17}
18
19figure
20{
21 /*margin: 5px;*/
22}
23.boutonArticle
24{
25 border-bottom: 3px black double;
26}
27.boutonArticle a
28{
29 padding: 2px;
30 border: 4px black groove;
31}
32
33@media screen and (min-width: 700px)
34{
35 #titre
36 {
37 width: 630px;
38 height: 171px;
39 background-image: url("../mouette.png");
40 }
41
42 .photo
43 {
44 width: 630px;
45 height: 230px;
46 /*background-image: url("../melaine/photo.png");*/
47 position: relative;
48 bottom: 30px;
49 }
50}
51
52@media screen and (max-width: 699px)
53{
54 #titre
55 {
56 width: 480px;
57 height: 131px;
58 background-image: url("../mouette_petit.png");
59 margin: auto;
60 }
61
62 .photo
63 {
64 width: 480px;
65 height: 191px;
66 /*background-image: url("../melaine/photo_petit.png");*/
67 margin: auto;
68 position: relative;
69 bottom: 24px;
70 }
71}
72
73@media screen and (max-width: 479px)
74{
75 #titre
76 {
77 width: 320px;
78 height: 88px;
79 background-image: url("../mouette_mini.png");
80 margin: auto;
81 }
82
83 .photo
84 {
85 width: 320px;
86 height: 127px;
87 /*background-image: url("../melaine/photo_mini.png");*/
88 margin: auto;
89 position: relative;
90 bottom: 17px;
91 }
92}
93
94
95/* CSS spécifique à chaque page */
96@media screen and (min-width: 700px)
97{
98 #photo_melaine
99 {
100 background-image: url('../header_images/melaine.png');
101 }
102 #photo_concerts
103 {
104 background-image: url('../header_images/sirene.jpg');
105 width: 308px;
106 height: 170px;
107 margin-left: auto;
108 }
109 #photo_presse
110 {
111 background-image: url('../header_images/fille_qui_tombe.jpg');
112 width: 208px;
113 height: 163px;
114 margin-left: auto;
115 }
116 #photo_ateliers
117 {
118 background-image: url('../header_images/cavalier.jpg');
119 width: 159px;
120 height: 312px;
121 margin-left: 10px;
122 }
123 #photo_liens
124 {
125 background-image: url('../header_images/canoe.png');
126 width: 207px;
127 height: 144px;
128 margin-left: auto;
129 }
130 #photo_peinture
131 {
132 background-image: url('../header_images/mouette_ocean.jpg');
133 width: 257px;
134 height: 171px;
135 margin-left: auto;
136 }
137 #photo_archives
138 {
139 background-image: url('../header_images/blonde.jpg');
140 width: 257px;
141 height: 233px;
142 margin-left: auto;
143 }
144}
145
146@media screen and (max-width: 699px)
147{
148 #photo_melaine
149 {
150 background-image: url("../header_images/melaine_petit.png");
151 }
152 #photo_concerts
153 {
154 background-image: url('../header_images/sirene_petit.jpg');
155 width: 243px;
156 height: 132px;
157 margin: 0 0 0 auto;
158 }
159 #photo_presse
160 {
161 background-image: url('../header_images/fille_qui_tombe_petit.jpg');
162 width: 158px;
163 height: 124px;
164 margin: 0 0 0 auto;
165 }
166 #photo_ateliers
167 {
168 background-image: url('../header_images/cavalier_petit.jpg');
169 width: 121px;
170 height: 237px;
171 margin-left: 10px;
172 }
173 #photo_liens
174 {
175 background-image: url('../header_images/canoe_petit.png');
176 width: 157px;
177 height: 109px;
178 margin: 0 0 0 auto;
179 }
180 #photo_peinture
181 {
182 background-image: url('../header_images/mouette_ocean_petit.jpg');
183 width: 195px;
184 height: 130px;
185 margin: 0 0 0 auto;
186 }
187 #photo_archives
188 {
189 background-image: url('../header_images/blonde_petit.jpg');
190 width: 195px;
191 height: 177px;
192 margin: 0 0 0 auto;
193 }
194}
195
196@media screen and (max-width: 479px)
197{
198 #photo_melaine
199 {
200 background-image: url("../header_images/melaine_mini.png");
201 }
202 #photo_concerts
203 {
204 background-image: url('../header_images/sirene_mini.jpg');
205 width: 162px;
206 height: 88px;
207 margin: 0 0 0 auto;
208 }
209 #photo_presse
210 {
211 background-image: url('../header_images/fille_qui_tombe_mini.jpg');
212 width: 105px;
213 height: 82px;
214 margin: 0 0 0 auto;
215 }
216 #photo_ateliers
217 {
218 background-image: url('../header_images/cavalier_mini.jpg');
219 width: 80px;
220 height: 158px;
221 margin-left: 10px;
222 }
223 #photo_liens
224 {
225 background-image: url('../header_images/canoe_mini.png');
226 width: 105px;
227 height: 73px;
228 margin: 0 0 0 auto;
229 }
230 #photo_peinture
231 {
232 background-image: url('../header_images/mouette_ocean_mini.jpg');
233 width: 130px;
234 height: 86px;
235 margin: 0 0 0 auto;
236 }
237 #photo_archives
238 {
239 background-image: url('../header_images/blonde_mini.jpg');
240 width: 130px;
241 height: 118px;
242 margin: 0 0 0 auto;
243 }
244}
diff --git a/public/header_images/blonde.jpg b/public/header_images/blonde.jpg
new file mode 100644
index 0000000..35d9fe2
--- /dev/null
+++ b/public/header_images/blonde.jpg
Binary files differ
diff --git a/public/header_images/blonde_mini.jpg b/public/header_images/blonde_mini.jpg
new file mode 100644
index 0000000..87f5961
--- /dev/null
+++ b/public/header_images/blonde_mini.jpg
Binary files differ
diff --git a/public/header_images/blonde_petit.jpg b/public/header_images/blonde_petit.jpg
new file mode 100644
index 0000000..657966f
--- /dev/null
+++ b/public/header_images/blonde_petit.jpg
Binary files differ
diff --git a/public/header_images/canoe.png b/public/header_images/canoe.png
new file mode 100644
index 0000000..9c449a6
--- /dev/null
+++ b/public/header_images/canoe.png
Binary files differ
diff --git a/public/header_images/canoe_mini.png b/public/header_images/canoe_mini.png
new file mode 100644
index 0000000..048dd37
--- /dev/null
+++ b/public/header_images/canoe_mini.png
Binary files differ
diff --git a/public/header_images/canoe_petit.png b/public/header_images/canoe_petit.png
new file mode 100644
index 0000000..1d82002
--- /dev/null
+++ b/public/header_images/canoe_petit.png
Binary files differ
diff --git a/public/header_images/cavalier.jpg b/public/header_images/cavalier.jpg
new file mode 100644
index 0000000..fcf92fe
--- /dev/null
+++ b/public/header_images/cavalier.jpg
Binary files differ
diff --git a/public/header_images/cavalier_mini.jpg b/public/header_images/cavalier_mini.jpg
new file mode 100644
index 0000000..6050c67
--- /dev/null
+++ b/public/header_images/cavalier_mini.jpg
Binary files differ
diff --git a/public/header_images/cavalier_petit.jpg b/public/header_images/cavalier_petit.jpg
new file mode 100644
index 0000000..7dcf283
--- /dev/null
+++ b/public/header_images/cavalier_petit.jpg
Binary files differ
diff --git a/public/header_images/fille_qui_tombe.jpg b/public/header_images/fille_qui_tombe.jpg
new file mode 100644
index 0000000..e572287
--- /dev/null
+++ b/public/header_images/fille_qui_tombe.jpg
Binary files differ
diff --git a/public/header_images/fille_qui_tombe_mini.jpg b/public/header_images/fille_qui_tombe_mini.jpg
new file mode 100644
index 0000000..c8be5ee
--- /dev/null
+++ b/public/header_images/fille_qui_tombe_mini.jpg
Binary files differ
diff --git a/public/header_images/fille_qui_tombe_petit.jpg b/public/header_images/fille_qui_tombe_petit.jpg
new file mode 100644
index 0000000..29b22f3
--- /dev/null
+++ b/public/header_images/fille_qui_tombe_petit.jpg
Binary files differ
diff --git a/public/melaine/photo.png b/public/header_images/melaine.png
index f50aea5..f50aea5 100644
--- a/public/melaine/photo.png
+++ b/public/header_images/melaine.png
Binary files differ
diff --git a/public/melaine/photo_mini.png b/public/header_images/melaine_mini.png
index 7676a3d..7676a3d 100644
--- a/public/melaine/photo_mini.png
+++ b/public/header_images/melaine_mini.png
Binary files differ
diff --git a/public/melaine/photo_petit.png b/public/header_images/melaine_petit.png
index 9b3ab18..9b3ab18 100644
--- a/public/melaine/photo_petit.png
+++ b/public/header_images/melaine_petit.png
Binary files differ
diff --git a/public/header_images/mouette_ocean.jpg b/public/header_images/mouette_ocean.jpg
new file mode 100644
index 0000000..089a9bd
--- /dev/null
+++ b/public/header_images/mouette_ocean.jpg
Binary files differ
diff --git a/public/header_images/mouette_ocean_mini.jpg b/public/header_images/mouette_ocean_mini.jpg
new file mode 100644
index 0000000..42ac620
--- /dev/null
+++ b/public/header_images/mouette_ocean_mini.jpg
Binary files differ
diff --git a/public/header_images/mouette_ocean_petit.jpg b/public/header_images/mouette_ocean_petit.jpg
new file mode 100644
index 0000000..bf56f20
--- /dev/null
+++ b/public/header_images/mouette_ocean_petit.jpg
Binary files differ
diff --git a/public/header_images/sirene.jpg b/public/header_images/sirene.jpg
new file mode 100644
index 0000000..aaa1226
--- /dev/null
+++ b/public/header_images/sirene.jpg
Binary files differ
diff --git a/public/header_images/sirene_mini.jpg b/public/header_images/sirene_mini.jpg
new file mode 100644
index 0000000..028d22c
--- /dev/null
+++ b/public/header_images/sirene_mini.jpg
Binary files differ
diff --git a/public/header_images/sirene_petit.jpg b/public/header_images/sirene_petit.jpg
new file mode 100644
index 0000000..6655514
--- /dev/null
+++ b/public/header_images/sirene_petit.jpg
Binary files differ
diff --git a/view/backup.php b/view/backup.php
index 9fce805..30b644b 100644
--- a/view/backup.php
+++ b/view/backup.php
@@ -27,8 +27,9 @@ if(isset($_GET['action']) && $_GET['action'] == 'sauvegarde')
27?> 27?>
28 <h2>Sauvegarde complète</h2> 28 <h2>Sauvegarde complète</h2>
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> 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>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> 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. Ce fichier sera utile dans le cas d'une migration (déplacement du site, changement d'hébergeur), 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 <p style="color: red;" >Veuillez noter que votre mot de passe ne sera pas conservé. Dans le cas d'une migration, il vous sera proposé d'en créer un nouveau.</p>
32 <p>Ce fichier se nomme <i><?= $nomFichier ?></i></p>
32 33
33 <button class="boutonBackup" ><a href="data/<?= $nomFichier ?>" >Le télécharger</a></button> 34 <button class="boutonBackup" ><a href="data/<?= $nomFichier ?>" >Le télécharger</a></button>
34 <button class="boutonBackup" ><a class="boutonBackup" href="index.php?page=<?= $from ?>" >Retour au site</a></button> 35 <button class="boutonBackup" ><a class="boutonBackup" href="index.php?page=<?= $from ?>" >Retour au site</a></button>
@@ -53,7 +54,7 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'restauration')
53 ob_start(); 54 ob_start();
54?> 55?>
55 <h2>Restauration des données à partir d'une sauvegarde.</h2> 56 <h2>Restauration des données à partir d'une sauvegarde.</h2>
56 <p>Vous devez avoir créé précédemment un fichier <i>melaineDATA.zip</i><br/> 57 <p>Vous devez avoir créé précédemment un fichier <i>melaineDATA</i><br/>
57 à la page <i>Sauvegarder les données.</i></p><br/> 58 à la page <i>Sauvegarder les données.</i></p><br/>
58 59
59 <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,10 +62,10 @@ elseif(isset($_GET['action']) && $_GET['action'] == 'restauration')
61 62
62 <!-- demande de confirmation en JS au submit --> 63 <!-- demande de confirmation en JS au submit -->
63 64
64 <input type="submit" class="boutonBackup" value="Valider" ><br/><br/> 65 <input type="submit" class="boutonBackup" value="Valider" >
65 <?= $message ?> 66<?= $message ?>
66 <button class="boutonBackup" ><a href="index.php?page=<?= $from ?>" >Retour au site</a></button>
67 </form> 67 </form>
68 <button class="boutonBackup" ><a href="index.php?page=<?= $from ?>" >Retour au site</a></button>
68<?php 69<?php
69 $content = ob_get_clean(); 70 $content = ob_get_clean();
70} 71}
diff --git a/view/discographie.php b/view/discographie.php
index e234f58..e8e5770 100644
--- a/view/discographie.php
+++ b/view/discographie.php
@@ -4,7 +4,7 @@
4// variable $css 4// variable $css
5ob_start(); 5ob_start();
6?> 6?>
7 <link rel="stylesheet" type="text/css" href="public/css/<?= $page_actuelle ?>.css" /> 7 <link rel="stylesheet" type="text/css" href="public/css/<?= $page ?>.css" />
8 <link rel="stylesheet" type="text/css" href="public/css/donnees_hors_editeur.css" /> 8 <link rel="stylesheet" type="text/css" href="public/css/donnees_hors_editeur.css" />
9<?php 9<?php
10$css = ob_get_clean(); 10$css = ob_get_clean();
diff --git a/view/menu.php b/view/menu.php
index 4c9e341..29db70e 100644
--- a/view/menu.php
+++ b/view/menu.php
@@ -4,7 +4,7 @@
4// variable $css 4// variable $css
5ob_start(); 5ob_start();
6?> 6?>
7 <link rel="stylesheet" type="text/css" href="public/css/<?= $page_actuelle ?>.css" /> 7 <link rel="stylesheet" type="text/css" href="public/css/<?= $page ?>.css" />
8<?php 8<?php
9$css = ob_get_clean(); 9$css = ob_get_clean();
10 10
diff --git a/view/nav.php b/view/nav.php
index 40be1cb..1fa0487 100644
--- a/view/nav.php
+++ b/view/nav.php
@@ -1,13 +1,13 @@
1 <nav> 1 <nav>
2 <ul id="ul_menu"> 2 <ul id="ul_menu">
3 <li><a href="index.php?page=menu" <?php if($page_actuelle == "menu") {echo('id="actuelle" ');} ?>>Menu</a></li> 3 <li><a href="index.php?page=menu" <?php if($page == "menu") {echo('id="actuelle" ');} ?>>Menu</a></li>
4 <li><a href="index.php?page=melaine" <?php if($page_actuelle == "melaine") {echo('id="actuelle" ');} ?>>Melaine</a></li> 4 <li><a href="index.php?page=melaine" <?php if($page == "melaine") {echo('id="actuelle" ');} ?>>Melaine</a></li>
5 <li><a href="index.php?page=discographie" <?php if($page_actuelle == "discographie") {echo('id="actuelle" ');} ?>>Discographie</a></li> 5 <li><a href="index.php?page=discographie" <?php if($page == "discographie") {echo('id="actuelle" ');} ?>>Discographie</a></li>
6 <li><a href="index.php?page=concerts" <?php if($page_actuelle == "concerts") {echo('id="actuelle" ');} ?>>Concerts</a></li> 6 <li><a href="index.php?page=concerts" <?php if($page == "concerts") {echo('id="actuelle" ');} ?>>Concerts</a></li>
7 <li><a href="index.php?page=presse" <?php if($page_actuelle == "presse") {echo('id="actuelle" ');} ?>>La Presse</a></li> 7 <li><a href="index.php?page=presse" <?php if($page == "presse") {echo('id="actuelle" ');} ?>>La Presse</a></li>
8 <li><a href="index.php?page=ateliers" <?php if($page_actuelle == "ateliers ") {echo('id="actuelle" ');} ?>>Ateliers</a></li> 8 <li><a href="index.php?page=ateliers" <?php if($page == "ateliers ") {echo('id="actuelle" ');} ?>>Ateliers</a></li>
9 <li><a href="index.php?page=liens" <?php if($page_actuelle == "liens") {echo('id="actuelle" ');} ?>>Liens</a></li> 9 <li><a href="index.php?page=liens" <?php if($page == "liens") {echo('id="actuelle" ');} ?>>Liens</a></li>
10 <li><a href="index.php?page=peinture" <?php if($page_actuelle == "peinture") {echo('id="actuelle" ');} ?>>Peinture</a></li> 10 <li><a href="index.php?page=peinture" <?php if($page == "peinture") {echo('id="actuelle" ');} ?>>Peinture</a></li>
11 <li><a href="index.php?page=archives" <?php if($page_actuelle == "archives") {echo('id="actuelle" ');} ?>>Archives</a></li> 11 <li><a href="index.php?page=archives" <?php if($page == "archives") {echo('id="actuelle" ');} ?>>Archives</a></li>
12 </ul> 12 </ul>
13 </nav> \ No newline at end of file 13 </nav> \ No newline at end of file
diff --git a/view/melaine.php b/view/pageArticlesSimples.php
index ea8434a..aa755d8 100644
--- a/view/melaine.php
+++ b/view/pageArticlesSimples.php
@@ -1,10 +1,10 @@
1<?php 1<?php
2// view/melaine.php 2// view/pageArticleSimple.php
3 3
4// variable $css 4// variable $css
5ob_start(); 5ob_start();
6?> 6?>
7 <link rel="stylesheet" type="text/css" href="public/css/<?= $page_actuelle ?>.css" /> 7 <link rel="stylesheet" type="text/css" href="public/css/pages_articles_simples.css" />
8 <link rel="stylesheet" type="text/css" href="public/css/donnees_hors_editeur.css" /> 8 <link rel="stylesheet" type="text/css" href="public/css/donnees_hors_editeur.css" />
9<?php 9<?php
10$css = ob_get_clean(); 10$css = ob_get_clean();
@@ -32,9 +32,9 @@ echo "\n";
32?> 32?>
33 <header> 33 <header>
34 <div id="titre" > 34 <div id="titre" >
35 <span class="police_titre" >Melaine Favennec</span> 35 <span class="police_titre" ><?= $headerPaintedTitle ?></span>
36 </div> 36 </div>
37 <div id="photo" ></div> 37 <?= $headerImage ?>
38 </header> 38 </header>
39 <?php 39 <?php
40$header = ob_get_clean(); 40$header = ob_get_clean();
@@ -52,8 +52,6 @@ if($_SESSION['admin'] == 1)
52 <div <?= $style ?>> 52 <div <?= $style ?>>
53 <h3>Rédiger un nouvel article</h3> 53 <h3>Rédiger un nouvel article</h3>
54<?php 54<?php
55
56
57 echo($editeurHTML); // injection de template-editor.php 55 echo($editeurHTML); // injection de template-editor.php
58 } 56 }
59 57
@@ -63,7 +61,7 @@ if($_SESSION['admin'] == 1)
63?> 61?>
64 <div> 62 <div>
65 <p class="boutonArticle" > 63 <p class="boutonArticle" >
66 <a href="index.php?page=melaine&action=editor" > 64 <a href="index.php?page=<?= $page ?>&action=editor" >
67 Nouvel article 65 Nouvel article
68 </a> 66 </a>
69 </p> 67 </p>
@@ -119,11 +117,11 @@ for($i = 0; $i < $Articles->fileListCount; $i++)
119 { 117 {
120 ?> 118 ?>
121 <p class="boutonArticle" > 119 <p class="boutonArticle" >
122 <a href="index.php?page=melaine&action=editor&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>#<?= $Articles->fileList[$i]['fileCode'] ?>" > 120 <a href="index.php?page=<?= $page ?>&action=editor&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>#<?= $Articles->fileList[$i]['fileCode'] ?>" >
123 Modifier cet article 121 Modifier cet article
124 </a> 122 </a>
125 &nbsp;<!-- un espace --> 123 &nbsp;<!-- un espace -->
126 <a href="index.php?page=melaine&action=suppression&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>" onclick="confirmerSuppression()" > 124 <a href="index.php?page=<?= $page ?>&action=suppression&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>" onclick="confirmerSuppression()" >
127 Supprimer cet article 125 Supprimer cet article
128 </a> 126 </a>
129 </p> 127 </p>
diff --git a/view/password.php b/view/password.php
index 1509f68..a5cdbf8 100644
--- a/view/password.php
+++ b/view/password.php
@@ -72,8 +72,12 @@ ob_start();
72$header = ob_get_clean(); 72$header = ob_get_clean();
73 73
74 74
75// message d'erreur 75// messages d'erreur
76$erreurMDP = '<p class="avertissement" >Mauvais mot de passe</p>'; 76$errorPassword = '<p class="avertissement" >Mauvais mot de passe</p>';
77$errorBadCharacters = '<p class="avertissement" >Caractères interdits: espaces, tabulations, sauts CR/LF.</p>';
78
79// avertissement
80$warning = '<p class="avertissement" >Rappel de sécurité<br />Vous n\'utilisez pas votre propre ordinateur ou téléphone? Utilisez la navigation privée!</p>';
77 81
78 82
79// confirmation modification du mot de passe 83// confirmation modification du mot de passe
@@ -88,14 +92,6 @@ ob_start();
88$message = ob_get_clean(); 92$message = ob_get_clean();
89 93
90 94
91// avertissement
92ob_start();
93?>
94 <p class="avertissement" >Rappel de sécurité<br />Vous n'utilisez pas votre propre ordinateur ou téléphone? Utilisez la navigation privée!</p>
95<?php
96$warning = ob_get_clean();
97
98
99// pied de page 95// pied de page
100ob_start(); 96ob_start();
101?> 97?>
diff --git a/view/template-formulaires.php b/view/template-formulaires.php
index d1d47c4..ede8f27 100644
--- a/view/template-formulaires.php
+++ b/view/template-formulaires.php
@@ -43,9 +43,9 @@ ob_start();
43?> 43?>
44 44
45 <div class="conteneur_article" > 45 <div class="conteneur_article" >
46 <form action="index.php?page=<?= $page_actuelle ?><?= $fileCodeArgument ?>&action=submit" method="post" enctype="multipart/form-data" > 46 <form action="index.php?page=<?= $page ?><?= $fileCodeArgument ?>&action=submit" method="post" enctype="multipart/form-data" >
47<?php 47<?php
48if($page_actuelle == 'discographie') 48if($page == 'discographie')
49{ 49{
50 echo($inputsAlbum . "<p><i>Infos qui seront affichées dans la page spécifique à cet album:</i></p>"); 50 echo($inputsAlbum . "<p><i>Infos qui seront affichées dans la page spécifique à cet album:</i></p>");
51} 51}
@@ -53,7 +53,7 @@ if($page_actuelle == 'discographie')
53 53
54 <textarea id="editor" name="contenu" ></textarea> 54 <textarea id="editor" name="contenu" ></textarea>
55 <input class="boutonSubmitEditeur" type="submit" value="Valider" /> 55 <input class="boutonSubmitEditeur" type="submit" value="Valider" />
56 <a class="boutonAnnuler" href="index.php?page=<?= $page_actuelle ?>" > 56 <a class="boutonAnnuler" href="index.php?page=<?= $page ?>" >
57 <input type="button" value="Annuler" /> 57 <input type="button" value="Annuler" />
58 </a> 58 </a>
59 59
@@ -146,7 +146,7 @@ if($page_actuelle == 'discographie')
146 // - à télécharger immédiatement l'image envoyée pour la placer dans l'éditeur 146 // - à télécharger immédiatement l'image envoyée pour la placer dans l'éditeur
147 // - à inclure l'adresse de l'image dans le HTML produit par l'éditeur 147 // - à inclure l'adresse de l'image dans le HTML produit par l'éditeur
148 simpleUpload: { 148 simpleUpload: {
149 uploadUrl: 'index.php?action=upload_image&page=<?= $page_actuelle ?>', 149 uploadUrl: 'index.php?action=upload_image&page=<?= $page ?>',
150 150
151 // Headers supplémentaires envoyés avec la requête 151 // Headers supplémentaires envoyés avec la requête
152 // 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
diff --git a/view/template.php b/view/template.php
index 4cf0e52..0b084f6 100644
--- a/view/template.php
+++ b/view/template.php
@@ -45,7 +45,7 @@ echo($content);
45<?php 45<?php
46 46
47// section courriel sur toutes les pages sauf accueil 47// section courriel sur toutes les pages sauf accueil
48if($page_actuelle != "accueil") 48if($page != "accueil")
49{ 49{
50 echo "\n"; 50 echo "\n";
51 require("view/courriel.php"); 51 require("view/courriel.php");
@@ -57,7 +57,7 @@ if($_SESSION['admin'] == 0)
57{ 57{
58?> 58?>
59 <div id="lienModeAdmin" > 59 <div id="lienModeAdmin" >
60 <p><a href="index.php?page=connexion&from=<?= $page_actuelle ?>" >Mode Administrateur</a></p> 60 <p><a href="index.php?page=connexion&from=<?= $page ?>" >Mode Administrateur</a></p>
61 </div> 61 </div>
62<?php 62<?php
63} 63}
@@ -72,14 +72,14 @@ if($_SESSION['admin'] == 1)
72 <div id="modeAdmin" > 72 <div id="modeAdmin" >
73 <p>Vous êtes en mode administrateur. 73 <p>Vous êtes en mode administrateur.
74 <!-- <button id="boutonOptions" >Options</button> --> 74 <!-- <button id="boutonOptions" >Options</button> -->
75 <button><a href="index.php?page=<?= $page_actuelle ?>&action=deconnexion" >Déconnexion</a></button> 75 <button><a href="index.php?page=<?= $page ?>&action=deconnexion" >Déconnexion</a></button>
76 </p> 76 </p>
77 <div id="options" > 77 <div id="options" >
78 <button class="boutonBackup" ><a href="index.php?from=<?= $page_actuelle ?>&action=modif_mdp" > 78 <button class="boutonBackup" ><a href="index.php?from=<?= $page ?>&action=modif_mdp" >
79 Changer de mot de passe</a></button> 79 Changer de mot de passe</a></button>
80 <button class="boutonBackup" ><a href="index.php?from=<?= $page_actuelle ?>&action=sauvegarde" > 80 <button class="boutonBackup" ><a href="index.php?from=<?= $page ?>&action=sauvegarde" >
81 Sauvegarder les données</a></button> 81 Sauvegarder les données</a></button>
82 <button class="boutonBackup" ><a href="index.php?from=<?= $page_actuelle ?>&action=restauration" >Les restaurer avec une sauvegarde</a></button> 82 <button class="boutonBackup" ><a href="index.php?from=<?= $page ?>&action=restauration" >Les restaurer avec une sauvegarde</a></button>
83 <button class="boutonBackup" ><a href="data/melainePHP.zip" > 83 <button class="boutonBackup" ><a href="data/melainePHP.zip" >
84 Télécharger le code PHP 84 Télécharger le code PHP
85 </a></button> 85 </a></button>
diff --git a/à faire après livraison.txt b/à faire après livraison.txt
index c151c0d..19b8b01 100644
--- a/à faire après livraison.txt
+++ b/à faire après livraison.txt
@@ -1,23 +1,34 @@
1liens sans http dans l'éditeur
2
3captcha dans password.php
4
5gestion des liens "real media" = un lien pour télécharger VLC
6
1remplacer le survol par un clic sur les smartphones 7remplacer le survol par un clic sur les smartphones
2 8
3changer de format de sauvegarde (y a mieux que zip) 9fignoler l'affichage petits écrans
10
11penser aux grands écrans (en l'état, on a 700 pixels de large au maximum)
12
13ajouter d'autres format de sauvegarde (il parait que zip se fait mieux)
4 14
5tri des albums selon l'année 15tri des albums selon l'année
6(avec des plages de timestamps?) 16(avec des plages de timestamps?)
7 17
8Identification avec deux codes (login + mot de passe) 18Identification avec deux codes (login + mot de passe)
9 19
10pages manquantes 20Zoom sur images
11
12liens sans http dans l'éditeur
13
14zoom sur images
15voir ici pour une galerie en css 21voir ici pour une galerie en css
16https://www.guyom-design.com/blog/astuces/css/tuto_diapo_css/ 22https://www.guyom-design.com/blog/astuces/css/tuto_diapo_css/
17 23
18système d'onglets 24Explorateur de fichiers pour les images
25
26pagination (ex: max 10 articles par page)
27à voir selon le volume, c'est mieux avec de l'AJAX
19 28
20onglets AJAX 29pagination + AJAX
30
31système d'onglets avec AJAX: changement de page sans recharger
21 32
22plugin autosave 33plugin autosave
23 34
@@ -26,8 +37,7 @@ Editeur "inline" ou "balloon block"
26Possibilité de regarder une image en grand dans une fenêtre javascript 37Possibilité de regarder une image en grand dans une fenêtre javascript
27OU au moins dans une "page" dotée d'un bouton pur sortir (avec GD? avec imagemagick?) 38OU au moins dans une "page" dotée d'un bouton pur sortir (avec GD? avec imagemagick?)
28 39
29Explorateur de fichiers pour les images 40défense aux attaques par force brute quand l'attaquant multiplie les connexions au site
30
31 41
32Protection contre les falsifications de requête inter-site - CSRF 42Protection contre les falsifications de requête inter-site - CSRF
33 43