aboutsummaryrefslogtreecommitdiff
path: root/src/controller/ViewController.php
blob: 668fa2583e6a2e9c6548d2e9b30589209c3bc705 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
// src/view/ViewController.php
//
// génère le HTML avec des Builder

declare(strict_types=1);

use App\Entity\Article;
use App\Entity\Node;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ViewController extends AbstractBuilder // ViewController est aussi le premier Builder
{
    static public Node $root_node;

    public function __construct(){} // surcharge celui de AbstractBuilder

    public function buildView(EntityManager $entityManager, Request $request): Response
    {
        // accès au modèle
        $director = new Director($entityManager, true);
        $director->makeRootNode(htmlspecialchars($request->query->get('id') ?? ''));
        self::$root_node = $director->getNode();

        // mode modification d'une page activé
        if($_SESSION['admin'] && $request->query->has('page')
            && $request->query->has('mode') && $request->query->get('mode') === 'page_modif'
            && $request->query->get('page') !== 'connexion' && $request->query->get('page') !== 'article' && $request->query->get('page') !== 'nouvelle_page' && $request->query->get('page') !== 'menu_chemins'){
            // les contrôles de la 2è ligne devraient utiliser un tableau
            MainBuilder::$modif_mode = true;
        }

        // page article: mode création et erreurs d'id
        if($_SESSION['admin'] && $request->query->has('page') && $request->query->get('page') === 'article'){
            if(!$request->query->has('id')){
                return new Response($this->html, 302);
            }
            else{
                if($request->query->get('id')[0] === 'n'){ // mode création d'article (vérification de l'id du bloc dans ArticleController)
                    NewBuilder::$new_article_mode = true;
                }
                elseif(self::$root_node->getNodeByName('main')->getAdoptedChild() === null){ // id inconnu
                    return new Response($this->html, 302);
                }
            }
        }

        //début de la construction de la page
        $this->useChildrenBuilder(self::$root_node);

        return new Response($this->html, 200);
    }
}