From 29df6f1362745eabf4fbcaedf309eb63795152fa Mon Sep 17 00:00:00 2001 From: polo Date: Mon, 29 Nov 2021 03:25:19 +0100 Subject: discographie --- controller/admin.php | 92 ++++++++++++++++++++++--------------------------- controller/ckeditor.php | 63 +++++++++++++++++---------------- controller/visitor.php | 55 +++++++++++------------------ 3 files changed, 93 insertions(+), 117 deletions(-) (limited to 'controller') 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 @@ findFileName($numArticle); - $_SESSION['nomFichier'] = $Article->fileName; + $_SESSION['target'] = $Article->fileName; // suppression if($suppression) @@ -42,10 +42,10 @@ function melaineEdit($numArticle, $suppression) $articles = array_reverse($Article->readAll()); // lourd // sécurisation du contenu pré-existant inséré dans l'éditeur - if($numArticle >= 0 && !$suppression) + if($numArticle > 0 && !$suppression) { require('controller/ckeditor.php'); - $texte = preparationCKeditor($numArticle, $texte); + $texte = preparationCKeditor($texte); } // NB: penser à ajouter au template la fonctionnalité "autosave" @@ -61,104 +61,96 @@ function melaineEdit($numArticle, $suppression) require('view/template.php'); } -function discoEdit($numArticle, $albumCode, $suppression) +function discoEdit($albumCode, $suppression) { $page_actuelle = "discographie"; $title = "Discographie"; // modèle - $Album = new Album($page_actuelle); - $Album->makeFileList(); + $Albums = new Album($page_actuelle); + $Albums->makeFileList(); // nouvel album - if($numArticle == 0) + if($albumCode == '') { + unset($_SESSION['target']); $title = "Ajouter un album"; + + // formulaires vides + $vignette = ['', '', '']; $texte = ''; } else { - // nom de l'article ciblé (objet et session) - $Album->findFileName($numArticle); - $_SESSION['nomFichier'] = $Album->fileName; + // album ciblé + $Albums->albumCode = $albumCode; // suppression if($suppression) { - $Album->delete(); + $Albums->delete(); header('Location: index.php?page=' . $page_actuelle); exit(); } // modification else { + $_SESSION['target'] = $Albums->albumCode; $title = "Modifier un album"; - $texte = $Album->readOneAlbum($albumCode); - $vignette = json_decode($Album->getVignette(), true); + $texte = $Albums->readOneHTML($albumCode); + $vignette = $Albums->getVignetteJSON(); } } // traitements PHP pour l'éditeur // sécurisation du contenu pré-existant inséré dans l'éditeur - if($numArticle >= 0 && !$suppression) + if(!empty($albumCode) && !$suppression && !empty($texte)) { require('controller/ckeditor.php'); - $texte = preparationCKeditor($numArticle, $texte); + $texte = preparationCKeditor($texte); } + // préremplir le champ + // c'est normallement impossible + // contenu de tous les fichiers JSON (= tableau de chaines) - $albumsJSON = $Album->readAll(); + $albumsJSON = $Albums->readAll(); // noms des fichiers JSON - $albumNamesJSON = $Album->fileList; + $albumNamesJSON = $Albums->fileList; - // changer les chaines JSON en tableaux: titre, année, pochette - $i = 0; - $annees = array(); - foreach($albumsJSON as $oneAlbum) + $annees = []; + for($i = 0; $i < count($albumsJSON); $i++) { - $albumsJSON[$i] = json_decode($oneAlbum, true); + // une case supplémentaire contient le "albumCode" + $albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename']; - // ajout des noms des fichiers JSON - $albumsJSON[$i][3] = $albumNamesJSON[$i]; $annees[$i] = $albumsJSON[$i][1]; - $i++; } - print_r($albumsJSON); - //exit(); + // tri d'un tableau multidimensionnel array_multisort($annees, $albumsJSON); - // on passe maintenant au contenu HTML - $Album->format = 'html'; - $Album->makeFileList(); - $albumNamesHTML = $Album->fileList; - // lien vers le HTML ou ancre? - // pour chaque album, détecter le fichier html - // si non, ne fournir qu'un lien d'ancre pour la liste d'album - $i = 0; $avecLien = []; - foreach($albumsJSON as $oneAlbum) + $linkDiscoChrono = []; + for($i = 0; $i < count($albumsJSON); $i++) { - // nom sans extension - $chemin = pathinfo($oneAlbum[3]); - $nomJSONsansExt = $chemin['filename']; - - // au cas où la discographie ne contient aucun html - if(!empty($albumNamesHTML)) + // cas particulier où le dossier "html" est vide + if(!empty($Albums->fileList)) { - if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) + if(file_exists('data/discographie/html/' . $albumsJSON[$i][3] . '.html')) { - $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; - $lienBoutonModif[$i] = 'discographie&action=edition&album_code=' . $nomJSONsansExt; + $lienAlbum[$i] = 'page=album&album_name=' . $albumsJSON[$i][0] . '&album_code=' . $albumsJSON[$i][3]; $avecLien[$i] = true; + $linkDiscoChrono[$i] = 'linkChrono'; // css } else { - $lienAlbum[$i] = 'discographie#' . $albumsJSON[$i][0]; + $lienAlbum[$i] = 'page=discographie#' . $albumsJSON[$i][0]; $avecLien[$i] = false; + $linkDiscoChrono[$i] = 'noLinkChrono'; // css } - $i++; + $lienBoutonModif[$i] = 'page=discographie&action=edition&album_code=' . $albumsJSON[$i][3]; } } 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 @@ // il y a aussi un fichier CSS parce que le HTML créé par l'éditeur ne suffit pas à lui-même // avant de placer l'éditeur -function preparationCKeditor($numArticle, $texte) +function preparationCKeditor($html) { - // ici $numArticle sert uniquement à savoir si on crée ou modifie un article + // texte initial inséré avec setData() dans l'éditeur + // danger! + // 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 - // texte initial inséré avec setData() dans l'éditeur, - // on recherche ici les causes expliquant qu'il n'apparaisse pas à l'ouverture de l'éditeur, - // les données précédentes sont écrasées à la validation du nouveau texte - if ($numArticle > 0) + if(empty($html)) { - if(empty($texte)) - { - header('Location: index.php?erreur=empty_input'); - } + header('Location: index.php?erreur=empty_input'); + } - // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine - $texte = trim($texte); + // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine + $html = trim($html); - // supprimer les sauts de ligne - $sautsDeLigne = array("\n", "\r", "\r\n"); - $texte = str_replace($sautsDeLigne, '', $texte); + // supprimer les sauts de ligne + $sautsDeLigne = array("\n", "\r", "\r\n"); + $html = str_replace($sautsDeLigne, '', $html); - // échapper tous les ', ", \ et caractère NULL - $texte = addslashes($texte); - } - else - { - $texte = ''; // nouveau contenu - } + // échapper tous les ', ", \ et caractère NULL + $html = addslashes($html); - return($texte); + return($html); } // réception du HTML créé par l'éditeur // le nom du fichier est celui dans $_SESSION['nomFichier'] -function submitCKeditor($nomFichier) +function submitCKeditor($target) { $page = $_GET['page']; @@ -79,10 +71,10 @@ function submitCKeditor($nomFichier) $Album = new Album($page); // enregistrement - if($_GET['article'] == 0) + if($target == '') { // page disco - $Album->createVignette($titre, $annee, $pochette); + $_SESSION['erreur'] = $Album->createVignette($titre, $annee, $pochette); // page de l'album if(!empty($_POST['contenu'])) @@ -92,28 +84,35 @@ function submitCKeditor($nomFichier) } else { + $Album->albumCode = $target; + // page disco - $Album->updateVignette($titre, $annee, $pochette); - + $_SESSION['erreur'] = $Album->updateVignetteJSON($titre, $annee, $pochette); + // page de l'album if(isset($_POST['contenu'])) { - $Album->update($content); + $Album->format = 'html'; + $Album->setFileName(); + if(!empty($Album->fileName)) + { + $Album->update($_POST['contenu']); + } } } } // autres pages else { - $Article = new Page($page, 'html'); + $Article = new Page($page); - if($_GET['article'] == 0) + if($target == '') { $Article->create($contenu); } else { - $Article->fileName = $nomFichier; + $Article->fileName = $target; $Article->update($contenu); } } 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 @@ makeFileList(); + $Albums = new Album($page_actuelle); + $Albums->makeFileList(); // contenu de tous les fichiers JSON (= tableau de chaines) - $albumsJSON = array_reverse($AllAlbums->readAll()); + $albumsJSON = $Albums->readAll(); // noms des fichiers JSON - $albumNamesJSON = $AllAlbums->fileList; + $albumNamesJSON = $Albums->fileList; - // changer les chaines JSON en tableaux: titre, année, pochette - $i = 0; - $annees = array(); - foreach($albumsJSON as $oneAlbum) + $annees = []; + for($i = 0; $i < count($albumsJSON); $i++) { - $albumsJSON[$i] = json_decode($oneAlbum, true); - $annees[$i] = $albumsJSON[$i][1]; + // une case supplémentaire contient le "albumCode" + $albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename']; - // ajout des noms des fichiers JSON - $albumsJSON[$i][3] = $albumNamesJSON[$i]; - - $i++; + $annees[$i] = $albumsJSON[$i][1]; } + // tri d'un tableau multidimensionnel array_multisort($annees, $albumsJSON); - // on passe maintenant au contenu HTML - $AllAlbums->format = 'html'; - $AllAlbums->makeFileList(); - $albumNamesHTML = $AllAlbums->fileList; - // lien vers le HTML ou ancre? - // pour chaque album, détecter le fichier html - // si non, ne fournir qu'un lien d'ancre pour la liste d'album - $i = 0; + $lienAlbum = []; $avecLien = []; $linkDiscoChrono = []; - foreach($albumsJSON as $oneAlbum) + for($i = 0; $i < count($albumsJSON); $i++) { - // nom sans extension - $chemin = pathinfo($oneAlbum[3]); - $nomJSONsansExt = $chemin['filename']; - - // au cas où la discographie ne contient aucun html - if(!empty($albumNamesHTML)) + // cas particulier où le dossier "html" est vide + if(!empty($Albums->fileList)) { - if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) + if(file_exists('data/discographie/html/' . $albumsJSON[$i][3] . '.html')) { - $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; + $lienAlbum[$i] = 'page=album&album_name=' . $albumsJSON[$i][0] . '&album_code=' . $albumsJSON[$i][3]; $avecLien[$i] = true; $linkDiscoChrono[$i] = 'linkChrono'; // css } else { - $lienAlbum[$i] = 'discographie#' . $albumsJSON[$i][0]; + $lienAlbum[$i] = 'page=discographie#' . $albumsJSON[$i][0]; $avecLien[$i] = false; $linkDiscoChrono[$i] = 'noLinkChrono'; // css } - $i++; + $lienBoutonModif[$i] = 'page=discographie&action=edition&album_code=' . $albumsJSON[$i][3]; } } @@ -122,7 +107,7 @@ function album($albumCode, $albumName) $page_actuelle = 'discographie'; $title = $albumName; - $album = Album::readOneAlbum($albumCode); // simple, efficace + $album = Album::readOneHTML($albumCode); // simple, efficace // variables $css, $header et $content require('view/album.php'); -- cgit v1.2.3