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 /index.php | |
parent | 86c2a611e55c9e35384febecf34964e214c0296e (diff) | |
download | melaine-48e4b0bf8796dcd6a80c8f443a31832c512424fd.zip |
disco
Diffstat (limited to 'index.php')
-rw-r--r-- | index.php | 120 |
1 files changed, 71 insertions, 49 deletions
@@ -2,48 +2,41 @@ | |||
2 | // index.php | 2 | // index.php |
3 | // | 3 | // |
4 | // routeur MVC ou controlleur principal | 4 | // routeur MVC ou controlleur principal |
5 | // il récupère les GET, inclut les contrôleurs et appelle des fonctions | 5 | // il traite les GET et passe la main aux contrôleurs |
6 | // | ||
6 | // ce site utilise une architecture Modèle-Vue-Contrôleur (MVC) | 7 | // ce site utilise une architecture Modèle-Vue-Contrôleur (MVC) |
7 | // le schéma ci-dessous représente le sens dans lequel le code est interprété | 8 | // le schéma ci-dessous représente le sens dans lequel le code est interprété |
8 | // | 9 | // |
9 | // modèle | 10 | // modèle |
10 | // ^ | | 11 | // ^ | |
11 | // | v | 12 | // | v |
12 | // routeur --> contrôleur | 13 | // routeur --> contrôleur |
13 | // | | 14 | // | |
14 | // v | 15 | // v |
15 | // vue ---> envoi de la page au client | 16 | // vue ---> envoi de la page au client |
16 | // | 17 | // |
17 | // pour retrouver quelque chose dans le code, il suffit de suivre un chemin linéaire dont le départ est ici | 18 | // pour retrouver quelque chose dans le code, il suffit de suivre un chemin linéaire dont le départ est ici |
18 | // pas de croisement, pas de marche arrière, impossible de se perdre! | 19 | // pas de croisement, pas de marche arrière, impossible de se perdre! |
20 | // autre avantage: les chemins sont tous relatifs et sont toujours bons, parce que tous les fichiers sont "inclus" dans index.php | ||
19 | // | 21 | // |
20 | // à la racine de l'arbre des fichiers nous avons: | ||
21 | // - 1 fichier index.php sur lequel se greffe tout le reste | ||
22 | // - 4 dossiers pricipaux: controller - model - view - public | ||
23 | // un avantage est que les chemins sont tous relatifs, partent tous de la racine du site et sont toujours bons | ||
24 | |||
25 | // Les dossiers: | 22 | // Les dossiers: |
26 | // -> contrôleurs: traitements en PHP pur | 23 | // -> controller: traitements en PHP pur |
27 | // -> modèles: interface entre PHP et données, on y trouve le SQL ou la manipulation de fichiers textes, le PHP y est générlement orienté objet | 24 | // -> model: interface entre PHP et données, on y trouve le SQL ou la manipulation de fichiers textes, le PHP y est orienté objet |
28 | // -> vues: le PHP y produit le HTML, il construit les pages, | 25 | // -> view: le PHP y produit le HTML, il construit les pages, |
29 | // le mélange PHP/HTML étant très vite assez dégueulasse, le HTML figé à placé à part dans le fichier view/template.php | 26 | // le mélange PHP/HTML étant très vite assez dégueulasse, le HTML figé est placé à part dans le fichier view/template.php |
30 | // -> le dossier public contient CSS, JS, images, polices, medias, etc, il est utilisé par le template | 27 | // -> public: contient CSS, JS, images, polices, medias, etc, il est utilisé par template.php |
31 | // -> le dossier lib contient les bibliothèques, il contient notamment le ckeditor qui occupe une place centrale dans le projet, on y trouve aussi la bibli htmLawed qui protège des données dangereuses (failles XSS) | 28 | // -> lib: les bibliothèques, on y trouve en particulier le ckeditor qui occupe une place centrale dans le projet, et aussi htmLawed qui nettoie le HTML produit par l'éditeur (failles XSS) |
32 | // -> le dossier data qui est techniquement séparé du site | 29 | // -> data: comme son nom l'indique |
33 | // | 30 | // |
34 | // pour le reste nous avons: | 31 | // Quelques fichiers spéciaux (indépendants de index.php): |
35 | // - le fichier imageAJAX.php traitant les requêtes AJAX | 32 | // - imageAJAX.php traite les requêtes AJAX envoyées par l'éditeur |
36 | // ce fichier est appelé sans index.php et est pour cette raison un peu spécial | 33 | // - .htaccess pour la sécurité (configurer le httpd.conf d'apache peut être nécessaire) |
37 | // - 1 fichier .htaccess pour la sécurité (configurer le httpd.conf peut être nécessaire) | 34 | // - erreur404.php (fonctionne avec .htaccess) |
38 | // - 1 fichier erreur404.php (fonctionne avec .htaccess) | ||
39 | // - des bibliothèques externes dans lib: | ||
40 | // ckeditor5, ckfinder, htmlawed et HtmlFormatter | ||
41 | // | 35 | // |
42 | // le dossier data et son contenu sont "normalement" autorisés en écriture pour deux raisons: | 36 | // le dossier data et son contenu sont "normalement" autorisés en écriture pour deux raisons: |
43 | // - placer le contenu pré-existant avec son client FTP | 37 | // - placer le contenu pré-existant avec son client FTP |
44 | // - autoriser PHP (sinon, c'est comme si on avait un site statique) | 38 | // - autoriser PHP (sinon, c'est comme si on avait un site statique) |
45 | // | 39 | // -> pour pouvoir installer le site en n'ayant qu'à modifier les droits du dossier data uniquement et éviter les situations pénibles ou l'utilisateur est bloqué sans rien comprendre, on pourra créer ou utiliser des sauvegardes au format ZIP depuis une page spéciale accessible avec le compte admin |
46 | // pour pouvoir installer le site en n'ayant qu'à modifier les droits du dossier data uniquement et éviter les situations pénibles ou l'utilisateur est bloqué sans rien comprendre, on pourra créer ou utiliser des sauvegardes au format ZIP depuis une page spéciale accessible avec le compte admin | ||
47 | 40 | ||
48 | // au premier démarrage du site | 41 | // au premier démarrage du site |
49 | require('controller/installation.php'); | 42 | require('controller/installation.php'); |
@@ -58,25 +51,25 @@ installation(); | |||
58 | // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery | 51 | // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery |
59 | session_start(); | 52 | session_start(); |
60 | 53 | ||
61 | // sécurité failles XSS | ||
62 | require('lib/htmlawed/htmLawed.php'); | ||
63 | |||
64 | // traitement des POST du ckeditor | 54 | // traitement des POST du ckeditor |
65 | // la fonction submitCKeditor n'affiche rien (controller/admin.php n'est pas utilisé) puis redirige sans GET | 55 | // la fonction submitCKeditor n'affiche rien (controller/admin.php n'est pas utilisé) puis redirige sans GET |
66 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 | 56 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 |
67 | && isset($_GET['action']) && $_GET['action'] == 'submit' | 57 | && isset($_GET['action']) && $_GET['action'] == 'submit' |
68 | && isset($_POST['contenu']) && $_POST['contenu'] != '') | 58 | && isset($_POST['contenu']) && $_POST['contenu'] != '') |
69 | { | 59 | { |
70 | require('controller/ckeditor.php'); | 60 | require('controller/ckeditor.php'); // traitement du POST |
61 | require('lib/htmlawed/htmLawed.php'); // failles XSS | ||
62 | require('model/Classes.php'); // modèle | ||
63 | |||
71 | // modification | 64 | // modification |
72 | if(isset($_SESSION['nomFichier'])) | 65 | if(isset($_SESSION['nomFichier'])) |
73 | { | 66 | { |
74 | submitCKeditor($_GET['page'], $_SESSION['nomFichier'], $_POST['contenu']); | 67 | submitCKeditor($_SESSION['nomFichier']); |
75 | } | 68 | } |
76 | // nouvel article | 69 | // nouvel article |
77 | else | 70 | else |
78 | { | 71 | { |
79 | submitCKeditor($_GET['page'], '', $_POST['contenu']); | 72 | submitCKeditor(''); |
80 | } | 73 | } |
81 | 74 | ||
82 | // nettoyage | 75 | // nettoyage |
@@ -87,12 +80,12 @@ if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 | |||
87 | } | 80 | } |
88 | 81 | ||
89 | // déconnexion: nettoyer et recharger la page | 82 | // déconnexion: nettoyer et recharger la page |
90 | if(isset($_GET['action'])) | 83 | if(isset($_GET['action']) && isset($_GET['page'])) |
91 | { | 84 | { |
92 | if($_GET['action'] == "deconnexion") | 85 | if($_GET['action'] == "deconnexion") |
93 | { | 86 | { |
94 | $_SESSION['admin'] = 0; | 87 | $_SESSION['admin'] = 0; |
95 | header('Location: index.php'); | 88 | header('Location: index.php?page=' . $_GET['page']); |
96 | } | 89 | } |
97 | } | 90 | } |
98 | 91 | ||
@@ -107,7 +100,7 @@ require('controller/visitor.php'); | |||
107 | // utile pour presque toutes les pages | 100 | // utile pour presque toutes les pages |
108 | if(isset($_GET['page']) && $_GET['page'] != 'menu') | 101 | if(isset($_GET['page']) && $_GET['page'] != 'menu') |
109 | { | 102 | { |
110 | require('model/melaine-read.php'); | 103 | require('model/Classes.php'); |
111 | } | 104 | } |
112 | 105 | ||
113 | // contrôleur des pages en mode admin | 106 | // contrôleur des pages en mode admin |
@@ -136,43 +129,72 @@ if(isset($_GET['page'])) | |||
136 | // page melaine | 129 | // page melaine |
137 | elseif($_GET['page'] == 'melaine') | 130 | elseif($_GET['page'] == 'melaine') |
138 | { | 131 | { |
139 | // ouverture de l'éditeur pour modification | 132 | // Si ouverture de l'éditeur pour modification: |
140 | // le lien utilisé pour ouvrir l'éditeur contient un GET avec le numéro de l'article, mais pas le nom du fichier que le visiteur ne doit pas voir | 133 | // le lien utilisé pour ouvrir l'éditeur contient un GET avec le numéro de l'article, mais pas le nom du fichier que le visiteur ne doit pas voir |
141 | // GET, POST, cookies => navigation (utiles au visiteur) | 134 | // GET, POST, cookies => navigation (utiles au visiteur) |
142 | // sessions => action | 135 | // sessions => action |
143 | // c'est ici qu'on passe des GET aux sessions | 136 | // c'est ici qu'on passe des GET aux sessions |
144 | // on associe maintenant le numéro de l'article et le nom du fichier, l'article déjà existant inséré dans l'éditeur DOIT être celui qui sera modifié | 137 | // on associe maintenant le numéro de l'article et le nom du fichier, l'article déjà existant inséré dans l'éditeur DOIT être celui qui sera modifié |
145 | // | 138 | |
146 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor') | 139 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor') |
147 | { | 140 | { |
148 | // modification | 141 | // modification |
149 | // A MODIFIER! on a aussi besoin du nom du fichier, | ||
150 | // infos à mettre dans la session! | ||
151 | |||
152 | if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0) | 142 | if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0) |
153 | { | 143 | { |
154 | // obtenir le nom du fichier à l'aide du modèle | 144 | melaineEdit($_GET['article'], 0); |
155 | $_SESSION['nomFichier'] = getFileName($_GET['page'], $_GET['article']); | ||
156 | |||
157 | melaineEdit($_GET['article']); | ||
158 | } | 145 | } |
159 | // nouvel article | 146 | // nouvel article |
160 | else | 147 | else |
161 | { | 148 | { |
162 | // prévenir une hypothétique perte de donnée | 149 | // par sécurité |
163 | if(isset($_SESSION['nomFichier'])) | 150 | if(isset($_SESSION['nomFichier'])) |
164 | { | 151 | { |
165 | unset($_SESSION['nomFichier']); | 152 | unset($_SESSION['nomFichier']); |
166 | } | 153 | } |
167 | 154 | melaineEdit(0, 0); | |
168 | melaineEdit(0); | ||
169 | } | 155 | } |
170 | } | 156 | } |
157 | // suppression | ||
158 | else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression') | ||
159 | { | ||
160 | melaineEdit($_GET['article'], 1); | ||
161 | } | ||
171 | else | 162 | else |
172 | { | 163 | { |
173 | melaineVisitor(); | 164 | melaineVisitor(); |
174 | } | 165 | } |
175 | } | 166 | } |
167 | // page discographie | ||
168 | elseif($_GET['page'] == 'discographie') | ||
169 | { | ||
170 | if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'edition') | ||
171 | { | ||
172 | // modification | ||
173 | if(isset($_GET['album']) && is_numeric($_GET['album']) && $_GET['album'] > 0) | ||
174 | { | ||
175 | discoEdit($_GET['album'], 0); | ||
176 | } | ||
177 | // nouvel article | ||
178 | else | ||
179 | { | ||
180 | // par sécurité | ||
181 | if(isset($_SESSION['nomFichier'])) | ||
182 | { | ||
183 | unset($_SESSION['nomFichier']); | ||
184 | } | ||
185 | discoEdit(0, 0); | ||
186 | } | ||
187 | } | ||
188 | // suppression | ||
189 | else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression') | ||
190 | { | ||
191 | discoEdit($_GET['album'], 1); | ||
192 | } | ||
193 | else | ||
194 | { | ||
195 | discoVisitor(); | ||
196 | } | ||
197 | } | ||
176 | // page connexion au mode admin | 198 | // page connexion au mode admin |
177 | elseif($_GET['page'] == 'connexion') | 199 | elseif($_GET['page'] == 'connexion') |
178 | { | 200 | { |