summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2021-09-01 23:35:42 +0200
committerpolo <ordipolo@gmx.fr>2021-09-01 23:35:42 +0200
commit10954c386cacb270e4ae16837483120ca3406259 (patch)
treee3107a29984b0e91db899fc08d4a7e066eaf2710 /controller
parent452420d0cd05822a9974fe27f0edc4cc4dc300cc (diff)
downloadmelaine-10954c386cacb270e4ae16837483120ca3406259.zip
albums
Diffstat (limited to 'controller')
-rw-r--r--controller/admin.php86
-rw-r--r--controller/ckeditor.php124
-rw-r--r--controller/installation.php5
-rw-r--r--controller/visitor.php65
4 files changed, 193 insertions, 87 deletions
diff --git a/controller/admin.php b/controller/admin.php
index 0abdb1c..2588d36 100644
--- a/controller/admin.php
+++ b/controller/admin.php
@@ -8,11 +8,9 @@ function melaineEdit($numArticle, $suppression)
8{ 8{
9 $page_actuelle = "melaine"; 9 $page_actuelle = "melaine";
10 10
11 $Articles = new ArticlesManager; 11 // modèle
12 12 $Article = new OneArticle($page_actuelle);
13 // contenu de la page 13 $Article->makeFileList();
14 $Articles->setPage($page_actuelle);
15 $Articles->getFiles();
16 14
17 // nouvel article 15 // nouvel article
18 if($numArticle == 0) 16 if($numArticle == 0)
@@ -23,13 +21,13 @@ function melaineEdit($numArticle, $suppression)
23 else 21 else
24 { 22 {
25 // nom de l'article ciblé (objet et session) 23 // nom de l'article ciblé (objet et session)
26 $Articles->findFileName($numArticle); 24 $Article->findFileName($numArticle);
27 $_SESSION['nomFichier'] = $Articles->getFileName(); 25 $_SESSION['nomFichier'] = $Article->getFileName();
28 26
29 // suppression 27 // suppression
30 if($suppression) 28 if($suppression)
31 { 29 {
32 $Articles->delete(); 30 $Article->delete();
33 header('Location: index.php?page=' . $page_actuelle); 31 header('Location: index.php?page=' . $page_actuelle);
34 exit(); 32 exit();
35 } 33 }
@@ -37,15 +35,12 @@ function melaineEdit($numArticle, $suppression)
37 else 35 else
38 { 36 {
39 $title = "Modifier un article"; 37 $title = "Modifier un article";
40 38 $texte = $Article->readOne(); // entrée de l'éditeur
41 // contenu envoyé à l'éditeur
42 $texte = $Articles->getOne();
43 } 39 }
44 } 40 }
45 41
46 // pour l'affichage des articles 42 // pour l'affichage des articles
47 $Articles->reverseFilesArray(); 43 $articles = array_reverse($Article->readAll()); // lourd
48 $articles = $Articles->getAll();
49 44
50 // sécurisation du contenu pré-existant inséré dans l'éditeur 45 // sécurisation du contenu pré-existant inséré dans l'éditeur
51 if($numArticle >= 0 && !$suppression) 46 if($numArticle >= 0 && !$suppression)
@@ -73,13 +68,70 @@ function discoEdit($numArticle, $suppression)
73 $title = "Discographie"; 68 $title = "Discographie";
74 69
75 // modèle 70 // modèle
76 $Albums = new AlbumsManager; 71 $Album = new OneArticle($page_actuelle);
77 $texte = ''; 72 $Album->makeFileList();
73
74 // nouvel album
75 if($numArticle == 0)
76 {
77 $title = "Ajouter un album";
78 $texte = '';
79 }
80 else
81 {
82 // nom de l'article ciblé (objet et session)
83 $Album->findFileName($numArticle);
84 $_SESSION['nomFichier'] = $Album->getFileName();
85
86 // suppression
87 if($suppression)
88 {
89 $Album->delete();
90 header('Location: index.php?page=' . $page_actuelle);
91 exit();
92 }
93 // modification
94 else
95 {
96 $title = "Modifier un album";
97 $texte = $Album->readOne(); // entrée de l'éditeur
98 }
99 }
100
101 $albums = array_reverse($Album->readAll()); // lourd
102
103 // $albums contient un tableau de chaines JSON,
104 // on extrait de chacune 3 variables: titre, année, pochette
78 105
79 // traitements PHP pour l'éditeur 106 // traitements PHP pour l'éditeur
80 require('controller/ckeditor.php');
81 // sécurisation du contenu pré-existant inséré dans l'éditeur 107 // sécurisation du contenu pré-existant inséré dans l'éditeur
82 $texte = preparationCKeditor($numArticle, $texte); 108 if($numArticle >= 0 && !$suppression)
109 {
110 require('controller/ckeditor.php');
111 $texte = preparationCKeditor($numArticle, $texte);
112 }
113
114 // changer les chaines JSON en tableaux
115 $i = 0;
116 foreach($albums as $oneAlbum)
117 {
118 $albums[$i] = json_decode($oneAlbum, true);
119 $i++;
120 }
121
122 // pour chaque album, détecter le fichier html
123 // si il y en a un, proposer un lien <a>
124 // si non, ne fournir qu'un lien d'ancre pour la liste d'album
125 $titreAlbum = 'discographie';
126 if(false)
127 {
128 $lienAlbum = $titreAlbum;
129 }
130 else
131 {
132 $lienAlbum = 'discographie#' . $titreAlbum;
133 }
134 //echo($lienAlbum);
83 135
84 // morceaux en HTML à assembler 136 // morceaux en HTML à assembler
85 // variable $editeurHTML, contient $texte 137 // variable $editeurHTML, contient $texte
diff --git a/controller/ckeditor.php b/controller/ckeditor.php
index d25e5ac..2e72be2 100644
--- a/controller/ckeditor.php
+++ b/controller/ckeditor.php
@@ -44,35 +44,51 @@ function preparationCKeditor($numArticle, $texte)
44function submitCKeditor($nomFichier) 44function submitCKeditor($nomFichier)
45{ 45{
46 $page = $_GET['page']; 46 $page = $_GET['page'];
47 $contenu = $_POST['contenu'];
48 47
49 // déjà fait mais on ne sait jamais 48 // déjà fait mais on ne sait jamais
50 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) 49 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
51 { 50 {
52 header('Location: index.php?page=' . $page . '&erreur=connexion'); 51 header('Location: index.php?page=' . $page . '&erreur=connexion');
52 exit();
53 } 53 }
54 else 54
55 // sécurité faille XSS avec htmLawed
56 $configHtmLawed = array(
57 'safe'=>1, // protection contre les élements et attributs dangereux
58 '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
59 'deny_attribute'=>'id', // gêner le JS hostile
60 // on garde 'class' et 'style' utilisés par le ckediteur
61 );
62 $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs
63
64 // de l'éditeur
65 if(isset($_POST['contenu'])) // optionnel pour discographie
55 { 66 {
67 $contenu = $_POST['contenu'];
68
56 // récupérer les liens multimedia 69 // récupérer les liens multimedia
57 //require("media.php"); 70 //require("media.php");
58 //$contenu = mediaSubmit($contenu); 71 //$contenu = mediaSubmit($contenu);
59 72
60 // sécurité faille XSS 73 $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed);
61 $configHtmLawed = array( 74 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur)
62 'safe'=>1, // protection contre les élements et attributs dangereux 75 $contenu = trim($contenu);
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 76
64 'deny_attribute'=>'id', // gêner le JS hostile 77 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !!
65 // on garde 'class' et 'style' utilisés par le ckediteur 78 if($page != 'discographie' && $contenu == '')
66 ); 79 {
67 $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs 80 header('Location: index.php?page=' . $page . '&erreur=contenu_vide');
81 exit();
82 }
68 } 83 }
69 84
85
70 if($page == 'discographie') 86 if($page == 'discographie')
71 { 87 {
72 $titre = $_POST['titre']; 88 $titre = $_POST['titre'];
73 $annee = $_POST['annee']; 89 $annee = $_POST['annee'];
74 $pochette = $_POST['pochette']; // une image 90 $pochette = $_POST['pochette']; // une image
75 91
76 // des formulaires simples 92 // des formulaires simples
77 $titre = htmLawed($titre, $configHtmLawed, $specHtmLawed); 93 $titre = htmLawed($titre, $configHtmLawed, $specHtmLawed);
78 $titre = trim($titre); 94 $titre = trim($titre);
@@ -83,25 +99,6 @@ function submitCKeditor($nomFichier)
83 // Album->imageUpload(); 99 // Album->imageUpload();
84 // test formats jpg, jpeg, png, gif, tiff 100 // test formats jpg, jpeg, png, gif, tiff
85 // enregistrement du fichier 101 // enregistrement du fichier
86
87 // du ckeditor
88 $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed);
89 $contenu = trim($contenu);
90 }
91 else // pages comme "melaine"
92 {
93 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !!
94 if($contenu == '')
95 {
96 header('Location: index.php?page=' . $page . '&erreur=contenu_vide');
97 }
98 else
99 {
100 // failles XSS
101 $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed);
102 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur)
103 $contenu = trim($contenu);
104 }
105 } 102 }
106 103
107 // lien sans http:// 104 // lien sans http://
@@ -114,42 +111,61 @@ function submitCKeditor($nomFichier)
114 // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; 111 // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>';
115 // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert... 112 // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert...
116 113
117 //var_dump($titre, $annee, $pochette, $contenu);
118 //die();
119
120 // modèle
121 $Article = new ArticlesManager;
122 $Article->setPage($page);
123 114
124 // enregistrement 115 // enregistrement
125 if($_GET['article'] == 0) 116 // var_dump($titre, $annee, $pochette, $contenu);
126 { 117 // die();
127 $Article->create($contenu);
128 }
129 else
130 {
131 $Article->setFileName($nomFichier);
132 $Article->update($contenu);
133 }
134 118
119 // modèle
135 if($page == 'discographie') 120 if($page == 'discographie')
136 { 121 {
137 $Album = new AlbumsManager; 122 // on instancie avec l'enfant de OneArticle
123 $Album = new Album($page);
138 124
139 var_dump($_POST);
140 echo('<br />');
141 //var_dump($_GET['article']); 125 //var_dump($_GET['article']);
142 126 //var_dump($_POST);
127 //exit();
128
143 // enregistrement 129 // enregistrement
144 if($_GET['article'] == 0) 130 if($_GET['article'] == 0)
145 { 131 {
146 // ERREUR, il faut le même nombre de paramètre pour une méthode du même nom 132 // page disco
147 $Album->create($titre, $annee, $pochette); 133 $Album->createVignette($titre, $annee, $pochette);
134
135 // page détail de l'album
136 if(!empty($_POST['contenu']))
137 {
138 $Album->create($contenu);
139 }
140 }
141 else
142 {
143 // page disco
144 $Album->updateVignette($titre, $annee, $pochette);
145
146 // page détail de l'album
147 if(isset($_POST['contenu']))
148 {
149 $Album->update($content);
150 }
151 }
152 }
153 // autres pages
154 else
155 {
156 $Article = new OneArticle($page);
157
158 if($_GET['article'] == 0)
159 {
160 $Article->create($contenu);
148 } 161 }
149 else 162 else
150 { 163 {
151 $Album->update($titre, $annee, $pochette); 164 $Article->setFileName($nomFichier);
165 $Article->update($contenu);
152 } 166 }
153 die();
154 } 167 }
155} \ No newline at end of file 168}
169
170function cleanHTML($contenu)
171{}
diff --git a/controller/installation.php b/controller/installation.php
index 42212f5..fc8c900 100644
--- a/controller/installation.php
+++ b/controller/installation.php
@@ -25,7 +25,7 @@ function installation()
25 if(!file_exists(".htaccess")) 25 if(!file_exists(".htaccess"))
26 { 26 {
27 echo('<p style="color: red;" >Le .htaccess semble absent ce qui rend le site vulnérable aux attaques, veuillez contacter l\'administrateur.</p>'); 27 echo('<p style="color: red;" >Le .htaccess semble absent ce qui rend le site vulnérable aux attaques, veuillez contacter l\'administrateur.</p>');
28 // $contenu = "# redirection en cas d'erreur 404\nErrorDocument 404 http://" . $_SERVER['SERVER_NAME'] . "/" . $nomDuSite . "/erreur404.php\n# Interdire exploration du répertoire\nOptions All -Indexes"; 28 //$contenu = "# redirection en cas d'erreur 404\nErrorDocument 404 http://" . $_SERVER['SERVER_NAME'] . "/" . $nomDuSite . "/erreur404.php\n# Interdire exploration du répertoire\nOptions All -Indexes";
29 // $fichier = fopen('.htaccess', 'w'); 29 // $fichier = fopen('.htaccess', 'w');
30 // fputs($fichier, $contenu); 30 // fputs($fichier, $contenu);
31 // fclose($fichier); 31 // fclose($fichier);
@@ -49,8 +49,7 @@ function installation()
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 // le 0 devant signifie que le nombre est en octal 51 // le 0 devant signifie que le nombre est en octal
52 // changer cette valeur à la mise en production du site si le script d'upload des données est bon 52 $droitsDossiers = 0777; // mettre 0700 à la fin
53 $droitsDossiers = 0777;
54 53
55 $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); 54 $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives');
56 foreach ($listePages as $page) 55 foreach ($listePages as $page)
diff --git a/controller/visitor.php b/controller/visitor.php
index 4f51dda..936eb35 100644
--- a/controller/visitor.php
+++ b/controller/visitor.php
@@ -33,18 +33,9 @@ function melaineVisitor()
33 $title = "Mais qui est Melaine Favennec?"; 33 $title = "Mais qui est Melaine Favennec?";
34 34
35 // modèle 35 // modèle
36 $Articles = new ArticlesManager; 36 $Articles = new AllArticles($page_actuelle);
37 $Articles->setPage($page_actuelle); 37 $Articles->makeFileList();
38 $Articles->getFiles(); 38 $articles = array_reverse($Articles->readAll()); // lourd
39 $Articles->reverseFilesArray();
40 $articles = $Articles->getAll(); // lourd
41
42 // vérification pour protéger les visiteurs
43 // normalement déjà faite dans submit.php, au cas où la base a été trafiquée
44 foreach ($Articles as $oneArticle)
45 {
46 $oneArticle = htmLawed($oneArticle);
47 }
48 39
49 // variables $css, $js, $header et $content 40 // variables $css, $js, $header et $content
50 require('view/melaine.php'); 41 require('view/melaine.php');
@@ -58,7 +49,55 @@ function discoVisitor()
58 $title = "Discographie"; 49 $title = "Discographie";
59 50
60 // modèle 51 // modèle
61 $Albums = new AlbumsManager; 52 $Albums = new Album($page_actuelle);
53 $Albums->makeFileList();
54 $albumsJSON = array_reverse($Albums->readAll()); // lourd
55
56 // $albums est un tableau de chaines JSON,
57 // chacune renferme 3 variables: titre, année, pochette
58
59 // changer les chaines JSON en tableaux
60 $i = 0;
61 foreach($albumsJSON as $oneAlbum)
62 {
63 $albumsJSON[$i] = json_decode($oneAlbum, true);
64 $i++;
65 }
66
67 // on passe maintenant au contenu HTML
68 $albumNamesJSON = array_reverse($Albums->getFileNames());
69 $Albums->setFormat('html');
70 $Albums->makeFileList();
71 $albumNamesHTML = array_reverse($Albums->getFileNames());
72
73 // pour chaque album, détecter le fichier html
74 // si il y en a un, proposer un lien <a>
75 // si non, ne fournir qu'un lien d'ancre pour la liste d'album
76 $i = 0;
77 //print_r($albumNamesJSON); exit();
78
79 foreach($albumNamesJSON as $oneAlbum)
80 {
81 $chemin = pathinfo($oneAlbum);
82 $nomJSONsansExt = $chemin['filename'];
83 $chemin = pathinfo($albumNamesHTML[0]);
84 $nomHTMLsansExt = $chemin['filename'];
85
86 // détecter un fichier du même nom
87 if(isset($nomJSONsansExt . '.html')) // c'est pas ça!!
88 {
89 //$lienAlbum[$i] = $titreAlbum;
90 }
91 else
92 {
93 //$lienAlbum[$i] = 'discographie#' . $oneAlbum[0];
94 }
95 $i++;
96 }
97 //exit();
98
99
100 //echo($lienAlbum);
62 101
63 // variables $css, $js et $content 102 // variables $css, $js et $content
64 require('view/discographie.php'); 103 require('view/discographie.php');