From 48e4b0bf8796dcd6a80c8f443a31832c512424fd Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 10 Aug 2021 02:11:20 +0200 Subject: disco --- controller/admin.php | 88 +++++++++++++++++++++++++++++++------ controller/ckeditor.php | 105 +++++++++++++++++++++++++++++++------------- controller/installation.php | 8 +++- controller/visitor.php | 24 +++++++--- 4 files changed, 175 insertions(+), 50 deletions(-) (limited to 'controller') diff --git a/controller/admin.php b/controller/admin.php index a35f28a..2f7a7cb 100644 --- a/controller/admin.php +++ b/controller/admin.php @@ -2,16 +2,19 @@ // controller/admin.php // // utilisation du site en écriture +// version des pages en mode admin lorsque celui-ci crée ou modifie quelque chose -// pages du site en version admin -function melaineEdit($numArticle) +function melaineEdit($numArticle, $suppression) { $page_actuelle = "melaine"; - // tableau $articles[] - $croissant = False; - $articles = lireArticles($page_actuelle, $croissant); + $Articles = new ArticlesManager; + // contenu de la page + $Articles->setPage($page_actuelle); + $Articles->getFiles(); + + // nouvel article if($numArticle == 0) { $title = "Ajouter un article"; @@ -19,10 +22,31 @@ function melaineEdit($numArticle) } else { - $title = "Modifier un article"; - $texte = lireUnArticle($_SESSION['nomFichier']); + // nom de l'article ciblé (objet et session) + $Articles->findFileName($numArticle); + $_SESSION['nomFichier'] = $Articles->getFileName(); + + // suppression + if($suppression) + { + $Articles->delete(); + header('Location: index.php?page=' . $page_actuelle); + } + // modification + else + { + $title = "Modifier un article"; + + // contenu envoyé à l'éditeur + $texte = $Articles->getOne(); + } } + // pour l'affichage des articles + //$Articles->setAscending(False); + $Articles->reverseFilesArray(); + $articles = $Articles->getAll(); + // traitements PHP pour l'éditeur require('controller/ckeditor.php'); // sécurisation du contenu pré-existant inséré dans l'éditeur @@ -31,16 +55,52 @@ function melaineEdit($numArticle) // NB: penser à ajouter au template la fonctionnalité "autosave" // https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/saving-data.html - // variable $editeurHTML, $initial est inséré dedans - require('view/template-ckeditor.php'); + // création des morceaux en HTML avant assemblage - // création des morceaux en HTML avant assemblage, c'est-à-dire; - // les variables $css, $js, $header et $content + // variable $editeurHTML, on insère $texte dedans + require('view/template-ckeditor.php'); + + // variables $css, $js, $header et $content require('view/melaine.php'); - // le tableau de données ($articles) et l'éditeur ($editeurHTML) - // font partie de $content + // le tableau de données ($articles) et l'éditeur ($editeurHTML) font partie de $content + + // fin de l'assemblage + require('view/template.php'); +} - // assemblage de la page! +function discoEdit($numArticle, $suppression) +{ + $page_actuelle = "discographie"; + $title = "Discographie"; + + // modèle + $Albums = new AlbumsManager; + $texte = ''; + + // traitements PHP pour l'éditeur + require('controller/ckeditor.php'); + // sécurisation du contenu pré-existant inséré dans l'éditeur + $texte = preparationCKeditor($numArticle, $texte); + + // variable $additionalInputs + ob_start(); + ?> +

Infos qui seront affichées sur cette page:

+ +
+ +
+ + +

+ 0) { + if(empty($texte)) + { + header('Location: index.php?erreur=empty_input'); + } + // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine $texte = trim($texte); @@ -34,8 +41,11 @@ function preparationCKeditor($numArticle, $texte) // réception du HTML créé par l'éditeur // le nom du fichier est celui dans $_SESSION['nomFichier'] -function submitCKeditor($page, $nomFichier, $contenu) +function submitCKeditor($nomFichier) { + $page = $_GET['page']; + $contenu = $_POST['contenu']; + // déjà fait mais on ne sait jamais if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) { @@ -43,30 +53,45 @@ function submitCKeditor($page, $nomFichier, $contenu) } else { - // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur) - // on évitera de perdre un article existant par erreur !! + // récupérer les liens multimedia + //require("media.php"); + //$contenu = mediaSubmit($contenu); + + // sécurité faille XSS + $configHtmLawed = array( + 'safe'=>1, // protection contre les élements et attributs dangereux + 'elements'=>'h2, h3, h4, p, br, span, i, strong, u, mark, blockquote, li, ol, ul, a, figure, hr, img, figcaption, table, tbody, tr, td', // paramètre optionnel: les balises non indiquées sont supprimées + 'deny_attribute'=>'id', // gêner le JS hostile + // on garde 'class' et 'style' utilisés par le ckediteur + ); + $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs + } + + if($page == 'discographie') + { + $titre = $_POST['titre']; + $annee = $_POST['annee']; + $pochette = $_POST['pochette']; + + $titre = htmLawed($titre, $configHtmLawed, $specHtmLawed); + $titre = trim($titre); + $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed); + $annee = htmLawed($annee, $configHtmLawed, $specHtmLawed); + $annee = trim($annee); + $contenu = trim($contenu); + } + else // pages comme "melaine" + { + // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !! if($contenu == '') { header('Location: index.php?page=' . $page . '&erreur=contenu_vide'); } else { - // récupérer les liens multimedia - //require("media.php"); - //$contenu = mediaSubmit($contenu); - - // sécurité faille XSS - $configHtmLawed = array( - 'safe'=>1, // protection contre les élements et attributs dangereux - 'elements'=>'h2, h3, h4, p, br, span, i, strong, u, mark, blockquote, li, ol, ul, a, figure, hr, img, figcaption, table, tbody, tr, td', // paramètre optionnel: les balises non indiquées sont supprimées - // paramètre optionnel: les balises non indiquées sont supprimées - 'deny_attribute'=>'id', // gêner le JS hostile - // on garde 'class' et 'style' utilisés par l'ckediteur - ); - $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs + // failles XSS $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed); - - // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine + // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur) $contenu = trim($contenu); } } @@ -81,22 +106,42 @@ function submitCKeditor($page, $nomFichier, $contenu) // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo ''; // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert... - // echo($page); - // echo($article); - // echo($contenu); - // die(); + //var_dump($titre, $annee, $pochette, $contenu); + //die(); + + // modèle + $Article = new ArticlesManager; + $Article->setPage($page); // enregistrement - require('model/melaine-write.php'); if($_GET['article'] == 0) { - nouvelArticle($page, $contenu); + $Article->create($contenu); } else { - modifArticle($page, $nomFichier, $contenu); + $Article->setFileName($nomFichier); + $Article->update($contenu); + } + + if($page == 'discographie') + { + $Album = new AlbumsManager; + + var_dump($_POST); + echo('
'); + //var_dump($_GET['article']); + + // enregistrement + if($_GET['article'] == 0) + { + // ERREUR, il faut le même nombre de paramètre pour une méthode du même nom + $Album->create($titre, $annee, $pochette); + } + else + { + $Album->update($titre, $annee, $pochette); + } + die(); } - - // debuggage - //exit(); } \ No newline at end of file diff --git a/controller/installation.php b/controller/installation.php index 4d5791a..b15dce1 100644 --- a/controller/installation.php +++ b/controller/installation.php @@ -48,7 +48,7 @@ function installation() // - modifier soit-même les droits du dossier data (777), quoique 111 serait pas mal non plus // - modifier ceux du dossier parent (nom du site) avec son client FTP à la mise en ligne chez l'hébergeur et ensuite remettre tout comme avant - $listePages = array('melaine', 'disco', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); + $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); foreach ($listePages as $page) { if(!file_exists('data/' . $page)) @@ -56,6 +56,12 @@ function installation() mkdir('data/' . $page); chmod('data/' . $page, 0777); } + // un dossier en plus dans discographie + if(!file_exists('data/discographie/json')) + { + mkdir('data/discographie/json'); + chmod('data/discographie/json', 0777); + } if(!file_exists('data/' . $page . '/html')) { mkdir('data/' . $page . '/html'); diff --git a/controller/visitor.php b/controller/visitor.php index a08ea95..6fa0822 100644 --- a/controller/visitor.php +++ b/controller/visitor.php @@ -32,9 +32,12 @@ function melaineVisitor() $page_actuelle = "melaine"; $title = "Mais qui est Melaine Favennec?"; - // tableau $articles - $croissant = False; - $articles = lireArticles($page_actuelle, $croissant); + // modèle + $Articles = new ArticlesManager; + $Articles->setPage($page_actuelle); + $Articles->getFiles(); + $Articles->reverseFilesArray(); + $articles = $Articles->getAll(); // vérification pour protéger les visiteurs // normalement déjà faite dans submit.php, au cas où la base a été trafiquée @@ -46,8 +49,19 @@ function melaineVisitor() require('view/template.php'); } -function discographie() -{} +function discoVisitor() +{ + $page_actuelle = "discographie"; + $title = "Discographie"; + + // modèle + $Albums = new AlbumsManager; + + // variables $css, $js et $content + require('view/discographie.php'); + // HTML + require('view/template.php'); +} function presse() {} -- cgit v1.2.3