diff options
author | polo <ordipolo@gmx.fr> | 2021-09-01 23:35:42 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2021-09-01 23:35:42 +0200 |
commit | 10954c386cacb270e4ae16837483120ca3406259 (patch) | |
tree | e3107a29984b0e91db899fc08d4a7e066eaf2710 /controller | |
parent | 452420d0cd05822a9974fe27f0edc4cc4dc300cc (diff) | |
download | melaine-10954c386cacb270e4ae16837483120ca3406259.zip |
albums
Diffstat (limited to 'controller')
-rw-r--r-- | controller/admin.php | 86 | ||||
-rw-r--r-- | controller/ckeditor.php | 124 | ||||
-rw-r--r-- | controller/installation.php | 5 | ||||
-rw-r--r-- | controller/visitor.php | 65 |
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) | |||
44 | function submitCKeditor($nomFichier) | 44 | function 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 | |||
170 | function 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'); |