aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-10-10 17:29:30 +0200
committerpolo <ordipolo@gmx.fr>2025-10-10 17:30:47 +0200
commit596ce6f78e37c901d9b4ed464918b0294ba8dd2a (patch)
treea11c55145cd0479a416891f5ee0587b536d24261
parenta0b94008b26ef20f1164e0c5302d5d11c313b1ad (diff)
downloadcms-596ce6f78e37c901d9b4ed464918b0294ba8dd2a.zip
src/controller/Director.php devient /src/model/Model.php, message d'erreur type de bloc dans modify_block.php
-rw-r--r--public/index.php2
-rw-r--r--src/controller/ArticleController.php42
-rw-r--r--src/controller/MenuAndPathsController.php30
-rw-r--r--src/controller/PageManagementController.php90
-rw-r--r--src/controller/ViewController.php8
-rw-r--r--src/model/Model.php (renamed from src/controller/Director.php)8
-rw-r--r--src/model/Path.php2
-rw-r--r--src/router.php4
-rw-r--r--src/view/BreadcrumbBuilder.php2
-rw-r--r--src/view/FooterBuilder.php2
-rw-r--r--src/view/HeadBuilder.php4
-rw-r--r--src/view/MainBuilder.php2
-rw-r--r--src/view/MenuBuilder.php4
-rw-r--r--src/view/NavBuilder.php6
-rw-r--r--src/view/NewPageBuilder.php2
-rw-r--r--src/view/templates/modify_block.php2
-rw-r--r--src/view/templates/modify_page.php14
17 files changed, 111 insertions, 113 deletions
diff --git a/public/index.php b/public/index.php
index 9caee0a..61fa01f 100644
--- a/public/index.php
+++ b/public/index.php
@@ -4,7 +4,7 @@
4/* plan d'action pour "symfonyfier" le site 4/* plan d'action pour "symfonyfier" le site
5A - 5A -
6 1/ de vrais contrôleurs: classes et méthodes prenant une requête en entrée et retournant une réponse 6 1/ de vrais contrôleurs: classes et méthodes prenant une requête en entrée et retournant une réponse
7 (début de séparation contrôleurs et classes métier, exemple: ViewController/Director) 7 (début de séparation contrôleurs et classes métier, exemple: ViewController/Model)
8 2/ routeur structuré: méthodes GET et POST, content-type, admin 8 2/ routeur structuré: méthodes GET et POST, content-type, admin
9 3/ routeur amélioré: pré-routage avec méthodes HTTP: GET, HEAD, POST, PUT, PATCH, DELETE, etc 9 3/ routeur amélioré: pré-routage avec méthodes HTTP: GET, HEAD, POST, PUT, PATCH, DELETE, etc
10 4/ réécriture avec les classes Request et Response sans toucher les liens 10 4/ réécriture avec les classes Request et Response sans toucher les liens
diff --git a/src/controller/ArticleController.php b/src/controller/ArticleController.php
index fabd997..06562e7 100644
--- a/src/controller/ArticleController.php
+++ b/src/controller/ArticleController.php
@@ -16,12 +16,12 @@ class ArticleController
16 if($request->query->has('id') && !empty($request->query->get('id')) && $request->query->has('last_article')){ 16 if($request->query->has('id') && !empty($request->query->get('id')) && $request->query->has('last_article')){
17 //var_dump($request->query->get('last_article')); 17 //var_dump($request->query->get('last_article'));
18 $id = (int)$request->get('id'); // type et nettoie 18 $id = (int)$request->get('id'); // type et nettoie
19 $director = new Director($entityManager); 19 $model = new Model($entityManager);
20 $director->findNodeById($id); 20 $model->findNodeById($id);
21 $parent_block = $director->getNode(); 21 $parent_block = $model->getNode();
22 22
23 if(Blocks::hasPresentation($parent_block->getName())){ 23 if(Blocks::hasPresentation($parent_block->getName())){
24 $get_articles_return = $director->getNextArticles($parent_block, $request); 24 $get_articles_return = $model->getNextArticles($parent_block, $request);
25 $bulk_data = $get_articles_return[0]; 25 $bulk_data = $get_articles_return[0];
26 26
27 if($parent_block->getName() === 'post_block'){ 27 if($parent_block->getName() === 'post_block'){
@@ -60,7 +60,7 @@ class ArticleController
60 $id = substr($id, 1); 60 $id = substr($id, 1);
61 } 61 }
62 62
63 $director = new Director($entityManager); 63 $model = new Model($entityManager);
64 $content = $json['content']; 64 $content = $json['content'];
65 65
66 // nettoyage 66 // nettoyage
@@ -77,12 +77,12 @@ class ArticleController
77 if($json['id'][0] === 'n') // ici $id est un bloc 77 if($json['id'][0] === 'n') // ici $id est un bloc
78 { 78 {
79 $section_id = (int)substr($id, 1); // id du bloc <section> 79 $section_id = (int)substr($id, 1); // id du bloc <section>
80 if(!$director->findNodeById($section_id)){ // erreur mauvais id 80 if(!$model->findNodeById($section_id)){ // erreur mauvais id
81 echo json_encode(['success' => false, 'error' => 'article_not_saved, bad id']); 81 echo json_encode(['success' => false, 'error' => 'article_not_saved, bad id']);
82 die; 82 die;
83 } 83 }
84 $director->makeSectionNode(); 84 $model->makeSectionNode();
85 $node = $director->getNode(); // = <section> 85 $node = $model->getNode(); // = <section>
86 86
87 if(is_array($content)){ // cas d'une nouvelle "news" 87 if(is_array($content)){ // cas d'une nouvelle "news"
88 if($node->getPage()->getEndOfPath() !== $json['from']){ // erreur mauvais from 88 if($node->getPage()->getEndOfPath() !== $json['from']){ // erreur mauvais from
@@ -118,9 +118,9 @@ class ArticleController
118 // modification article 118 // modification article
119 //else{} 119 //else{}
120 120
121 if($director->makeArticleNode($id)) // une entrée est trouvée 121 if($model->makeArticleNode($id)) // une entrée est trouvée
122 { 122 {
123 $node = $director->getArticleNode(); // article 123 $node = $model->getArticleNode(); // article
124 switch($json['id'][0]){ 124 switch($json['id'][0]){
125 case 'i': 125 case 'i':
126 $node->getArticle()->setContent($content); 126 $node->getArticle()->setContent($content);
@@ -153,14 +153,14 @@ class ArticleController
153 153
154 static public function deleteArticle(EntityManager $entityManager, array $data): Response // $data peut être un $_GET ou du JSON 154 static public function deleteArticle(EntityManager $entityManager, array $data): Response // $data peut être un $_GET ou du JSON
155 { 155 {
156 $director = new Director($entityManager); 156 $model = new Model($entityManager);
157 if(!$director->makeArticleNode($data['id'], true)){ 157 if(!$model->makeArticleNode($data['id'], true)){
158 return new Response( 158 return new Response(
159 '{"success": false, "message": "Erreur: pas d\'article à supprimer"}', 159 '{"success": false, "message": "Erreur: pas d\'article à supprimer"}',
160 Response::HTTP_INTERNAL_SERVER_ERROR); // 500 160 Response::HTTP_INTERNAL_SERVER_ERROR); // 500
161 } 161 }
162 $article = $director->getArticleNode(); 162 $article = $model->getArticleNode();
163 $section = $director->getNode(); 163 $section = $model->getNode();
164 164
165 $entityManager->remove($article); 165 $entityManager->remove($article);
166 $section->removeChild($article); 166 $section->removeChild($article);
@@ -181,10 +181,10 @@ class ArticleController
181 181
182 static public function switchPositions(EntityManager $entityManager, array $json): void 182 static public function switchPositions(EntityManager $entityManager, array $json): void
183 { 183 {
184 $director = new Director($entityManager); 184 $model = new Model($entityManager);
185 $director->makeArticleNode($json['id1'], true); 185 $model->makeArticleNode($json['id1'], true);
186 $article1 = $director->getArticleNode(); 186 $article1 = $model->getArticleNode();
187 $section = $director->getNode(); 187 $section = $model->getNode();
188 188
189 $section->sortChildren(true); // régénère les positions avant inversion 189 $section->sortChildren(true); // régénère les positions avant inversion
190 $article2 = null; 190 $article2 = null;
@@ -211,9 +211,9 @@ class ArticleController
211 $id = substr($json['id'], 1); 211 $id = substr($json['id'], 1);
212 $date = new DateTime($json['date']); 212 $date = new DateTime($json['date']);
213 213
214 $director = new Director($entityManager); 214 $model = new Model($entityManager);
215 $director->makeArticleNode($id); 215 $model->makeArticleNode($id);
216 $node = $director->getArticleNode(); 216 $node = $model->getArticleNode();
217 $node->getArticle()->setDateTime($date); 217 $node->getArticle()->setDateTime($date);
218 $entityManager->flush(); 218 $entityManager->flush();
219 219
diff --git a/src/controller/MenuAndPathsController.php b/src/controller/MenuAndPathsController.php
index 3ff7d54..f0553ad 100644
--- a/src/controller/MenuAndPathsController.php
+++ b/src/controller/MenuAndPathsController.php
@@ -10,8 +10,8 @@ class MenuAndPathsController
10{ 10{
11 static public function newUrlMenuEntry(EntityManager $entityManager): void 11 static public function newUrlMenuEntry(EntityManager $entityManager): void
12 { 12 {
13 Director::$menu_data = new Menu($entityManager); 13 Model::$menu_data = new Menu($entityManager);
14 $previous_page = Director::$menu_data->findPageById((int)$_POST["location"]); // (int) à cause de declare(strict_types=1); 14 $previous_page = Model::$menu_data->findPageById((int)$_POST["location"]); // (int) à cause de declare(strict_types=1);
15 $parent = $previous_page->getParent(); 15 $parent = $previous_page->getParent();
16 16
17 $url_input = trim($_POST["url_input"]); // faire htmlspecialchars à l'affichage 17 $url_input = trim($_POST["url_input"]); // faire htmlspecialchars à l'affichage
@@ -31,7 +31,7 @@ class MenuAndPathsController
31 // addChild l'ajoute à la fin du tableau "children" puis on trie 31 // addChild l'ajoute à la fin du tableau "children" puis on trie
32 // exemple avec 2 comme position demandée: 1 2 3 4 2 devient 1 2 3 4 5 et la nouvelle entrée sera en 3è position 32 // exemple avec 2 comme position demandée: 1 2 3 4 2 devient 1 2 3 4 5 et la nouvelle entrée sera en 3è position
33 if(!$parent){ 33 if(!$parent){
34 $parent = Director::$menu_data; 34 $parent = Model::$menu_data;
35 } 35 }
36 $parent->addChild($page); // true pour réindexer les positions en BDD 36 $parent->addChild($page); // true pour réindexer les positions en BDD
37 $parent->reindexPositions(); 37 $parent->reindexPositions();
@@ -63,11 +63,11 @@ class MenuAndPathsController
63 63
64 static public function deleteUrlMenuEntry(EntityManager $entityManager): void 64 static public function deleteUrlMenuEntry(EntityManager $entityManager): void
65 { 65 {
66 Director::$menu_data = new Menu($entityManager); 66 Model::$menu_data = new Menu($entityManager);
67 $page = Director::$menu_data->findPageById((int)$_POST["delete"]); 67 $page = Model::$menu_data->findPageById((int)$_POST["delete"]);
68 $parent = $page->getParent(); 68 $parent = $page->getParent();
69 if($parent == null){ 69 if($parent == null){
70 $parent = Director::$menu_data; 70 $parent = Model::$menu_data;
71 } 71 }
72 72
73 $parent->removeChild($page); // suppression de $children avant de trier 73 $parent->removeChild($page); // suppression de $children avant de trier
@@ -82,7 +82,7 @@ class MenuAndPathsController
82 static public function MoveOneLevelUp(EntityManager $entityManager, array $json): void 82 static public function MoveOneLevelUp(EntityManager $entityManager, array $json): void
83 { 83 {
84 $id = $json['id']; 84 $id = $json['id'];
85 $page = Director::$menu_data->findPageById((int)$id); 85 $page = Model::$menu_data->findPageById((int)$id);
86 86
87 $parent = $page->getParent(); // peut être null 87 $parent = $page->getParent(); // peut être null
88 if($parent === null){ 88 if($parent === null){
@@ -97,9 +97,9 @@ class MenuAndPathsController
97 // 2ème niveau: le parent devient $menu_data, puis null après tri 97 // 2ème niveau: le parent devient $menu_data, puis null après tri
98 if($parent->getParent() === null){ 98 if($parent->getParent() === null){
99 // connexion dans les deux sens 99 // connexion dans les deux sens
100 $page->setParent(Director::$menu_data); // => pour la persistance 100 $page->setParent(Model::$menu_data); // => pour la persistance
101 101
102 //Director::$menu_data->addChild($page); // => pour sortChildren 102 //Model::$menu_data->addChild($page); // => pour sortChildren
103 $page->getParent()->addChild($page); // => pour sortChildren 103 $page->getParent()->addChild($page); // => pour sortChildren
104 $page->getParent()->sortChildren(true); // positions décaléees des nouveaux petits frères 104 $page->getParent()->sortChildren(true); // positions décaléees des nouveaux petits frères
105 $page->setParent(null); 105 $page->setParent(null);
@@ -129,11 +129,11 @@ class MenuAndPathsController
129 static public function MoveOneLevelDown(EntityManager $entityManager, array $json): void 129 static public function MoveOneLevelDown(EntityManager $entityManager, array $json): void
130 { 130 {
131 $id = $json['id']; 131 $id = $json['id'];
132 $page = Director::$menu_data->findPageById((int)$id); 132 $page = Model::$menu_data->findPageById((int)$id);
133 133
134 $parent = $page->getParent(); // peut être null 134 $parent = $page->getParent(); // peut être null
135 if($parent == null){ 135 if($parent == null){
136 $parent = Director::$menu_data; 136 $parent = Model::$menu_data;
137 } 137 }
138 138
139 // BDD 139 // BDD
@@ -166,8 +166,8 @@ class MenuAndPathsController
166 $id2 = $json['id2']; 166 $id2 = $json['id2'];
167 167
168 // vérifier qu'ils ont le même parent 168 // vérifier qu'ils ont le même parent
169 $page1 = Director::$menu_data->findPageById((int)$id1); 169 $page1 = Model::$menu_data->findPageById((int)$id1);
170 $page2 = Director::$menu_data->findPageById((int)$id2); 170 $page2 = Model::$menu_data->findPageById((int)$id2);
171 171
172 // double le contrôle fait en JS 172 // double le contrôle fait en JS
173 if($page1->getParent() === $page2->getParent()) // comparaison stricte d'objet (même instance du parent?) 173 if($page1->getParent() === $page2->getParent()) // comparaison stricte d'objet (même instance du parent?)
@@ -176,7 +176,7 @@ class MenuAndPathsController
176 $tmp = $page1->getPosition(); 176 $tmp = $page1->getPosition();
177 $page1->setPosition($page2->getPosition()); 177 $page1->setPosition($page2->getPosition());
178 $page2->setPosition($tmp); 178 $page2->setPosition($tmp);
179 Director::$menu_data->sortChildren(true); // modifie tableau children 179 Model::$menu_data->sortChildren(true); // modifie tableau children
180 $entityManager->flush(); 180 $entityManager->flush();
181 181
182 // nouveau menu 182 // nouveau menu
@@ -194,7 +194,7 @@ class MenuAndPathsController
194 $id = $json['id']; 194 $id = $json['id'];
195 $checked = $json['checked']; 195 $checked = $json['checked'];
196 196
197 $page = Director::$menu_data->findPageById((int)$id); 197 $page = Model::$menu_data->findPageById((int)$id);
198 if($page->isHidden() === $checked){ 198 if($page->isHidden() === $checked){
199 $page->setHidden(!$checked); 199 $page->setHidden(!$checked);
200 $entityManager->flush(); 200 $entityManager->flush();
diff --git a/src/controller/PageManagementController.php b/src/controller/PageManagementController.php
index e6886b1..9dce952 100644
--- a/src/controller/PageManagementController.php
+++ b/src/controller/PageManagementController.php
@@ -25,16 +25,16 @@ class PageManagementController
25 25
26 static public function updatePageMenuPath(EntityManager $entityManager): void 26 static public function updatePageMenuPath(EntityManager $entityManager): void
27 { 27 {
28 Director::$menu_data = new Menu($entityManager); 28 Model::$menu_data = new Menu($entityManager);
29 Director::$page_path = new Path(); 29 Model::$page_path = new Path();
30 $page = Director::$page_path->getLast(); 30 $page = Model::$page_path->getLast();
31 $path = htmlspecialchars($_POST['page_menu_path']); 31 $path = htmlspecialchars($_POST['page_menu_path']);
32 32
33 // mise en snake_case: filtre caractères non-alphanumériques, minuscule, doublons d'underscore, trim des underscores 33 // mise en snake_case: filtre caractères non-alphanumériques, minuscule, doublons d'underscore, trim des underscores
34 $path = trim(preg_replace('/_+/', '_', strtolower(preg_replace('/[^a-zA-Z0-9]/', '_', $path))), '_'); 34 $path = trim(preg_replace('/_+/', '_', strtolower(preg_replace('/[^a-zA-Z0-9]/', '_', $path))), '_');
35 $page->setEndOfPath($path); 35 $page->setEndOfPath($path);
36 foreach(Director::$menu_data->getChildren() as $child){ 36 foreach(Model::$menu_data->getChildren() as $child){
37 if($child->getEndOfPath() === Director::$page_path->getArray()[0]->getEndOfPath()){ 37 if($child->getEndOfPath() === Model::$page_path->getArray()[0]->getEndOfPath()){
38 $child->fillChildrenPagePath(); // MAJ de $page_path 38 $child->fillChildrenPagePath(); // MAJ de $page_path
39 } 39 }
40 } 40 }
@@ -55,10 +55,10 @@ class PageManagementController
55 static public function newPage(EntityManager $entityManager, array $post): void 55 static public function newPage(EntityManager $entityManager, array $post): void
56 { 56 {
57 // titre et chemin 57 // titre et chemin
58 $director = new Director($entityManager); 58 $model = new Model($entityManager);
59 $director->makeMenuAndPaths(); 59 $model->makeMenuAndPaths();
60 //Director::$menu_data = new Menu($entityManager); 60 //Model::$menu_data = new Menu($entityManager);
61 $previous_page = Director::$menu_data->findPageById((int)$post["page_location"]); // (int) à cause de declare(strict_types=1); 61 $previous_page = Model::$menu_data->findPageById((int)$post["page_location"]); // (int) à cause de declare(strict_types=1);
62 $parent = $previous_page->getParent(); 62 $parent = $previous_page->getParent();
63 63
64 $page = new Page( 64 $page = new Page(
@@ -73,7 +73,7 @@ class PageManagementController
73 // addChild l'ajoute à la fin du tableau "children" puis on trie 73 // addChild l'ajoute à la fin du tableau "children" puis on trie
74 // exemple avec 2 comme position demandée: 1 2 3 4 2 devient 1 2 3 4 5 et la nouvelle entrée sera en 3è position 74 // exemple avec 2 comme position demandée: 1 2 3 4 2 devient 1 2 3 4 5 et la nouvelle entrée sera en 3è position
75 if($parent == null){ 75 if($parent == null){
76 $parent = Director::$menu_data; 76 $parent = Model::$menu_data;
77 } 77 }
78 $parent->addChild($page); 78 $parent->addChild($page);
79 $parent->reindexPositions(); 79 $parent->reindexPositions();
@@ -127,12 +127,12 @@ class PageManagementController
127 /* partie "blocs" */ 127 /* partie "blocs" */
128 static public function addBloc(EntityManager $entityManager): void 128 static public function addBloc(EntityManager $entityManager): void
129 { 129 {
130 $director = new Director($entityManager); 130 $model = new Model($entityManager);
131 $director->makeMenuAndPaths(); // on a besoin de page_path qui dépend de menu_data 131 $model->makeMenuAndPaths(); // on a besoin de page_path qui dépend de menu_data
132 $page = Director::$page_path->getLast(); 132 $page = Model::$page_path->getLast();
133 $director->findUniqueNodeByName('main'); 133 $model->findUniqueNodeByName('main');
134 $director->findItsChildren(); 134 $model->findItsChildren();
135 $main = $director->getNode(); 135 $main = $model->getNode();
136 $position = count($main->getChildren()) + 1; // position dans la fraterie 136 $position = count($main->getChildren()) + 1; // position dans la fraterie
137 137
138 if(!in_array($_POST["bloc_select"], array_keys(Blocks::$blocks), true)) // 3è param: contrôle du type 138 if(!in_array($_POST["bloc_select"], array_keys(Blocks::$blocks), true)) // 3è param: contrôle du type
@@ -185,12 +185,12 @@ class PageManagementController
185 185
186 static public function deleteBloc(EntityManager $entityManager): void 186 static public function deleteBloc(EntityManager $entityManager): void
187 { 187 {
188 $director = new Director($entityManager); 188 $model = new Model($entityManager);
189 $director->makeMenuAndPaths(); 189 $model->makeMenuAndPaths();
190 $director->findUniqueNodeByName('main'); 190 $model->findUniqueNodeByName('main');
191 $director->findItsChildren(); 191 $model->findItsChildren();
192 //$director->findNodeById((int)$_POST['delete_bloc_id']); 192 //$model->findNodeById((int)$_POST['delete_bloc_id']);
193 $main = $director->getNode(); 193 $main = $model->getNode();
194 $bloc = null; 194 $bloc = null;
195 foreach($main->getChildren() as $child){ 195 foreach($main->getChildren() as $child){
196 if($child->getId() === (int)$_POST['delete_bloc_id']){ 196 if($child->getId() === (int)$_POST['delete_bloc_id']){
@@ -212,13 +212,13 @@ class PageManagementController
212 static public function renameBloc(EntityManager $entityManager, array $json): void 212 static public function renameBloc(EntityManager $entityManager, array $json): void
213 { 213 {
214 if(isset($json['bloc_title']) && $json['bloc_title'] !== null && isset($json['bloc_id']) && is_int($json['bloc_id'])){ 214 if(isset($json['bloc_title']) && $json['bloc_title'] !== null && isset($json['bloc_id']) && is_int($json['bloc_id'])){
215 $director = new Director($entityManager); 215 $model = new Model($entityManager);
216 $director->findNodeById($json['bloc_id']); 216 $model->findNodeById($json['bloc_id']);
217 217
218 // le titre (du JSON en BDD) est récupéré sous forme de tableau, modifié et renvoyé 218 // le titre (du JSON en BDD) est récupéré sous forme de tableau, modifié et renvoyé
219 $data = $director->getNode()->getNodeData()->getData(); 219 $data = $model->getNode()->getNodeData()->getData();
220 $data['title'] = htmlspecialchars($json['bloc_title']); 220 $data['title'] = htmlspecialchars($json['bloc_title']);
221 $director->getNode()->getNodeData()->updateData('title', htmlspecialchars($json['bloc_title'])); 221 $model->getNode()->getNodeData()->updateData('title', htmlspecialchars($json['bloc_title']));
222 222
223 $entityManager->flush(); 223 $entityManager->flush();
224 echo json_encode(['success' => true, 'title' => $data['title']]); 224 echo json_encode(['success' => true, 'title' => $data['title']]);
@@ -232,11 +232,11 @@ class PageManagementController
232 static public function SwitchBlocsPositions(EntityManager $entityManager, array $json): void 232 static public function SwitchBlocsPositions(EntityManager $entityManager, array $json): void
233 { 233 {
234 if(isset($json['id1']) && is_int($json['id1']) && isset($json['id2']) && is_int($json['id2']) && isset($_GET['page'])){ 234 if(isset($json['id1']) && is_int($json['id1']) && isset($json['id2']) && is_int($json['id2']) && isset($_GET['page'])){
235 $director = new Director($entityManager); 235 $model = new Model($entityManager);
236 $director->makeMenuAndPaths(); // true pour $director->findItsChildren(); 236 $model->makeMenuAndPaths(); // true pour $model->findItsChildren();
237 $director->findUniqueNodeByName('main'); 237 $model->findUniqueNodeByName('main');
238 $director->findItsChildren(); 238 $model->findItsChildren();
239 $main = $director->getNode(); 239 $main = $model->getNode();
240 $main->sortChildren(true); // régénère les positions avant inversion 240 $main->sortChildren(true); // régénère les positions avant inversion
241 241
242 $bloc1 = null; 242 $bloc1 = null;
@@ -271,8 +271,8 @@ class PageManagementController
271 static public function changeArticlesOrder(EntityManager $entityManager, array $json): void 271 static public function changeArticlesOrder(EntityManager $entityManager, array $json): void
272 { 272 {
273 if(isset($json['id']) && isset($json['chrono_order'])){ 273 if(isset($json['id']) && isset($json['chrono_order'])){
274 $director = new Director($entityManager); 274 $model = new Model($entityManager);
275 $director->findNodeById($json['id']); 275 $model->findNodeById($json['id']);
276 276
277 if($json['chrono_order'] === 'chrono'){ 277 if($json['chrono_order'] === 'chrono'){
278 $chrono_order = true; 278 $chrono_order = true;
@@ -284,7 +284,7 @@ class PageManagementController
284 echo json_encode(['success' => false]); 284 echo json_encode(['success' => false]);
285 die; 285 die;
286 } 286 }
287 $director->getNode()->getNodeData()->setChronoOrder($chrono_order); 287 $model->getNode()->getNodeData()->setChronoOrder($chrono_order);
288 $entityManager->flush(); 288 $entityManager->flush();
289 289
290 echo json_encode(['success' => true, 'chrono_order' => $json['chrono_order']]); 290 echo json_encode(['success' => true, 'chrono_order' => $json['chrono_order']]);
@@ -298,16 +298,16 @@ class PageManagementController
298 static public function changePresentation(EntityManager $entityManager, array $json): void 298 static public function changePresentation(EntityManager $entityManager, array $json): void
299 { 299 {
300 if(isset($json['id']) && isset($json['presentation'])){ 300 if(isset($json['id']) && isset($json['presentation'])){
301 $director = new Director($entityManager); 301 $model = new Model($entityManager);
302 $director->findNodeById($json['id']); 302 $model->findNodeById($json['id']);
303 303
304 if(in_array($json['presentation'], array_keys(Blocks::$presentations))){ 304 if(in_array($json['presentation'], array_keys(Blocks::$presentations))){
305 $director->getNode()->getNodeData()->setPresentation($json['presentation']); 305 $model->getNode()->getNodeData()->setPresentation($json['presentation']);
306 $entityManager->flush(); 306 $entityManager->flush();
307 307
308 $response_data = ['success' => true, 'presentation' => $json['presentation']]; 308 $response_data = ['success' => true, 'presentation' => $json['presentation']];
309 if($json['presentation'] === 'grid'){ 309 if($json['presentation'] === 'grid'){
310 $response_data['cols_min_width'] = $director->getNode()->getNodeData()->getColsMinWidth(); 310 $response_data['cols_min_width'] = $model->getNode()->getNodeData()->getColsMinWidth();
311 } 311 }
312 echo json_encode($response_data); 312 echo json_encode($response_data);
313 } 313 }
@@ -323,9 +323,9 @@ class PageManagementController
323 static public function changeColsMinWidth(EntityManager $entityManager, array $json): void 323 static public function changeColsMinWidth(EntityManager $entityManager, array $json): void
324 { 324 {
325 if(isset($json['id']) && isset($json['cols_min_width'])){ 325 if(isset($json['id']) && isset($json['cols_min_width'])){
326 $director = new Director($entityManager); 326 $model = new Model($entityManager);
327 $director->findNodeById($json['id']); 327 $model->findNodeById($json['id']);
328 $director->getNode()->getNodeData()->setColsMinWidth((int)$json['cols_min_width']); // attention conversion? 328 $model->getNode()->getNodeData()->setColsMinWidth((int)$json['cols_min_width']); // attention conversion?
329 329
330 $entityManager->flush(); 330 $entityManager->flush();
331 echo json_encode(['success' => true, 'cols_min_width' => $json['cols_min_width']]); 331 echo json_encode(['success' => true, 'cols_min_width' => $json['cols_min_width']]);
@@ -338,10 +338,10 @@ class PageManagementController
338 static public function changePaginationLimit(EntityManager $entityManager, array $json): void 338 static public function changePaginationLimit(EntityManager $entityManager, array $json): void
339 { 339 {
340 if(isset($json['id']) && isset($json['pagination_limit'])){ 340 if(isset($json['id']) && isset($json['pagination_limit'])){
341 $director = new Director($entityManager); 341 $model = new Model($entityManager);
342 $director->findNodeById($json['id']); 342 $model->findNodeById($json['id']);
343 $old_limit = $director->getNode()->getNodeData()->getPaginationLimit() ?? 12; 343 $old_limit = $model->getNode()->getNodeData()->getPaginationLimit() ?? 12;
344 $director->getNode()->getNodeData()->setPaginationLimit((int)$json['pagination_limit']); // attention conversion? 344 $model->getNode()->getNodeData()->setPaginationLimit((int)$json['pagination_limit']); // attention conversion?
345 345
346 $entityManager->flush(); 346 $entityManager->flush();
347 347
diff --git a/src/controller/ViewController.php b/src/controller/ViewController.php
index feee0a0..0f21118 100644
--- a/src/controller/ViewController.php
+++ b/src/controller/ViewController.php
@@ -49,10 +49,10 @@ class ViewController extends AbstractBuilder // ViewController est aussi le prem
49 49
50 50
51 /* 2/ accès au modèle */ 51 /* 2/ accès au modèle */
52 $director = new Director($entityManager); 52 $model = new Model($entityManager);
53 $director->makeMenuAndPaths(); 53 $model->makeMenuAndPaths();
54 $director->getWholePageData($request); 54 $model->getWholePageData($request);
55 self::$root_node = $director->getNode(); 55 self::$root_node = $model->getNode();
56 56
57 57
58 /* 3/ 2ème contrôle utilisant les données récupérées */ 58 /* 3/ 2ème contrôle utilisant les données récupérées */
diff --git a/src/controller/Director.php b/src/model/Model.php
index 9c1c6e3..ea8ef71 100644
--- a/src/controller/Director.php
+++ b/src/model/Model.php
@@ -1,7 +1,5 @@
1<?php 1<?php
2// src/controller/Director.php 2// src/model/Model.php
3
4// => src/model/Model.php serait mieux
5 3
6declare(strict_types=1); 4declare(strict_types=1);
7 5
@@ -11,7 +9,7 @@ use App\Entity\Node;
11use Doctrine\ORM\QueryBuilder; 9use Doctrine\ORM\QueryBuilder;
12use Symfony\Component\HttpFoundation\Request; 10use Symfony\Component\HttpFoundation\Request;
13 11
14class Director 12class Model
15{ 13{
16 private EntityManager $entityManager; 14 private EntityManager $entityManager;
17 static public Menu $menu_data; // pour NavBuilder 15 static public Menu $menu_data; // pour NavBuilder
@@ -27,7 +25,7 @@ class Director
27 } 25 }
28 26
29 // à déplacer dans Path ou un truc comme ça? 27 // à déplacer dans Path ou un truc comme ça?
30 // couper Director en deux classes NodeModel et PageModel? 28 // couper Model en deux classes NodeModel et PageModel?
31 public function makeMenuAndPaths(): void // lit la table "page" 29 public function makeMenuAndPaths(): void // lit la table "page"
32 { 30 {
33 self::$menu_data = new Menu($this->entityManager); 31 self::$menu_data = new Menu($this->entityManager);
diff --git a/src/model/Path.php b/src/model/Path.php
index ad44fd9..bf9653e 100644
--- a/src/model/Path.php
+++ b/src/model/Path.php
@@ -17,7 +17,7 @@ class Path extends Page
17 $path_array = explode('/', CURRENT_PAGE); 17 $path_array = explode('/', CURRENT_PAGE);
18 try{ 18 try{
19 // parcourir le menu de haut en bas pour obtenir un ou plusieurs objets Page 19 // parcourir le menu de haut en bas pour obtenir un ou plusieurs objets Page
20 $this->findPage(Director::$menu_data, $path_array); // remplit $this->current_page 20 $this->findPage(Model::$menu_data, $path_array); // remplit $this->current_page
21 } 21 }
22 catch(Exception $e){} 22 catch(Exception $e){}
23 } 23 }
diff --git a/src/router.php b/src/router.php
index c11a4e0..7459a0d 100644
--- a/src/router.php
+++ b/src/router.php
@@ -43,7 +43,7 @@ if($request->getMethod() === 'GET'){
43 } 43 }
44 44
45 // construction d'une page 45 // construction d'une page
46 $response = (new ViewController)->buildView($entityManager, $request); // utilise Director 46 $response = (new ViewController)->buildView($entityManager, $request); // utilise Model
47 // parenthèses nécéssaires autour de l'instanciation pour PHP < 8.4 47 // parenthèses nécéssaires autour de l'instanciation pour PHP < 8.4
48} 48}
49 49
@@ -146,7 +146,7 @@ elseif($request->getMethod() === 'POST'){
146 elseif(isset($_GET['menu_edit'])) 146 elseif(isset($_GET['menu_edit']))
147 { 147 {
148 // ne suit pas la règle, faire ça dans un contrôleur 148 // ne suit pas la règle, faire ça dans un contrôleur
149 Director::$menu_data = new Menu($entityManager); // récupération des données 149 Model::$menu_data = new Menu($entityManager); // récupération des données
150 150
151 // flèche gauche <=: position = position du parent + 1, parent = grand-parent, recalculer les positions 151 // flèche gauche <=: position = position du parent + 1, parent = grand-parent, recalculer les positions
152 if($_GET['menu_edit'] === 'move_one_level_up' && isset($json['id'])){ 152 if($_GET['menu_edit'] === 'move_one_level_up' && isset($json['id'])){
diff --git a/src/view/BreadcrumbBuilder.php b/src/view/BreadcrumbBuilder.php
index c042fa9..2655551 100644
--- a/src/view/BreadcrumbBuilder.php
+++ b/src/view/BreadcrumbBuilder.php
@@ -15,7 +15,7 @@ class BreadcrumbBuilder extends AbstractBuilder
15 private function breadcrumbHTML(): string 15 private function breadcrumbHTML(): string
16 { 16 {
17 $asset = 'assets/home.svg'; // => BDD? 17 $asset = 'assets/home.svg'; // => BDD?
18 $breadcrumb_array = Director::$page_path->getArray(); // tableau de Page 18 $breadcrumb_array = Model::$page_path->getArray(); // tableau de Page
19 $html = ''; 19 $html = '';
20 $nb_of_entries = count($breadcrumb_array); 20 $nb_of_entries = count($breadcrumb_array);
21 21
diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php
index f20dd2e..0a3f55c 100644
--- a/src/view/FooterBuilder.php
+++ b/src/view/FooterBuilder.php
@@ -57,7 +57,7 @@ class FooterBuilder extends AbstractBuilder
57 { 57 {
58 $div_admin = 'logged_out'; 58 $div_admin = 'logged_out';
59 $url = new URL(['page' => 'connection', 'from' => CURRENT_PAGE]); 59 $url = new URL(['page' => 'connection', 'from' => CURRENT_PAGE]);
60 if(Director::$page_path->getLast()->getEndOfPath() === 'article' && isset($_GET['id'])){ 60 if(Model::$page_path->getLast()->getEndOfPath() === 'article' && isset($_GET['id'])){
61 $url->addParams(['id' => $_GET['id']]); 61 $url->addParams(['id' => $_GET['id']]);
62 } 62 }
63 $zone_admin = '<button><a href="' . $url . '">Mode admin</a></button>'; 63 $zone_admin = '<button><a href="' . $url . '">Mode admin</a></button>';
diff --git a/src/view/HeadBuilder.php b/src/view/HeadBuilder.php
index b2f3386..ad6e4ba 100644
--- a/src/view/HeadBuilder.php
+++ b/src/view/HeadBuilder.php
@@ -47,8 +47,8 @@ class HeadBuilder extends AbstractBuilder
47 $js .= '<script src="' . self::versionedFileURL('js', 'tinymce') . '"></script>' . "\n"; 47 $js .= '<script src="' . self::versionedFileURL('js', 'tinymce') . '"></script>' . "\n";
48 } 48 }
49 49
50 $title = Director::$page_path->getLast()->getPageName(); 50 $title = Model::$page_path->getLast()->getPageName();
51 $description = Director::$page_path->getLast()->getDescription(); 51 $description = Model::$page_path->getLast()->getDescription();
52 52
53 // favicon 53 // favicon
54 foreach($node->getNodeData()->getImages() as $image) 54 foreach($node->getNodeData()->getImages() as $image)
diff --git a/src/view/MainBuilder.php b/src/view/MainBuilder.php
index d677971..a920eb4 100644
--- a/src/view/MainBuilder.php
+++ b/src/view/MainBuilder.php
@@ -16,7 +16,7 @@ class MainBuilder extends AbstractBuilder
16 $this->html .= "<main>\n"; 16 $this->html .= "<main>\n";
17 17
18 // page article: cas particulier où l'article est greffé sur main 18 // page article: cas particulier où l'article est greffé sur main
19 if(Director::$page_path->getLast()->getEndOfPath() === 'article'){ 19 if(Model::$page_path->getLast()->getEndOfPath() === 'article'){
20 // pas censé arriver 20 // pas censé arriver
21 if(!isset($_GET['id'])){ 21 if(!isset($_GET['id'])){
22 header('Location: ' . new URL); 22 header('Location: ' . new URL);
diff --git a/src/view/MenuBuilder.php b/src/view/MenuBuilder.php
index 8ea4b8e..12298cf 100644
--- a/src/view/MenuBuilder.php
+++ b/src/view/MenuBuilder.php
@@ -21,10 +21,10 @@ class MenuBuilder extends AbstractBuilder
21 if(file_exists($viewFile)) 21 if(file_exists($viewFile))
22 { 22 {
23 if($_SESSION['admin']){ 23 if($_SESSION['admin']){
24 $this->unfoldMenu(Director::$menu_data); 24 $this->unfoldMenu(Model::$menu_data);
25 25
26 if($template){ 26 if($template){
27 $this->unfoldOptions(Director::$menu_data); 27 $this->unfoldOptions(Model::$menu_data);
28 } 28 }
29 } 29 }
30 else{ 30 else{
diff --git a/src/view/NavBuilder.php b/src/view/NavBuilder.php
index 2cbdef9..07c70d1 100644
--- a/src/view/NavBuilder.php
+++ b/src/view/NavBuilder.php
@@ -14,9 +14,9 @@ class NavBuilder extends AbstractBuilder
14 { 14 {
15 $this->html .= '<nav class="nav_main"><ul>'; 15 $this->html .= '<nav class="nav_main"><ul>';
16 $this->html .= $this->navMainHTML( 16 $this->html .= $this->navMainHTML(
17 Director::$menu_data, 17 Model::$menu_data,
18 // param nullable, ça retire une dépendance stricte entre NavBuilder et Director 18 // param nullable, ça retire une dépendance stricte entre NavBuilder et Model
19 Director::$page_path != null ? Director::$page_path->getArray() : []); 19 Model::$page_path != null ? Model::$page_path->getArray() : []);
20 $this->html .= '</ul></nav>'; 20 $this->html .= '</ul></nav>';
21 } 21 }
22 22
diff --git a/src/view/NewPageBuilder.php b/src/view/NewPageBuilder.php
index 2fae6fa..7bf8628 100644
--- a/src/view/NewPageBuilder.php
+++ b/src/view/NewPageBuilder.php
@@ -25,7 +25,7 @@ class NewPageBuilder extends AbstractBuilder
25 extract($node->getNodeData()->getData()); 25 extract($node->getNodeData()->getData());
26 }*/ 26 }*/
27 27
28 $this->unfoldOptions(Director::$menu_data); 28 $this->unfoldOptions(Model::$menu_data);
29 29
30 ob_start(); 30 ob_start();
31 require $viewFile; // insertion de $this->html généré par unfoldMenu 31 require $viewFile; // insertion de $this->html généré par unfoldMenu
diff --git a/src/view/templates/modify_block.php b/src/view/templates/modify_block.php
index 3620100..75cb218 100644
--- a/src/view/templates/modify_block.php
+++ b/src/view/templates/modify_block.php
@@ -1,6 +1,6 @@
1<div class="modify_one_block" id="bloc_edit_<?= $child_node->getId() ?>"> 1<div class="modify_one_block" id="bloc_edit_<?= $child_node->getId() ?>">
2 <div class="block_options"> 2 <div class="block_options">
3 <label for="bloc_rename_<?= $child_node->getId() ?>">Type <b><?= Blocks::$blocks[$child_node->getName()] ?></b> 3 <label for="bloc_rename_<?= $child_node->getId() ?>">Type <b><?= Blocks::$blocks[$child_node->getName()] ?? '<i>erreur base de données</i>' ?></b>
4 </label> 4 </label>
5 <p> 5 <p>
6 <input type="text" id="bloc_rename_<?= $child_node->getId() ?>" name="bloc_rename_title" value="<?= $child_node->getNodeData()->getdata()['title'] ?>" required> 6 <input type="text" id="bloc_rename_<?= $child_node->getId() ?>" name="bloc_rename_title" value="<?= $child_node->getNodeData()->getdata()['title'] ?>" required>
diff --git a/src/view/templates/modify_page.php b/src/view/templates/modify_page.php
index c9da4a4..ecacb02 100644
--- a/src/view/templates/modify_page.php
+++ b/src/view/templates/modify_page.php
@@ -5,28 +5,28 @@
5 <div class="edit_page_title_zone"> 5 <div class="edit_page_title_zone">
6 <p id="edit_page_title"> 6 <p id="edit_page_title">
7 <label for="page_name">Titre de la page</label> 7 <label for="page_name">Titre de la page</label>
8 <input type="text" id="page_name" name="edit_page_title" value="<?= Director::$page_path->getLast()->getPageName() ?>" onchange="makePageNamePath()" required> 8 <input type="text" id="page_name" name="edit_page_title" value="<?= Model::$page_path->getLast()->getPageName() ?>" onchange="makePageNamePath()" required>
9 <button onclick="changePageTitle('<?= Director::$page_path->getLast()->getId() ?>')">Renommer</button> 9 <button onclick="changePageTitle('<?= Model::$page_path->getLast()->getId() ?>')">Renommer</button>
10 </p> 10 </p>
11 <form id="edit_page_menu_path" method="post" action="<?= new URL(['page' => CURRENT_PAGE]) ?>"> 11 <form id="edit_page_menu_path" method="post" action="<?= new URL(['page' => CURRENT_PAGE]) ?>">
12 <label for="page_name_path">Chemin en "snake_case"</label> 12 <label for="page_name_path">Chemin en "snake_case"</label>
13 <input type="text" id="page_name_path" name="page_menu_path" value="<?= Director::$page_path->getLast()->getEndOfPath() ?>" placeholder="ex: nouvelle_page" required> 13 <input type="text" id="page_name_path" name="page_menu_path" value="<?= Model::$page_path->getLast()->getEndOfPath() ?>" placeholder="ex: nouvelle_page" required>
14 <input type="hidden" name="page_id" value="<?= Director::$page_path->getLast()->getId() ?>"><input type="hidden" name="page_name_path_hidden"> 14 <input type="hidden" name="page_id" value="<?= Model::$page_path->getLast()->getId() ?>"><input type="hidden" name="page_name_path_hidden">
15 <input type="submit" value="Modifier"> 15 <input type="submit" value="Modifier">
16 </form> 16 </form>
17 </div> 17 </div>
18 <div id="edit_description"> 18 <div id="edit_description">
19 <label for="description_textarea">Description sous le titre dans les moteurs de recherche</label> 19 <label for="description_textarea">Description sous le titre dans les moteurs de recherche</label>
20 <div> 20 <div>
21 <textarea id="description_textarea" name="edit_description" cols="40" rows="3" placeholder="ex: nous faisons ceci et cela, etc" required><?= Director::$page_path->getLast()->getDescription(); ?></textarea> 21 <textarea id="description_textarea" name="edit_description" cols="40" rows="3" placeholder="ex: nous faisons ceci et cela, etc" required><?= Model::$page_path->getLast()->getDescription(); ?></textarea>
22 <button onclick="changeDescription('<?= Director::$page_path->getLast()->getId() ?>')">Modifier</button> 22 <button onclick="changeDescription('<?= Model::$page_path->getLast()->getId() ?>')">Modifier</button>
23 </div> 23 </div>
24 </div> 24 </div>
25 </div> 25 </div>
26 <div class="delete_page_zone"> 26 <div class="delete_page_zone">
27 <form method="post" action="<?= new URL ?>"> 27 <form method="post" action="<?= new URL ?>">
28 <label>Supprimer cette page</label> 28 <label>Supprimer cette page</label>
29 <input type="hidden" name="page_id" value="<?= Director::$page_path->getLast()->getId() ?>"> 29 <input type="hidden" name="page_id" value="<?= Model::$page_path->getLast()->getId() ?>">
30 <input type="hidden" name="submit_hidden"> 30 <input type="hidden" name="submit_hidden">
31 <input type="submit" value="Supprimer" onclick="return confirm('Voulez-vous vraiment supprimer cette page?');"> 31 <input type="submit" value="Supprimer" onclick="return confirm('Voulez-vous vraiment supprimer cette page?');">
32 </form> 32 </form>