summaryrefslogtreecommitdiff
path: root/src/router.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/router.php')
-rw-r--r--src/router.php302
1 files changed, 302 insertions, 0 deletions
diff --git a/src/router.php b/src/router.php
new file mode 100644
index 0000000..19fe1c1
--- /dev/null
+++ b/src/router.php
@@ -0,0 +1,302 @@
1<?php
2// src/router.php
3//
4/* fonctionnement du routeur
5=> 1er test, méthode http: GET, POST ou autre chose
6=> 2ème test, type de contenu (méthode POST uniquement):
7"application/x-www-form-urlencoded" = formulaire
8"application/json" = requête AJAX avec fetch()
9"multipart/form-data" = upload d'image par tinymce
10$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' requête AJAX xhs, non utilisée
11=> 3ème test, comme le 2ème test mais uniquement si $_SESSION['admin'] est vrai
12*/
13
14declare(strict_types=1);
15
16
17if($_SERVER['REQUEST_METHOD'] === 'GET'){
18 // table "user" vide
19 if(!UserController::existUsers($entityManager)){
20 require '../src/view/templates/user_create.php';
21 die;
22 }
23
24 // bouton déconnexion
25 if($request->query->has('action') && $request->query->get('action') === 'deconnection')
26 {
27 UserController::disconnect($entityManager);
28 }
29
30 // données du calendrier
31 // création du calendrier et changement de dates affichées (boutons flèches mais pas changement de vue)
32 if($_SERVER['REQUEST_METHOD'] === 'GET' && $request->query->has('action') && $request->query->get('action') === 'get_events'
33 && $request->query->has('start') && $request->query->has('end') && empty($_POST))
34 {
35 CalendarController::getData($entityManager);
36 }
37
38 if($_SESSION['admin'] === true){
39 // ...
40 }
41
42 // construction d'une page
43 $response = new ViewController()->buildView($request, $entityManager);
44}
45
46
47elseif($_SERVER['REQUEST_METHOD'] === 'POST'){
48 /* -- contrôleurs appellables par tout le monde -- */
49
50 // table "user" vide
51 if(!UserController::existUsers($entityManager))
52 {
53 UserController::createUser($entityManager);
54 }
55
56 // requêtes JSON avec fetch()
57 if($_SERVER['CONTENT_TYPE'] === 'application/json')
58 {
59 $data = file_get_contents('php://input');
60 $json = json_decode($data, true);
61
62 if(isset($_GET['action']))
63 {
64 // formulaire de contact
65 if($_GET['action'] === 'send_email'){
66 EmailController::submit($json, $entityManager);
67 }
68 }
69 }
70
71 // envoi formulaire HTML
72 elseif($_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded'){
73 // tentative de connexion
74 if($request->query->has('action') && $request->query->get('action') === 'connection'){
75 //$response =
76 UserController::connect($entityManager);
77 }
78 }
79
80
81 if($_SESSION['admin'] === true)
82 {
83 /* -- requêtes AJAX -- */
84
85 // requêtes JSON avec fetch()
86 if($_SERVER['CONTENT_TYPE'] === 'application/json')
87 {
88 $data = file_get_contents('php://input');
89 $json = json_decode($data, true);
90
91 if(isset($_GET['action']))
92 {
93 /* -- manipulation des articles -- */
94 if($_GET['action'] === 'editor_submit' && isset($json['id']) && isset($json['content']))
95 {
96 ArticleController::editorSubmit($entityManager, $json);
97 }
98 elseif($_GET['action'] === 'delete_article' && isset($json['id']))
99 {
100 ArticleController::deleteArticle($entityManager, $json);
101 }
102 // inversion de la position de deux noeuds
103 elseif($_GET['action'] === 'switch_positions' && isset($json['id1']) && isset($json['id2']))
104 {
105 ArticleController::switchPositions($entityManager, $json);
106 }
107 elseif($_GET['action'] === 'date_submit' && isset($json['id']) && isset($json['date']))
108 {
109 ArticleController::dateSubmit($entityManager, $json);
110 }
111
112 /* -- bloc Formulaire -- */
113 elseif($_GET['action'] === 'recipient_email'){
114 ContactFormController::updateRecipient($entityManager, $json);
115 }
116 elseif($_GET['action'] === 'test_email'){
117 ContactFormController::sendTestEmail($entityManager, $json);
118 }
119 }
120
121 /* -- page Menu et chemins -- */
122 elseif(isset($_GET['menu_edit']))
123 {
124 // récupération des données (serait peut-être mieux dans la classe)
125 Director::$menu_data = new Menu($entityManager);
126
127 // flèche gauche <=: position = position du parent + 1, parent = grand-parent, recalculer les positions
128 if($_GET['menu_edit'] === 'move_one_level_up' && isset($json['id'])){
129 MenuAndPathsController::MoveOneLevelUp($entityManager, $json);
130 }
131
132 // flèche droite =>: position = nombre d'éléments de la fraterie + 1, l'élément précédent devient le parent
133 if($_GET['menu_edit'] === 'move_one_level_down' && isset($json['id'])){
134 MenuAndPathsController::MoveOneLevelDown($entityManager, $json);
135 }
136
137 if($_GET['menu_edit'] === 'switch_positions' && isset($json['id1']) && isset($json['id2'])){
138 MenuAndPathsController::switchPositions($entityManager, $json);
139 }
140
141 if($_GET['menu_edit'] === 'displayInMenu' && isset($json['id']) && isset($json['checked'])){
142 MenuAndPathsController::displayInMenu($entityManager, $json);
143 }
144 }
145
146 /* -- mode Modification d'une page -- */
147 // partie "page"
148 elseif(isset($_GET['page_edit']))
149 {
150 // titre de la page
151 if($_GET['page_edit'] === 'page_title'){
152 PageManagementController::setPageTitle($entityManager, $json);
153 }
154 // description dans les métadonnées
155 elseif($_GET['page_edit'] === 'page_description'){
156 PageManagementController::setPageDescription($entityManager, $json);
157 }
158 }
159
160 // partie "blocs"
161 elseif($request->query->has('bloc_edit'))
162 {
163 // renommage d'un bloc
164 if($request->query->get('bloc_edit') === 'rename_page_bloc')
165 {
166 PageManagementController::renameBloc($entityManager, $json);
167 }
168 // inversion des positions de deux blocs
169 elseif($request->query->get('bloc_edit') === 'switch_blocs_positions')
170 {
171 PageManagementController::SwitchBlocsPositions($entityManager, $json);
172 }
173 }
174
175 /* -- upload d'image dans tinymce par copier-coller -- */
176 // collage de HTML contenant une ou plusieurs balises <img>
177 if($request->query->has('action') && $request->query->get('action') == 'upload_image_html'){
178 ImageUploadController::uploadImageHtml();
179 }
180 // collage d'une image (code base64 dans le presse-papier) non encapsulée dans du HTML
181 elseif($request->query->has('action') && $request->query->get('action') == 'upload_image_base64'){
182 ImageUploadController::uploadImageBase64();
183 }
184
185 /* -- requêtes spécifiques au calendrier -- */
186 if($request->query->get('action') === 'new_event'){
187 CalendarController::newEvent($json, $entityManager);
188 }
189 elseif($request->query->get('action') === 'update_event'){
190 CalendarController::updateEvent($json, $entityManager);
191 }
192 elseif($request->query->get('action') === 'remove_event'){
193 CalendarController::removeEvent($json, $entityManager);
194 }
195 else{
196 echo json_encode(['success' => false]);
197 }
198 die;
199 }
200
201 // upload d'image dans tinymce avec le plugin (bouton "insérer une image" de l'éditeur)
202 elseif(strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false && $request->query->has('action') && $request->query->get('action') === 'upload_image')
203 {
204 ImageUploadController::imageUploadTinyMce();
205 }
206 // requêtes XMLHttpRequest
207 elseif(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
208 {
209 //echo "requête XMLHttpRequest reçue par le serveur";
210 echo json_encode(['success' => false]); // ça marche mais ça marche pas...
211 die;
212 }
213
214 /* -- envoi formulaire HTML -- */
215 elseif($_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded')
216 {
217 /* -- nouvelle page -- */
218 if(isset($_POST['page_name']) && $_POST['page_name'] !== null
219 && isset($_POST['page_name_path']) && $_POST['page_name_path'] !== null
220 && isset($_POST['page_location']) && $_POST['page_location'] !== null
221 && isset($_POST['page_description']) && $_POST['page_description'] !== null
222 && isset($_POST['new_page_hidden']) && $_POST['new_page_hidden'] === '')
223 {
224 PageManagementController::newPage($entityManager);
225 }
226
227 /* -- suppression d'une page -- */
228 elseif(isset($_POST['page_id']) && $_POST['page_id'] !== null
229 && isset($_POST['submit_hidden']) && $_POST['submit_hidden'] === '')
230 {
231 PageManagementController::deletePage($entityManager);
232 }
233
234 /* -- mode Modification d'une page -- */
235
236 // modification du chemins en snake_case
237 elseif(isset($_POST['page_menu_path']) && $_POST['page_menu_path'] !== null
238 && isset($_POST['page_id']) && $_POST['page_id'] !== null
239 && isset($_POST['page_name_path_hidden']) && $_POST['page_name_path_hidden'] === '')
240 {
241 PageManagementController::updatePageMenuPath($entityManager);
242 }
243 // ajout d'un bloc dans une page
244 elseif(isset($_POST['bloc_title']) && $_POST['bloc_title'] !== null
245 && isset($_POST['bloc_select']) && $_POST['bloc_select'] !== null
246 && isset($_POST['bloc_title_hidden']) && $_POST['bloc_title_hidden'] === '') // contrôle anti-robot avec input hidden
247 {
248 PageManagementController::addBloc($entityManager);
249 }
250 // suppression d'un bloc de page
251 elseif(isset($_POST['delete_bloc_id']) && $_POST['delete_bloc_id'] !== null
252 && isset($_POST['delete_bloc_hidden']) && $_POST['delete_bloc_hidden'] === '') // contrôle anti-robot avec input hidden
253 {
254 PageManagementController::deleteBloc($entityManager);
255 }
256
257
258 /* -- page Menu et chemins -- */
259
260 // création d'une entrée de menu avec une URL
261 elseif(isset($_POST["label_input"]) && isset($_POST["url_input"]) && isset($_POST["location"])){
262 MenuAndPathsController::newUrlMenuEntry($entityManager);
263 }
264 // suppression d'une entrée de menu avec une URL
265 elseif(isset($_POST['delete']) && isset($_POST['x']) && isset($_POST['y'])){ // 2 params x et y sont là parce qu'on a cliqué sur une image
266 MenuAndPathsController::deleteUrlMenuEntry($entityManager);
267 }
268
269
270 /* -- page Mon compte -- */
271 elseif($request->query->has('action') && $request->query->get('action') === 'update_username')
272 {
273 UserController::updateUsername($entityManager);
274 }
275 elseif($request->query->has('action') && $request->query->get('action') === 'update_password')
276 {
277 UserController::updatePassword($entityManager);
278 }
279
280 // redirection page d'accueil
281 else{
282 header("Location: " . new URL(['error' => 'paramètres inconnus']));
283 die;
284 }
285 }
286 }
287
288 // rien ne match
289 header("Location: " . new URL);
290 die;
291}
292
293
294else{
295 header("Location: " . new URL(['error' => 'tu fais quoi là mec?']));
296 die;
297}
298
299// enlever le test isset à terme
300if(isset($response)){
301 $response->send();
302} \ No newline at end of file