diff options
43 files changed, 547 insertions, 264 deletions
@@ -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 | |||
25 | function 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 | ||
7 | function melaineEdit($fileCode, $suppression) | 7 | function 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 | ||
76 | function 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 | } | ||
83 | function concertsEdit($fileCode, $suppression) | ||
84 | { | ||
85 | $page = "concerts"; | ||
86 | $title = "Concerts"; | ||
87 | $headerPaintedTitle = 'Concerts'; | ||
88 | pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); | ||
89 | } | ||
90 | function presseEdit($fileCode, $suppression) | ||
91 | { | ||
92 | $page = "presse"; | ||
93 | $title = "La presse"; | ||
94 | $headerPaintedTitle = 'La Presse'; | ||
95 | pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); | ||
96 | } | ||
97 | function ateliersEdit($fileCode, $suppression) | ||
98 | { | ||
99 | $page = "ateliers"; | ||
100 | $title = "Ateliers"; | ||
101 | $headerPaintedTitle = 'Les ateliers de Melaine'; | ||
102 | pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); | ||
103 | } | ||
104 | function liensEdit($fileCode, $suppression) | ||
105 | { | ||
106 | $page = "liens"; | ||
107 | $title = "Liens"; | ||
108 | $headerPaintedTitle = 'Liens'; | ||
109 | pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); | ||
110 | } | ||
111 | function peintureEdit($fileCode, $suppression) | ||
112 | { | ||
113 | $page = "peinture"; | ||
114 | $title = "peinture"; | ||
115 | $headerPaintedTitle = 'Celtic Boats'; | ||
116 | pageArticlesSimplesAdmin($page, $title, $headerPaintedTitle, $fileCode, $suppression); | ||
117 | } | ||
118 | function 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 | ||
76 | function discoEdit($fileCode, $suppression) | 128 | function 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 | ||
21 | function creerMelainePHP() | 24 | function 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 |
35 | function createZip($destinationPath, $zipFileName, array $targetDirectories, array $allPattern = []) | 38 | function 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 |
6 | function createPassword() | 6 | function 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 |
149 | function hashNewPassword($newPassword) | 174 | function 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 | ||
163 | function testPassword($password) | 188 | function 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 @@ | |||
7 | function accueil() | 7 | function 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() | |||
19 | function menu() | 19 | function 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 | ||
30 | function melaineVisitor() | 30 | // toutes celles du menu sauf: menu et discographie |
31 | function 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 données 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 | ||
56 | function melaineVisitor() | ||
57 | { | ||
58 | $page = "melaine"; | ||
59 | $title = "Mais qui est Melaine Favennec?"; | ||
60 | $headerPaintedTitle = 'Melaine Favennec'; | ||
61 | pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle); | ||
62 | } | ||
63 | function concertsVisitor() | ||
64 | { | ||
65 | $page = "concerts"; | ||
66 | $title = "Concerts"; | ||
67 | $headerPaintedTitle = 'Concerts'; | ||
68 | pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle); | ||
69 | } | ||
70 | function presseVisitor() | ||
71 | { | ||
72 | $page = "presse"; | ||
73 | $title = "La presse"; | ||
74 | $headerPaintedTitle = 'La Presse'; | ||
75 | pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle); | ||
76 | } | ||
77 | function ateliersVisitor() | ||
78 | { | ||
79 | $page = "ateliers"; | ||
80 | $title = "Ateliers"; | ||
81 | $headerPaintedTitle = 'Les ateliers de Melaine'; | ||
82 | pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle); | ||
83 | } | ||
84 | function liensVisitor() | ||
85 | { | ||
86 | $page = "liens"; | ||
87 | $title = "Liens"; | ||
88 | $headerPaintedTitle = 'Liens'; | ||
89 | pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle); | ||
90 | } | ||
91 | function peintureVisitor() | ||
92 | { | ||
93 | $page = "peinture"; | ||
94 | $title = "peinture"; | ||
95 | $headerPaintedTitle = 'Celtic Boats'; | ||
96 | pageArticlesSimplesVisitor($page, $title, $headerPaintedTitle); | ||
97 | } | ||
98 | function 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 | ||
55 | function discoVisitor() | 108 | function 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 |
118 | function album($fileCode) | 171 | function 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 | |||
150 | function presse() | ||
151 | {} | ||
152 | |||
153 | function ateliers() | ||
154 | {} | ||
155 | |||
156 | function liens() | ||
157 | {} | ||
158 | |||
159 | function peinture() | ||
160 | {} | ||
161 | |||
162 | function archives() | ||
163 | {} \ No newline at end of file | ||
@@ -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 | ||
7 | declare(strict_types=1); | ||
7 | session_start(); | 8 | session_start(); |
8 | 9 | ||
10 | // erreurs affichées au rechargement (ça concerne une partie des erreurs) | ||
9 | if(!empty($_SESSION['erreur'])) | 11 | if(!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 |
114 | if(isset($_GET['page'])) | 116 | if(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 | ||
104 | form | 105 | form |
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;} |
25 | td p{margin: 0px;} | 25 | td 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 | ||
36 | iframe{min-width: 400px; min-height: 300px; max-width: 1200px; max-height: 900px;} | 37 | iframe{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 | |||
8 | td | ||
9 | { | ||
10 | vertical-align: top; | ||
11 | } | ||
12 | |||
13 | pre | ||
14 | { | ||
15 | font-family: 'Arial', 'sans'; | ||
16 | white-space: pre-wrap; | ||
17 | } | ||
18 | |||
19 | figure | ||
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 | |||
8 | td | ||
9 | { | ||
10 | vertical-align: top; | ||
11 | } | ||
12 | |||
13 | pre | ||
14 | { | ||
15 | font-family: 'Arial', 'sans'; | ||
16 | white-space: pre-wrap; | ||
17 | } | ||
18 | |||
19 | figure | ||
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 |
5 | ob_start(); | 5 | ob_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 |
5 | ob_start(); | 5 | ob_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 |
5 | ob_start(); | 5 | ob_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 | <!-- un espace --> | 123 | <!-- 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 | ||
92 | ob_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 |
100 | ob_start(); | 96 | ob_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 |
48 | if($page_actuelle == 'discographie') | 48 | if($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 |
48 | if($page_actuelle != "accueil") | 48 | if($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 @@ | |||
1 | liens sans http dans l'éditeur | ||
2 | |||
3 | captcha dans password.php | ||
4 | |||
5 | gestion des liens "real media" = un lien pour télécharger VLC | ||
6 | |||
1 | remplacer le survol par un clic sur les smartphones | 7 | remplacer le survol par un clic sur les smartphones |
2 | 8 | ||
3 | changer de format de sauvegarde (y a mieux que zip) | 9 | fignoler l'affichage petits écrans |
10 | |||
11 | penser aux grands écrans (en l'état, on a 700 pixels de large au maximum) | ||
12 | |||
13 | ajouter d'autres format de sauvegarde (il parait que zip se fait mieux) | ||
4 | 14 | ||
5 | tri des albums selon l'année | 15 | tri des albums selon l'année |
6 | (avec des plages de timestamps?) | 16 | (avec des plages de timestamps?) |
7 | 17 | ||
8 | Identification avec deux codes (login + mot de passe) | 18 | Identification avec deux codes (login + mot de passe) |
9 | 19 | ||
10 | pages manquantes | 20 | Zoom sur images |
11 | |||
12 | liens sans http dans l'éditeur | ||
13 | |||
14 | zoom sur images | ||
15 | voir ici pour une galerie en css | 21 | voir ici pour une galerie en css |
16 | https://www.guyom-design.com/blog/astuces/css/tuto_diapo_css/ | 22 | https://www.guyom-design.com/blog/astuces/css/tuto_diapo_css/ |
17 | 23 | ||
18 | système d'onglets | 24 | Explorateur de fichiers pour les images |
25 | |||
26 | pagination (ex: max 10 articles par page) | ||
27 | à voir selon le volume, c'est mieux avec de l'AJAX | ||
19 | 28 | ||
20 | onglets AJAX | 29 | pagination + AJAX |
30 | |||
31 | système d'onglets avec AJAX: changement de page sans recharger | ||
21 | 32 | ||
22 | plugin autosave | 33 | plugin autosave |
23 | 34 | ||
@@ -26,8 +37,7 @@ Editeur "inline" ou "balloon block" | |||
26 | Possibilité de regarder une image en grand dans une fenêtre javascript | 37 | Possibilité de regarder une image en grand dans une fenêtre javascript |
27 | OU au moins dans une "page" dotée d'un bouton pur sortir (avec GD? avec imagemagick?) | 38 | OU au moins dans une "page" dotée d'un bouton pur sortir (avec GD? avec imagemagick?) |
28 | 39 | ||
29 | Explorateur de fichiers pour les images | 40 | défense aux attaques par force brute quand l'attaquant multiplie les connexions au site |
30 | |||
31 | 41 | ||
32 | Protection contre les falsifications de requête inter-site - CSRF | 42 | Protection contre les falsifications de requête inter-site - CSRF |
33 | 43 | ||