summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2021-08-10 02:11:20 +0200
committerpolo <ordipolo@gmx.fr>2021-08-10 02:13:54 +0200
commit48e4b0bf8796dcd6a80c8f443a31832c512424fd (patch)
tree06b639e0226f5896285d3cd8292b969dfa90508b /controller
parent86c2a611e55c9e35384febecf34964e214c0296e (diff)
downloadmelaine-48e4b0bf8796dcd6a80c8f443a31832c512424fd.zip
disco
Diffstat (limited to 'controller')
-rw-r--r--controller/admin.php88
-rw-r--r--controller/ckeditor.php105
-rw-r--r--controller/installation.php8
-rw-r--r--controller/visitor.php24
4 files changed, 175 insertions, 50 deletions
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 @@
2// controller/admin.php 2// controller/admin.php
3// 3//
4// utilisation du site en écriture 4// utilisation du site en écriture
5// version des pages en mode admin lorsque celui-ci crée ou modifie quelque chose
5 6
6// pages du site en version admin 7function melaineEdit($numArticle, $suppression)
7function melaineEdit($numArticle)
8{ 8{
9 $page_actuelle = "melaine"; 9 $page_actuelle = "melaine";
10 10
11 // tableau $articles[] 11 $Articles = new ArticlesManager;
12 $croissant = False;
13 $articles = lireArticles($page_actuelle, $croissant);
14 12
13 // contenu de la page
14 $Articles->setPage($page_actuelle);
15 $Articles->getFiles();
16
17 // nouvel article
15 if($numArticle == 0) 18 if($numArticle == 0)
16 { 19 {
17 $title = "Ajouter un article"; 20 $title = "Ajouter un article";
@@ -19,10 +22,31 @@ function melaineEdit($numArticle)
19 } 22 }
20 else 23 else
21 { 24 {
22 $title = "Modifier un article"; 25 // nom de l'article ciblé (objet et session)
23 $texte = lireUnArticle($_SESSION['nomFichier']); 26 $Articles->findFileName($numArticle);
27 $_SESSION['nomFichier'] = $Articles->getFileName();
28
29 // suppression
30 if($suppression)
31 {
32 $Articles->delete();
33 header('Location: index.php?page=' . $page_actuelle);
34 }
35 // modification
36 else
37 {
38 $title = "Modifier un article";
39
40 // contenu envoyé à l'éditeur
41 $texte = $Articles->getOne();
42 }
24 } 43 }
25 44
45 // pour l'affichage des articles
46 //$Articles->setAscending(False);
47 $Articles->reverseFilesArray();
48 $articles = $Articles->getAll();
49
26 // traitements PHP pour l'éditeur 50 // traitements PHP pour l'éditeur
27 require('controller/ckeditor.php'); 51 require('controller/ckeditor.php');
28 // sécurisation du contenu pré-existant inséré dans l'éditeur 52 // sécurisation du contenu pré-existant inséré dans l'éditeur
@@ -31,16 +55,52 @@ function melaineEdit($numArticle)
31 // NB: penser à ajouter au template la fonctionnalité "autosave" 55 // NB: penser à ajouter au template la fonctionnalité "autosave"
32 // https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/saving-data.html 56 // https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/saving-data.html
33 57
34 // variable $editeurHTML, $initial est inséré dedans 58 // création des morceaux en HTML avant assemblage
35 require('view/template-ckeditor.php');
36 59
37 // création des morceaux en HTML avant assemblage, c'est-à-dire; 60 // variable $editeurHTML, on insère $texte dedans
38 // les variables $css, $js, $header et $content 61 require('view/template-ckeditor.php');
62
63 // variables $css, $js, $header et $content
39 require('view/melaine.php'); 64 require('view/melaine.php');
40 // le tableau de données ($articles) et l'éditeur ($editeurHTML) 65 // le tableau de données ($articles) et l'éditeur ($editeurHTML) font partie de $content
41 // font partie de $content 66
67 // fin de l'assemblage
68 require('view/template.php');
69}
42 70
43 // assemblage de la page! 71function discoEdit($numArticle, $suppression)
72{
73 $page_actuelle = "discographie";
74 $title = "Discographie";
75
76 // modèle
77 $Albums = new AlbumsManager;
78 $texte = '';
79
80 // traitements PHP pour l'éditeur
81 require('controller/ckeditor.php');
82 // sécurisation du contenu pré-existant inséré dans l'éditeur
83 $texte = preparationCKeditor($numArticle, $texte);
84
85 // variable $additionalInputs
86 ob_start();
87 ?>
88 <p><i>Infos qui seront affichées sur cette page:</i></p>
89 <label for="titre" >Titre</label>
90 <input type="text" name="titre" required ><br />
91 <label for="annee" >Année</label>
92 <input type="text" name="annee" ><br />
93 <label for="pochette" >Pochette du disque (jpg ou png)</label>
94 <input type="file" name="pochette" >
95 <br /><br />
96 <?php
97 $additionalInputs = ob_get_clean();
98
99 // variable $editeurHTML, on insère $texte dedans
100 require('view/template-ckeditor.php');
101 // variables $css, $js et $content
102 require('view/discographie.php');
103 // fin de l'assemblage
44 require('view/template.php'); 104 require('view/template.php');
45} 105}
46 106
diff --git a/controller/ckeditor.php b/controller/ckeditor.php
index ea90726..9262da0 100644
--- a/controller/ckeditor.php
+++ b/controller/ckeditor.php
@@ -9,11 +9,18 @@
9// avant de placer l'éditeur 9// avant de placer l'éditeur
10function preparationCKeditor($numArticle, $texte) 10function preparationCKeditor($numArticle, $texte)
11{ 11{
12 // $numArticle sert à placer l'éditeur sur la page et à lire et écrire dans le bon dossier 12 // ici $numArticle sert uniquement à savoir si on crée ou modifie un article
13 13
14 // texte initial pour setData() à modifier avec l'éditeur 14 // texte initial inséré avec setData() dans l'éditeur,
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
15 if ($numArticle > 0) 17 if ($numArticle > 0)
16 { 18 {
19 if(empty($texte))
20 {
21 header('Location: index.php?erreur=empty_input');
22 }
23
17 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine 24 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine
18 $texte = trim($texte); 25 $texte = trim($texte);
19 26
@@ -34,8 +41,11 @@ function preparationCKeditor($numArticle, $texte)
34 41
35// réception du HTML créé par l'éditeur 42// réception du HTML créé par l'éditeur
36// le nom du fichier est celui dans $_SESSION['nomFichier'] 43// le nom du fichier est celui dans $_SESSION['nomFichier']
37function submitCKeditor($page, $nomFichier, $contenu) 44function submitCKeditor($nomFichier)
38{ 45{
46 $page = $_GET['page'];
47 $contenu = $_POST['contenu'];
48
39 // déjà fait mais on ne sait jamais 49 // déjà fait mais on ne sait jamais
40 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) 50 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
41 { 51 {
@@ -43,30 +53,45 @@ function submitCKeditor($page, $nomFichier, $contenu)
43 } 53 }
44 else 54 else
45 { 55 {
46 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur) 56 // récupérer les liens multimedia
47 // on évitera de perdre un article existant par erreur !! 57 //require("media.php");
58 //$contenu = mediaSubmit($contenu);
59
60 // sécurité faille XSS
61 $configHtmLawed = array(
62 'safe'=>1, // protection contre les élements et attributs dangereux
63 '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
64 'deny_attribute'=>'id', // gêner le JS hostile
65 // on garde 'class' et 'style' utilisés par le ckediteur
66 );
67 $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs
68 }
69
70 if($page == 'discographie')
71 {
72 $titre = $_POST['titre'];
73 $annee = $_POST['annee'];
74 $pochette = $_POST['pochette'];
75
76 $titre = htmLawed($titre, $configHtmLawed, $specHtmLawed);
77 $titre = trim($titre);
78 $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed);
79 $annee = htmLawed($annee, $configHtmLawed, $specHtmLawed);
80 $annee = trim($annee);
81 $contenu = trim($contenu);
82 }
83 else // pages comme "melaine"
84 {
85 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !!
48 if($contenu == '') 86 if($contenu == '')
49 { 87 {
50 header('Location: index.php?page=' . $page . '&erreur=contenu_vide'); 88 header('Location: index.php?page=' . $page . '&erreur=contenu_vide');
51 } 89 }
52 else 90 else
53 { 91 {
54 // récupérer les liens multimedia 92 // failles XSS
55 //require("media.php");
56 //$contenu = mediaSubmit($contenu);
57
58 // sécurité faille XSS
59 $configHtmLawed = array(
60 'safe'=>1, // protection contre les élements et attributs dangereux
61 '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
62 // paramètre optionnel: les balises non indiquées sont supprimées
63 'deny_attribute'=>'id', // gêner le JS hostile
64 // on garde 'class' et 'style' utilisés par l'ckediteur
65 );
66 $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs
67 $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed); 93 $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed);
68 94 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur)
69 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine
70 $contenu = trim($contenu); 95 $contenu = trim($contenu);
71 } 96 }
72 } 97 }
@@ -81,22 +106,42 @@ function submitCKeditor($page, $nomFichier, $contenu)
81 // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; 106 // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>';
82 // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert... 107 // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert...
83 108
84 // echo($page); 109 //var_dump($titre, $annee, $pochette, $contenu);
85 // echo($article); 110 //die();
86 // echo($contenu); 111
87 // die(); 112 // modèle
113 $Article = new ArticlesManager;
114 $Article->setPage($page);
88 115
89 // enregistrement 116 // enregistrement
90 require('model/melaine-write.php');
91 if($_GET['article'] == 0) 117 if($_GET['article'] == 0)
92 { 118 {
93 nouvelArticle($page, $contenu); 119 $Article->create($contenu);
94 } 120 }
95 else 121 else
96 { 122 {
97 modifArticle($page, $nomFichier, $contenu); 123 $Article->setFileName($nomFichier);
124 $Article->update($contenu);
125 }
126
127 if($page == 'discographie')
128 {
129 $Album = new AlbumsManager;
130
131 var_dump($_POST);
132 echo('<br />');
133 //var_dump($_GET['article']);
134
135 // enregistrement
136 if($_GET['article'] == 0)
137 {
138 // ERREUR, il faut le même nombre de paramètre pour une méthode du même nom
139 $Album->create($titre, $annee, $pochette);
140 }
141 else
142 {
143 $Album->update($titre, $annee, $pochette);
144 }
145 die();
98 } 146 }
99
100 // debuggage
101 //exit();
102} \ No newline at end of file 147} \ 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()
48 // - modifier soit-même les droits du dossier data (777), quoique 111 serait pas mal non plus 48 // - modifier soit-même les droits du dossier data (777), quoique 111 serait pas mal non plus
49 // - 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 49 // - 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
50 50
51 $listePages = array('melaine', 'disco', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); 51 $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives');
52 foreach ($listePages as $page) 52 foreach ($listePages as $page)
53 { 53 {
54 if(!file_exists('data/' . $page)) 54 if(!file_exists('data/' . $page))
@@ -56,6 +56,12 @@ function installation()
56 mkdir('data/' . $page); 56 mkdir('data/' . $page);
57 chmod('data/' . $page, 0777); 57 chmod('data/' . $page, 0777);
58 } 58 }
59 // un dossier en plus dans discographie
60 if(!file_exists('data/discographie/json'))
61 {
62 mkdir('data/discographie/json');
63 chmod('data/discographie/json', 0777);
64 }
59 if(!file_exists('data/' . $page . '/html')) 65 if(!file_exists('data/' . $page . '/html'))
60 { 66 {
61 mkdir('data/' . $page . '/html'); 67 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()
32 $page_actuelle = "melaine"; 32 $page_actuelle = "melaine";
33 $title = "Mais qui est Melaine Favennec?"; 33 $title = "Mais qui est Melaine Favennec?";
34 34
35 // tableau $articles 35 // modèle
36 $croissant = False; 36 $Articles = new ArticlesManager;
37 $articles = lireArticles($page_actuelle, $croissant); 37 $Articles->setPage($page_actuelle);
38 $Articles->getFiles();
39 $Articles->reverseFilesArray();
40 $articles = $Articles->getAll();
38 41
39 // vérification pour protéger les visiteurs 42 // vérification pour protéger les visiteurs
40 // normalement déjà faite dans submit.php, au cas où la base a été trafiquée 43 // normalement déjà faite dans submit.php, au cas où la base a été trafiquée
@@ -46,8 +49,19 @@ function melaineVisitor()
46 require('view/template.php'); 49 require('view/template.php');
47} 50}
48 51
49function discographie() 52function discoVisitor()
50{} 53{
54 $page_actuelle = "discographie";
55 $title = "Discographie";
56
57 // modèle
58 $Albums = new AlbumsManager;
59
60 // variables $css, $js et $content
61 require('view/discographie.php');
62 // HTML
63 require('view/template.php');
64}
51 65
52function presse() 66function presse()
53{} 67{}