summaryrefslogtreecommitdiff
path: root/index.php
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 /index.php
parent86c2a611e55c9e35384febecf34964e214c0296e (diff)
downloadmelaine-48e4b0bf8796dcd6a80c8f443a31832c512424fd.zip
disco
Diffstat (limited to 'index.php')
-rw-r--r--index.php120
1 files changed, 71 insertions, 49 deletions
diff --git a/index.php b/index.php
index ccce82a..0b6c945 100644
--- a/index.php
+++ b/index.php
@@ -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
49require('controller/installation.php'); 42require('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
59session_start(); 52session_start();
60 53
61// sécurité failles XSS
62require('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
66if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 56if(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
90if(isset($_GET['action'])) 83if(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
108if(isset($_GET['page']) && $_GET['page'] != 'menu') 101if(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écuri
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 {