aboutsummaryrefslogtreecommitdiff
path: root/src/Controller/ViewController.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Controller/ViewController.php')
-rw-r--r--src/Controller/ViewController.php70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/Controller/ViewController.php b/src/Controller/ViewController.php
new file mode 100644
index 0000000..1f13861
--- /dev/null
+++ b/src/Controller/ViewController.php
@@ -0,0 +1,70 @@
1<?php
2// src/Controller/ViewController.php
3
4declare(strict_types=1);
5
6namespace App\Controller;
7
8use Doctrine\ORM\EntityManager;
9use Symfony\Component\HttpFoundation\Request;
10use Symfony\Component\HttpFoundation\Response;
11use Symfony\Component\HttpFoundation\RedirectResponse;
12use App\Model\Model;
13use App\View\ViewDirector;
14use App\View\MainBuilder;
15use App\View\NewBuilder;
16use App\Service\URL;
17
18class ViewController{
19 const SPECIAL_PAGES = ['article', 'new_page', 'menu_paths', 'user_edit', 'connection', 'emails', 'maintenance'];
20
21 static function getWebPage(EntityManager $entityManager, Request $request): Response
22 {
23 /* 1/ 1er contrôle des paramètres */
24
25 // mode modification d'une page
26 if(IS_ADMIN
27 && $request->query->has('mode') && $request->query->get('mode') === 'page_modif'
28 && !in_array(CURRENT_PAGE, self::SPECIAL_PAGES))
29 {
30 MainBuilder::$modif_mode = true;
31 }
32 // page article: mode création et erreurs d'id
33 if(CURRENT_PAGE === 'article'){
34 if(IS_ADMIN){
35 if(!$request->query->has('id')){
36 return new RedirectResponse((string)new URL(['page' => $request->query->get('from') ?? '']));
37 }
38 else{
39 // mode création d'article
40 // l'id du bloc et 'from=' sont vérifiés dans ArticleController::editorSubmit
41 if($request->query->get('id')[0] === 'n' && $request->query->has('from') && !empty($request->query->get('from'))){
42 NewBuilder::$new_article_mode = true;
43 }
44 }
45 }
46 elseif($request->query->get('id')[0] === 'n'){ // accès page nouvelle article interdit sans être admin
47 return new RedirectResponse((string)new URL(['page' => $request->query->get('from') ?? '']));
48 }
49 }
50 // pas de else, l'id dans l'URL n'a pas d'effet ailleurs
51
52
53 /* 2/ accès au modèle */
54 $model = new Model($entityManager);
55 $model->makeMenuAndPaths();
56 $model->getWholePageData($request);
57
58
59 /* 3/ 2ème contrôle des paramètres avec les données récupérées */
60
61 // article non trouvé en BDD
62 if(CURRENT_PAGE === 'article' && !IS_ADMIN && $model->getNode()->getNodeByName('main')->getAdoptedChild() === null){
63 return new RedirectResponse((string)new URL(['page' => $request->query->get('from') ?? '']));
64 }
65
66
67 /* 4/ construction de la page avec builders et vues */
68 return new Response((new ViewDirector)->buildHTML($model->getNode()));
69 }
70} \ No newline at end of file