summaryrefslogtreecommitdiff
path: root/src/controller/Director.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/controller/Director.php')
-rw-r--r--src/controller/Director.php101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/controller/Director.php b/src/controller/Director.php
new file mode 100644
index 0000000..896cde1
--- /dev/null
+++ b/src/controller/Director.php
@@ -0,0 +1,101 @@
1<?php
2// src/controller/Director.php
3
4declare(strict_types=1);
5
6use Doctrine\ORM\EntityManager;
7use App\Entity\Page;
8use App\Entity\Node;
9
10class Director
11{
12 private EntityManager $entityManager;
13 static public Menu $menu_data; // pour NavBuilder
14 static public Path $page_path; // pour BreadcrumbBuilder
15 private Page $page;
16 private Node $root_node;
17
18 public function __construct(EntityManager $entityManager)
19 {
20 $this->entityManager = $entityManager;
21 self::$menu_data = new Menu($entityManager); // Menu est un modèle mais pas une entité
22 self::$page_path = new Path();
23 $this->page = self::$page_path->getLast();
24 $this->root_node = new Node; // instance mère "vide" ne possédant rien d'autre que des enfants
25 }
26
27 public function makeRootNode(string $id = ''): void
28 {
29 // on récupère toutes les entrées
30 $dql = 'SELECT n FROM App\Entity\Node n WHERE n.page = :page OR n.page IS null';
31 if($id == '')
32 {
33 $bulk_data = $this->entityManager
34 ->createQuery($dql)
35 ->setParameter('page', $this->page)
36 ->getResult();
37 }
38 else // avec $_GET['id'] dans l'URL
39 {
40 $dql .= ' OR n.article_timestamp = :id';
41 $bulk_data = $this->entityManager
42 ->createQuery($dql)
43 ->setParameter('page', $this->page)
44 ->setParameter('id', $id)
45 ->getResult();
46 }
47 $this->feedObjects($bulk_data);
48 }
49
50 public function makeArticleNode(string $id = ''): bool
51 {
52 $bulk_data = $this->entityManager
53 ->createQuery('SELECT n FROM App\Entity\Node n WHERE n.article_timestamp = :id')
54 ->setParameter('id', $id)
55 ->getResult();
56
57 if(count($bulk_data) === 0){
58 return false;
59 }
60
61 $this->root_node = $bulk_data[0];
62 return true;
63 }
64
65 public function feedObjects(array $bulk_data): void // $bulk_data = tableau de Node
66 {
67 // puis on les range
68 // (attention, risque de disfonctionnement si les noeuds de 1er niveau ne sont pas récupérés en 1er dans la BDD)
69 foreach($bulk_data as $node)
70 {
71 // premier niveau
72 if($node->getParent() == null)
73 {
74 $this->root_node->addChild($node);
75
76 // spécifique page article
77 if($node->getName() === 'main' && $this->page->getEndOfPath() == 'article'){
78 $main = $node;
79 }
80 }
81 // autres niveaux
82 else
83 {
84 $node->getParent()->addChild($node);
85
86 // spécifique page article
87 if($node->getName() === 'new' && $this->page->getEndOfPath() == 'article'){
88 $new = $node;
89 }
90 }
91 }
92 if(isset($new)){
93 $main->setTempChild($new);
94 }
95 }
96
97 public function getRootNode(): Node
98 {
99 return $this->root_node;
100 }
101}