diff options
| author | polo <ordipolo@gmx.fr> | 2021-11-29 03:25:19 +0100 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2021-11-29 03:25:19 +0100 |
| commit | 29df6f1362745eabf4fbcaedf309eb63795152fa (patch) | |
| tree | 8c2f4839c119db193eca4f35aeac96356a8ef439 /controller | |
| parent | b97a68343ec5c4ff1fae25ff5dc41f1a2ce6a17f (diff) | |
| download | melaine-29df6f1362745eabf4fbcaedf309eb63795152fa.tar.gz melaine-29df6f1362745eabf4fbcaedf309eb63795152fa.tar.bz2 melaine-29df6f1362745eabf4fbcaedf309eb63795152fa.zip | |
discographie
Diffstat (limited to 'controller')
| -rw-r--r-- | controller/admin.php | 92 | ||||
| -rw-r--r-- | controller/ckeditor.php | 63 | ||||
| -rw-r--r-- | controller/visitor.php | 55 |
3 files changed, 93 insertions, 117 deletions
diff --git a/controller/admin.php b/controller/admin.php index 90924e0..e319c80 100644 --- a/controller/admin.php +++ b/controller/admin.php | |||
| @@ -1,15 +1,15 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // controller/admin.php | 2 | // controller/admin.php |
| 3 | // | 3 | // |
| 4 | // utilisation du site en écriture | 4 | // utilisation du site en écriture (admin uniquement) |
| 5 | // version des pages en mode admin lorsque celui-ci crée ou modifie quelque chose | 5 | // l'éditeur ouvert ou demande de suppression d'un élément |
| 6 | 6 | ||
| 7 | function melaineEdit($numArticle, $suppression) | 7 | function melaineEdit($numArticle, $suppression) |
| 8 | { | 8 | { |
| 9 | $page_actuelle = "melaine"; | 9 | $page_actuelle = "melaine"; |
| 10 | 10 | ||
| 11 | // modèle | 11 | // modèle |
| 12 | $Article = new Page($page_actuelle, 'html'); | 12 | $Article = new Page($page_actuelle); |
| 13 | 13 | ||
| 14 | // nouvel article | 14 | // nouvel article |
| 15 | if($numArticle == 0) | 15 | if($numArticle == 0) |
| @@ -21,7 +21,7 @@ function melaineEdit($numArticle, $suppression) | |||
| 21 | { | 21 | { |
| 22 | // nom de l'article ciblé (objet et session) | 22 | // nom de l'article ciblé (objet et session) |
| 23 | $Article->findFileName($numArticle); | 23 | $Article->findFileName($numArticle); |
| 24 | $_SESSION['nomFichier'] = $Article->fileName; | 24 | $_SESSION['target'] = $Article->fileName; |
| 25 | 25 | ||
| 26 | // suppression | 26 | // suppression |
| 27 | if($suppression) | 27 | if($suppression) |
| @@ -42,10 +42,10 @@ function melaineEdit($numArticle, $suppression) | |||
| 42 | $articles = array_reverse($Article->readAll()); // lourd | 42 | $articles = array_reverse($Article->readAll()); // lourd |
| 43 | 43 | ||
| 44 | // sécurisation du contenu pré-existant inséré dans l'éditeur | 44 | // sécurisation du contenu pré-existant inséré dans l'éditeur |
| 45 | if($numArticle >= 0 && !$suppression) | 45 | if($numArticle > 0 && !$suppression) |
| 46 | { | 46 | { |
| 47 | require('controller/ckeditor.php'); | 47 | require('controller/ckeditor.php'); |
| 48 | $texte = preparationCKeditor($numArticle, $texte); | 48 | $texte = preparationCKeditor($texte); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | // NB: penser à ajouter au template la fonctionnalité "autosave" | 51 | // NB: penser à ajouter au template la fonctionnalité "autosave" |
| @@ -61,104 +61,96 @@ function melaineEdit($numArticle, $suppression) | |||
| 61 | require('view/template.php'); | 61 | require('view/template.php'); |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | function discoEdit($numArticle, $albumCode, $suppression) | 64 | function discoEdit($albumCode, $suppression) |
| 65 | { | 65 | { |
| 66 | $page_actuelle = "discographie"; | 66 | $page_actuelle = "discographie"; |
| 67 | $title = "Discographie"; | 67 | $title = "Discographie"; |
| 68 | 68 | ||
| 69 | // modèle | 69 | // modèle |
| 70 | $Album = new Album($page_actuelle); | 70 | $Albums = new Album($page_actuelle); |
| 71 | $Album->makeFileList(); | 71 | $Albums->makeFileList(); |
| 72 | 72 | ||
| 73 | // nouvel album | 73 | // nouvel album |
| 74 | if($numArticle == 0) | 74 | if($albumCode == '') |
| 75 | { | 75 | { |
| 76 | unset($_SESSION['target']); | ||
| 76 | $title = "Ajouter un album"; | 77 | $title = "Ajouter un album"; |
| 78 | |||
| 79 | // formulaires vides | ||
| 80 | $vignette = ['', '', '']; | ||
| 77 | $texte = ''; | 81 | $texte = ''; |
| 78 | } | 82 | } |
| 79 | else | 83 | else |
| 80 | { | 84 | { |
| 81 | // nom de l'article ciblé (objet et session) | 85 | // album ciblé |
| 82 | $Album->findFileName($numArticle); | 86 | $Albums->albumCode = $albumCode; |
| 83 | $_SESSION['nomFichier'] = $Album->fileName; | ||
| 84 | 87 | ||
| 85 | // suppression | 88 | // suppression |
| 86 | if($suppression) | 89 | if($suppression) |
| 87 | { | 90 | { |
| 88 | $Album->delete(); | 91 | $Albums->delete(); |
| 89 | header('Location: index.php?page=' . $page_actuelle); | 92 | header('Location: index.php?page=' . $page_actuelle); |
| 90 | exit(); | 93 | exit(); |
| 91 | } | 94 | } |
| 92 | // modification | 95 | // modification |
| 93 | else | 96 | else |
| 94 | { | 97 | { |
| 98 | $_SESSION['target'] = $Albums->albumCode; | ||
| 95 | $title = "Modifier un album"; | 99 | $title = "Modifier un album"; |
| 96 | $texte = $Album->readOneAlbum($albumCode); | 100 | $texte = $Albums->readOneHTML($albumCode); |
| 97 | $vignette = json_decode($Album->getVignette(), true); | 101 | $vignette = $Albums->getVignetteJSON(); |
| 98 | } | 102 | } |
| 99 | } | 103 | } |
| 100 | 104 | ||
| 101 | // traitements PHP pour l'éditeur | 105 | // traitements PHP pour l'éditeur |
| 102 | // sécurisation du contenu pré-existant inséré dans l'éditeur | 106 | // sécurisation du contenu pré-existant inséré dans l'éditeur |
| 103 | if($numArticle >= 0 && !$suppression) | 107 | if(!empty($albumCode) && !$suppression && !empty($texte)) |
| 104 | { | 108 | { |
| 105 | require('controller/ckeditor.php'); | 109 | require('controller/ckeditor.php'); |
| 106 | $texte = preparationCKeditor($numArticle, $texte); | 110 | $texte = preparationCKeditor($texte); |
| 107 | } | 111 | } |
| 108 | 112 | ||
| 113 | // préremplir le champ <input type="file" > | ||
| 114 | // c'est normallement impossible | ||
| 115 | |||
| 109 | // contenu de tous les fichiers JSON (= tableau de chaines) | 116 | // contenu de tous les fichiers JSON (= tableau de chaines) |
| 110 | $albumsJSON = $Album->readAll(); | 117 | $albumsJSON = $Albums->readAll(); |
| 111 | // noms des fichiers JSON | 118 | // noms des fichiers JSON |
| 112 | $albumNamesJSON = $Album->fileList; | 119 | $albumNamesJSON = $Albums->fileList; |
| 113 | 120 | ||
| 114 | // changer les chaines JSON en tableaux: titre, année, pochette | 121 | $annees = []; |
| 115 | $i = 0; | 122 | for($i = 0; $i < count($albumsJSON); $i++) |
| 116 | $annees = array(); | ||
| 117 | foreach($albumsJSON as $oneAlbum) | ||
| 118 | { | 123 | { |
| 119 | $albumsJSON[$i] = json_decode($oneAlbum, true); | 124 | // une case supplémentaire contient le "albumCode" |
| 125 | $albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename']; | ||
| 120 | 126 | ||
| 121 | // ajout des noms des fichiers JSON | ||
| 122 | $albumsJSON[$i][3] = $albumNamesJSON[$i]; | ||
| 123 | $annees[$i] = $albumsJSON[$i][1]; | 127 | $annees[$i] = $albumsJSON[$i][1]; |
| 124 | $i++; | ||
| 125 | } | 128 | } |
| 126 | print_r($albumsJSON); | 129 | |
| 127 | //exit(); | ||
| 128 | // tri d'un tableau multidimensionnel | 130 | // tri d'un tableau multidimensionnel |
| 129 | array_multisort($annees, $albumsJSON); | 131 | array_multisort($annees, $albumsJSON); |
| 130 | 132 | ||
| 131 | // on passe maintenant au contenu HTML | ||
| 132 | $Album->format = 'html'; | ||
| 133 | $Album->makeFileList(); | ||
| 134 | $albumNamesHTML = $Album->fileList; | ||
| 135 | |||
| 136 | // lien vers le HTML ou ancre? | 133 | // lien vers le HTML ou ancre? |
| 137 | // pour chaque album, détecter le fichier html | ||
| 138 | // si non, ne fournir qu'un lien d'ancre pour la liste d'album | ||
| 139 | $i = 0; | ||
| 140 | $avecLien = []; | 134 | $avecLien = []; |
| 141 | foreach($albumsJSON as $oneAlbum) | 135 | $linkDiscoChrono = []; |
| 136 | for($i = 0; $i < count($albumsJSON); $i++) | ||
| 142 | { | 137 | { |
| 143 | // nom sans extension | 138 | // cas particulier où le dossier "html" est vide |
| 144 | $chemin = pathinfo($oneAlbum[3]); | 139 | if(!empty($Albums->fileList)) |
| 145 | $nomJSONsansExt = $chemin['filename']; | ||
| 146 | |||
| 147 | // au cas où la discographie ne contient aucun html | ||
| 148 | if(!empty($albumNamesHTML)) | ||
| 149 | { | 140 | { |
| 150 | if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) | 141 | if(file_exists('data/discographie/html/' . $albumsJSON[$i][3] . '.html')) |
| 151 | { | 142 | { |
| 152 | $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; | 143 | $lienAlbum[$i] = 'page=album&album_name=' . $albumsJSON[$i][0] . '&album_code=' . $albumsJSON[$i][3]; |
| 153 | $lienBoutonModif[$i] = 'discographie&action=edition&album_code=' . $nomJSONsansExt; | ||
| 154 | $avecLien[$i] = true; | 144 | $avecLien[$i] = true; |
| 145 | $linkDiscoChrono[$i] = 'linkChrono'; // css | ||
| 155 | } | 146 | } |
| 156 | else | 147 | else |
| 157 | { | 148 | { |
| 158 | $lienAlbum[$i] = 'discographie#' . $albumsJSON[$i][0]; | 149 | $lienAlbum[$i] = 'page=discographie#' . $albumsJSON[$i][0]; |
| 159 | $avecLien[$i] = false; | 150 | $avecLien[$i] = false; |
| 151 | $linkDiscoChrono[$i] = 'noLinkChrono'; // css | ||
| 160 | } | 152 | } |
| 161 | $i++; | 153 | $lienBoutonModif[$i] = 'page=discographie&action=edition&album_code=' . $albumsJSON[$i][3]; |
| 162 | } | 154 | } |
| 163 | } | 155 | } |
| 164 | 156 | ||
diff --git a/controller/ckeditor.php b/controller/ckeditor.php index 2b9f168..661e0e3 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php | |||
| @@ -7,41 +7,33 @@ | |||
| 7 | // il y a aussi un fichier CSS parce que le HTML créé par l'éditeur ne suffit pas à lui-même | 7 | // il y a aussi un fichier CSS parce que le HTML créé par l'éditeur ne suffit pas à lui-même |
| 8 | 8 | ||
| 9 | // avant de placer l'éditeur | 9 | // avant de placer l'éditeur |
| 10 | function preparationCKeditor($numArticle, $texte) | 10 | function preparationCKeditor($html) |
| 11 | { | 11 | { |
| 12 | // ici $numArticle sert uniquement à savoir si on crée ou modifie un article | 12 | // texte initial inséré avec setData() dans l'éditeur |
| 13 | // danger! | ||
| 14 | // setData() n'insère pas le texte si il ne respecte pas certains critères, l'utilisateur risque de perdre des données en validant un nouveau contenu sans avoir pu modifier l'ancien | ||
| 13 | 15 | ||
| 14 | // texte initial inséré avec setData() dans l'éditeur, | 16 | if(empty($html)) |
| 15 | // on recherche ici les causes expliquant qu'il n'apparaisse pas à l'ouverture de l'éditeur, | ||
| 16 | // les données précédentes sont écrasées à la validation du nouveau texte | ||
| 17 | if ($numArticle > 0) | ||
| 18 | { | 17 | { |
| 19 | if(empty($texte)) | 18 | header('Location: index.php?erreur=empty_input'); |
| 20 | { | 19 | } |
| 21 | header('Location: index.php?erreur=empty_input'); | ||
| 22 | } | ||
| 23 | 20 | ||
| 24 | // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine | 21 | // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine |
| 25 | $texte = trim($texte); | 22 | $html = trim($html); |
| 26 | 23 | ||
| 27 | // supprimer les sauts de ligne | 24 | // supprimer les sauts de ligne |
| 28 | $sautsDeLigne = array("\n", "\r", "\r\n"); | 25 | $sautsDeLigne = array("\n", "\r", "\r\n"); |
| 29 | $texte = str_replace($sautsDeLigne, '', $texte); | 26 | $html = str_replace($sautsDeLigne, '', $html); |
| 30 | 27 | ||
| 31 | // échapper tous les ', ", \ et caractère NULL | 28 | // échapper tous les ', ", \ et caractère NULL |
| 32 | $texte = addslashes($texte); | 29 | $html = addslashes($html); |
| 33 | } | ||
| 34 | else | ||
| 35 | { | ||
| 36 | $texte = ''; // nouveau contenu | ||
| 37 | } | ||
| 38 | 30 | ||
| 39 | return($texte); | 31 | return($html); |
| 40 | } | 32 | } |
| 41 | 33 | ||
| 42 | // réception du HTML créé par l'éditeur | 34 | // réception du HTML créé par l'éditeur |
| 43 | // le nom du fichier est celui dans $_SESSION['nomFichier'] | 35 | // le nom du fichier est celui dans $_SESSION['nomFichier'] |
| 44 | function submitCKeditor($nomFichier) | 36 | function submitCKeditor($target) |
| 45 | { | 37 | { |
| 46 | $page = $_GET['page']; | 38 | $page = $_GET['page']; |
| 47 | 39 | ||
| @@ -79,10 +71,10 @@ function submitCKeditor($nomFichier) | |||
| 79 | $Album = new Album($page); | 71 | $Album = new Album($page); |
| 80 | 72 | ||
| 81 | // enregistrement | 73 | // enregistrement |
| 82 | if($_GET['article'] == 0) | 74 | if($target == '') |
| 83 | { | 75 | { |
| 84 | // page disco | 76 | // page disco |
| 85 | $Album->createVignette($titre, $annee, $pochette); | 77 | $_SESSION['erreur'] = $Album->createVignette($titre, $annee, $pochette); |
| 86 | 78 | ||
| 87 | // page de l'album | 79 | // page de l'album |
| 88 | if(!empty($_POST['contenu'])) | 80 | if(!empty($_POST['contenu'])) |
| @@ -92,28 +84,35 @@ function submitCKeditor($nomFichier) | |||
| 92 | } | 84 | } |
| 93 | else | 85 | else |
| 94 | { | 86 | { |
| 87 | $Album->albumCode = $target; | ||
| 88 | |||
| 95 | // page disco | 89 | // page disco |
| 96 | $Album->updateVignette($titre, $annee, $pochette); | 90 | $_SESSION['erreur'] = $Album->updateVignetteJSON($titre, $annee, $pochette); |
| 97 | 91 | ||
| 98 | // page de l'album | 92 | // page de l'album |
| 99 | if(isset($_POST['contenu'])) | 93 | if(isset($_POST['contenu'])) |
| 100 | { | 94 | { |
| 101 | $Album->update($content); | 95 | $Album->format = 'html'; |
| 96 | $Album->setFileName(); | ||
| 97 | if(!empty($Album->fileName)) | ||
| 98 | { | ||
| 99 | $Album->update($_POST['contenu']); | ||
| 100 | } | ||
| 102 | } | 101 | } |
| 103 | } | 102 | } |
| 104 | } | 103 | } |
| 105 | // autres pages | 104 | // autres pages |
| 106 | else | 105 | else |
| 107 | { | 106 | { |
| 108 | $Article = new Page($page, 'html'); | 107 | $Article = new Page($page); |
| 109 | 108 | ||
| 110 | if($_GET['article'] == 0) | 109 | if($target == '') |
| 111 | { | 110 | { |
| 112 | $Article->create($contenu); | 111 | $Article->create($contenu); |
| 113 | } | 112 | } |
| 114 | else | 113 | else |
| 115 | { | 114 | { |
| 116 | $Article->fileName = $nomFichier; | 115 | $Article->fileName = $target; |
| 117 | $Article->update($contenu); | 116 | $Article->update($contenu); |
| 118 | } | 117 | } |
| 119 | } | 118 | } |
diff --git a/controller/visitor.php b/controller/visitor.php index 0e79ee2..6c6146b 100644 --- a/controller/visitor.php +++ b/controller/visitor.php | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // controller/visitor.php | 2 | // controller/visitor.php |
| 3 | // | 3 | // |
| 4 | // simple affichage du site au visiteur | 4 | // affichage du site en lecture seul (visiteur ou admin) |
| 5 | 5 | ||
| 6 | // pages du sites | 6 | // pages du sites |
| 7 | function accueil() | 7 | function accueil() |
| @@ -50,63 +50,48 @@ function discoVisitor() | |||
| 50 | $title = "Discographie"; | 50 | $title = "Discographie"; |
| 51 | 51 | ||
| 52 | // modèle | 52 | // modèle |
| 53 | $AllAlbums = new Album($page_actuelle); | 53 | $Albums = new Album($page_actuelle); |
| 54 | $AllAlbums->makeFileList(); | 54 | $Albums->makeFileList(); |
| 55 | 55 | ||
| 56 | // contenu de tous les fichiers JSON (= tableau de chaines) | 56 | // contenu de tous les fichiers JSON (= tableau de chaines) |
| 57 | $albumsJSON = array_reverse($AllAlbums->readAll()); | 57 | $albumsJSON = $Albums->readAll(); |
| 58 | // noms des fichiers JSON | 58 | // noms des fichiers JSON |
| 59 | $albumNamesJSON = $AllAlbums->fileList; | 59 | $albumNamesJSON = $Albums->fileList; |
| 60 | 60 | ||
| 61 | // changer les chaines JSON en tableaux: titre, année, pochette | 61 | $annees = []; |
| 62 | $i = 0; | 62 | for($i = 0; $i < count($albumsJSON); $i++) |
| 63 | $annees = array(); | ||
| 64 | foreach($albumsJSON as $oneAlbum) | ||
| 65 | { | 63 | { |
| 66 | $albumsJSON[$i] = json_decode($oneAlbum, true); | 64 | // une case supplémentaire contient le "albumCode" |
| 67 | $annees[$i] = $albumsJSON[$i][1]; | 65 | $albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename']; |
| 68 | 66 | ||
| 69 | // ajout des noms des fichiers JSON | 67 | $annees[$i] = $albumsJSON[$i][1]; |
| 70 | $albumsJSON[$i][3] = $albumNamesJSON[$i]; | ||
| 71 | |||
| 72 | $i++; | ||
| 73 | } | 68 | } |
| 69 | |||
| 74 | // tri d'un tableau multidimensionnel | 70 | // tri d'un tableau multidimensionnel |
| 75 | array_multisort($annees, $albumsJSON); | 71 | array_multisort($annees, $albumsJSON); |
| 76 | 72 | ||
| 77 | // on passe maintenant au contenu HTML | ||
| 78 | $AllAlbums->format = 'html'; | ||
| 79 | $AllAlbums->makeFileList(); | ||
| 80 | $albumNamesHTML = $AllAlbums->fileList; | ||
| 81 | |||
| 82 | // lien vers le HTML ou ancre? | 73 | // lien vers le HTML ou ancre? |
| 83 | // pour chaque album, détecter le fichier html | 74 | $lienAlbum = []; |
| 84 | // si non, ne fournir qu'un lien d'ancre pour la liste d'album | ||
| 85 | $i = 0; | ||
| 86 | $avecLien = []; | 75 | $avecLien = []; |
| 87 | $linkDiscoChrono = []; | 76 | $linkDiscoChrono = []; |
| 88 | foreach($albumsJSON as $oneAlbum) | 77 | for($i = 0; $i < count($albumsJSON); $i++) |
| 89 | { | 78 | { |
| 90 | // nom sans extension | 79 | // cas particulier où le dossier "html" est vide |
| 91 | $chemin = pathinfo($oneAlbum[3]); | 80 | if(!empty($Albums->fileList)) |
| 92 | $nomJSONsansExt = $chemin['filename']; | ||
| 93 | |||
| 94 | // au cas où la discographie ne contient aucun html | ||
| 95 | if(!empty($albumNamesHTML)) | ||
| 96 | { | 81 | { |
| 97 | if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) | 82 | if(file_exists('data/discographie/html/' . $albumsJSON[$i][3] . '.html')) |
| 98 | { | 83 | { |
| 99 | $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; | 84 | $lienAlbum[$i] = 'page=album&album_name=' . $albumsJSON[$i][0] . '&album_code=' . $albumsJSON[$i][3]; |
| 100 | $avecLien[$i] = true; | 85 | $avecLien[$i] = true; |
| 101 | $linkDiscoChrono[$i] = 'linkChrono'; // css | 86 | $linkDiscoChrono[$i] = 'linkChrono'; // css |
| 102 | } | 87 | } |
| 103 | else | 88 | else |
| 104 | { | 89 | { |
| 105 | $lienAlbum[$i] = 'discographie#' . $albumsJSON[$i][0]; | 90 | $lienAlbum[$i] = 'page=discographie#' . $albumsJSON[$i][0]; |
| 106 | $avecLien[$i] = false; | 91 | $avecLien[$i] = false; |
| 107 | $linkDiscoChrono[$i] = 'noLinkChrono'; // css | 92 | $linkDiscoChrono[$i] = 'noLinkChrono'; // css |
| 108 | } | 93 | } |
| 109 | $i++; | 94 | $lienBoutonModif[$i] = 'page=discographie&action=edition&album_code=' . $albumsJSON[$i][3]; |
| 110 | } | 95 | } |
| 111 | } | 96 | } |
| 112 | 97 | ||
| @@ -122,7 +107,7 @@ function album($albumCode, $albumName) | |||
| 122 | $page_actuelle = 'discographie'; | 107 | $page_actuelle = 'discographie'; |
| 123 | $title = $albumName; | 108 | $title = $albumName; |
| 124 | 109 | ||
| 125 | $album = Album::readOneAlbum($albumCode); // simple, efficace | 110 | $album = Album::readOneHTML($albumCode); // simple, efficace |
| 126 | 111 | ||
| 127 | // variables $css, $header et $content | 112 | // variables $css, $header et $content |
| 128 | require('view/album.php'); | 113 | require('view/album.php'); |
