diff options
author | polo <ordipolo@gmx.fr> | 2021-08-10 02:11:20 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2021-08-10 02:13:54 +0200 |
commit | 48e4b0bf8796dcd6a80c8f443a31832c512424fd (patch) | |
tree | 06b639e0226f5896285d3cd8292b969dfa90508b /controller | |
parent | 86c2a611e55c9e35384febecf34964e214c0296e (diff) | |
download | melaine-48e4b0bf8796dcd6a80c8f443a31832c512424fd.zip |
disco
Diffstat (limited to 'controller')
-rw-r--r-- | controller/admin.php | 88 | ||||
-rw-r--r-- | controller/ckeditor.php | 105 | ||||
-rw-r--r-- | controller/installation.php | 8 | ||||
-rw-r--r-- | controller/visitor.php | 24 |
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 | 7 | function melaineEdit($numArticle, $suppression) |
7 | function 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! | 71 | function 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 |
10 | function preparationCKeditor($numArticle, $texte) | 10 | function 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'] |
37 | function submitCKeditor($page, $nomFichier, $contenu) | 44 | function 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 | ||
49 | function discographie() | 52 | function 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 | ||
52 | function presse() | 66 | function presse() |
53 | {} | 67 | {} |