diff options
| author | polo <ordipolo@gmx.fr> | 2022-03-01 04:02:05 +0100 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2022-03-01 04:02:05 +0100 |
| commit | 2ac4254829fb27d878044978e4e89f15eeeddd23 (patch) | |
| tree | d6ae70410566884d8bf567b0934cdaee5133a5a1 /controller | |
| parent | abd968a1c573b1862bd0728f0b7b6a88e307900a (diff) | |
| download | melaine-2ac4254829fb27d878044978e4e89f15eeeddd23.tar.gz melaine-2ac4254829fb27d878044978e4e89f15eeeddd23.tar.bz2 melaine-2ac4254829fb27d878044978e4e89f15eeeddd23.zip | |
factorisation et pages manquantes
Diffstat (limited to 'controller')
| -rw-r--r-- | controller/Security.php | 8 | ||||
| -rw-r--r-- | controller/admin.php | 70 | ||||
| -rw-r--r-- | controller/backup.php | 16 | ||||
| -rw-r--r-- | controller/installation.php | 7 | ||||
| -rw-r--r-- | controller/password.php | 79 | ||||
| -rw-r--r-- | controller/visitor.php | 100 |
6 files changed, 199 insertions, 81 deletions
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 | ||
