aboutsummaryrefslogtreecommitdiff
path: root/src/controller/MenuAndPathsController.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2026-06-10 20:56:25 +0200
committerpolo <ordipolo@gmx.fr>2026-06-10 20:56:25 +0200
commitae217a6e4b0c29346381e2a410fd7810cb33ce3f (patch)
tree206f604c9297deabf78bb33f31a1e6b9303d2258 /src/controller/MenuAndPathsController.php
parent99d2616a08c98e7067cdb12f0bcbd4ac0cffaeb0 (diff)
downloadcms-ae217a6e4b0c29346381e2a410fd7810cb33ce3f.tar.gz
cms-ae217a6e4b0c29346381e2a410fd7810cb33ce3f.tar.bz2
cms-ae217a6e4b0c29346381e2a410fd7810cb33ce3f.zip
Tous les contrôleurs retournent une Response!
Diffstat (limited to 'src/controller/MenuAndPathsController.php')
-rw-r--r--src/controller/MenuAndPathsController.php57
1 files changed, 25 insertions, 32 deletions
diff --git a/src/controller/MenuAndPathsController.php b/src/controller/MenuAndPathsController.php
index 799f14b..9bd6ad1 100644
--- a/src/controller/MenuAndPathsController.php
+++ b/src/controller/MenuAndPathsController.php
@@ -5,10 +5,12 @@ declare(strict_types=1);
5 5
6use App\Entity\Page; 6use App\Entity\Page;
7use Doctrine\ORM\EntityManager; 7use Doctrine\ORM\EntityManager;
8use Symfony\Component\HttpFoundation\JsonResponse;
9use Symfony\Component\HttpFoundation\RedirectResponse;
8 10
9class MenuAndPathsController 11class MenuAndPathsController
10{ 12{
11 static public function newUrlMenuEntry(EntityManager $entityManager): void 13 static public function newUrlMenuEntry(EntityManager $entityManager): RedirectResponse
12 { 14 {
13 Model::$menu = new Menu($entityManager); 15 Model::$menu = new Menu($entityManager);
14 $previous_page = Model::$menu->findPageById((int)$_POST["location"]); // (int) à cause de declare(strict_types=1); 16 $previous_page = Model::$menu->findPageById((int)$_POST["location"]); // (int) à cause de declare(strict_types=1);
@@ -16,8 +18,8 @@ class MenuAndPathsController
16 18
17 $url_input = trim($_POST["url_input"]); // faire htmlspecialchars à l'affichage 19 $url_input = trim($_POST["url_input"]); // faire htmlspecialchars à l'affichage
18 if(!filter_var($url_input, FILTER_VALIDATE_URL) || !str_starts_with($url_input, 'http')){ 20 if(!filter_var($url_input, FILTER_VALIDATE_URL) || !str_starts_with($url_input, 'http')){
19 header("Location: " . new URL(['page' => $_GET['from'], 'error' => 'invalide_url'])); 21 // utiliser une flash error
20 die; 22 return new RedirectResponse((string)new URL(['page' => $_GET['from'], 'error' => 'invalide_url']));
21 } 23 }
22 24
23 $page = new Page( 25 $page = new Page(
@@ -38,24 +40,23 @@ class MenuAndPathsController
38 40
39 $entityManager->persist($page); 41 $entityManager->persist($page);
40 $entityManager->flush(); 42 $entityManager->flush();
41 header("Location: " . new URL(['page' => $_GET['from']])); 43 return new RedirectResponse((string)new URL(['page' => $_GET['from']]));
42 die;
43 } 44 }
44 45
45 // on pourrait utiliser FormValidation ici 46 // on pourrait utiliser FormValidation ici
46 static public function editUrl(EntityManager $entityManager, array $json): void 47 static public function editUrl(EntityManager $entityManager, array $json): JsonResponse
47 { 48 {
48 $url_data = trim($json['input_data']); // garder htmlspecialchars pour l'affichage 49 $url_data = trim($json['input_data']); // garder htmlspecialchars pour l'affichage
49 $page = $entityManager->find('App\Entity\Page', $json['id']); 50 $page = $entityManager->find('App\Entity\Page', $json['id']);
50 51
51 if(!$page){ 52 if(!$page){
52 echo json_encode(['success' => false, 'message' => "id invalide"]); 53 return new JsonResponse(['success' => false, 'message' => "id invalide"]);
53 } 54 }
54 elseif(!in_array($json['field'], ['url_name', 'url_content'])){ 55 elseif(!in_array($json['field'], ['url_name', 'url_content'])){
55 echo json_encode(['success' => false, 'message' => "champ invalide"]); 56 return new JsonResponse(['success' => false, 'message' => "champ invalide"]);
56 } 57 }
57 elseif($json['field'] === 'url_content' && (!filter_var($url_data, FILTER_VALIDATE_URL) || !str_starts_with($url_data, 'http'))){ 58 elseif($json['field'] === 'url_content' && (!filter_var($url_data, FILTER_VALIDATE_URL) || !str_starts_with($url_data, 'http'))){
58 echo json_encode(['success' => false, 'message' => "la chaîne envoyée n'est pas une URL valide"]); 59 return new JsonResponse(['success' => false, 'message' => "la chaîne envoyée n'est pas une URL valide"]);
59 } 60 }
60 else{ 61 else{
61 if($json['field'] === 'url_name'){ 62 if($json['field'] === 'url_name'){
@@ -65,12 +66,11 @@ class MenuAndPathsController
65 $page->setEndOfPath($url_data); 66 $page->setEndOfPath($url_data);
66 } 67 }
67 $entityManager->flush(); 68 $entityManager->flush();
68 echo json_encode(['success' => true, 'url_data' => $url_data]); 69 return new JsonResponse(['success' => true, 'url_data' => $url_data]);
69 } 70 }
70 die;
71 } 71 }
72 72
73 static public function deleteUrlMenuEntry(EntityManager $entityManager): void 73 static public function deleteUrlMenuEntry(EntityManager $entityManager): RedirectResponse
74 { 74 {
75 Model::$menu = new Menu($entityManager); 75 Model::$menu = new Menu($entityManager);
76 $page = Model::$menu->findPageById((int)$_POST["delete"]); 76 $page = Model::$menu->findPageById((int)$_POST["delete"]);
@@ -84,11 +84,10 @@ class MenuAndPathsController
84 84
85 $entityManager->remove($page); // suppression en BDD 85 $entityManager->remove($page); // suppression en BDD
86 $entityManager->flush(); 86 $entityManager->flush();
87 header("Location: " . new URL(['page' => $_GET['from']])); 87 return new RedirectResponse((string)new URL(['page' => $_GET['from']]));
88 die;
89 } 88 }
90 89
91 static public function MoveOneLevelUp(EntityManager $entityManager, array $json): void 90 static public function MoveOneLevelUp(EntityManager $entityManager, array $json): JsonResponse
92 { 91 {
93 $id = $json['id']; 92 $id = $json['id'];
94 $page = Model::$menu->findPageById((int)$id); 93 $page = Model::$menu->findPageById((int)$id);
@@ -96,8 +95,7 @@ class MenuAndPathsController
96 $parent = $page->getParent(); // peut être null 95 $parent = $page->getParent(); // peut être null
97 if($parent === null){ 96 if($parent === null){
98 // 1er niveau: ne rien faire 97 // 1er niveau: ne rien faire
99 echo json_encode(['success' => false]); 98 return new JsonResponse(['success' => false, 'message' => 'nothing to do']);
100 die;
101 } 99 }
102 // BDD 100 // BDD
103 else{ 101 else{
@@ -130,12 +128,11 @@ class MenuAndPathsController
130 $parent->removeChild($page); 128 $parent->removeChild($page);
131 $nav_builder = new NavBuilder(); 129 $nav_builder = new NavBuilder();
132 $menu_builder = new MenuBuilder(null, false); 130 $menu_builder = new MenuBuilder(null, false);
133 echo json_encode(['success' => true, 'nav' => $nav_builder->render(), 'menu_buttons' => $menu_builder->render()]); 131 return new JsonResponse(['success' => true, 'nav' => $nav_builder->render(), 'menu_buttons' => $menu_builder->render()]);
134 die;
135 } 132 }
136 } 133 }
137 134
138 static public function MoveOneLevelDown(EntityManager $entityManager, array $json): void 135 static public function MoveOneLevelDown(EntityManager $entityManager, array $json): JsonResponse
139 { 136 {
140 $id = $json['id']; 137 $id = $json['id'];
141 $page = Model::$menu->findPageById((int)$id); 138 $page = Model::$menu->findPageById((int)$id);
@@ -152,8 +149,7 @@ class MenuAndPathsController
152 if($child->getPosition() === $page->getPosition() - 1){ 149 if($child->getPosition() === $page->getPosition() - 1){
153 // refus si $parent est une adresse, ça va casser le lien, exemple: index.php?page=chemin/http://un_site_web.fr/vers/ici 150 // refus si $parent est une adresse, ça va casser le lien, exemple: index.php?page=chemin/http://un_site_web.fr/vers/ici
154 if(str_starts_with($child->getEndOfPath(), 'http')){ 151 if(str_starts_with($child->getEndOfPath(), 'http')){
155 echo json_encode(['success' => false, 'error' => 'new_parent_is_a_link']); 152 return new JsonResponse(['success' => false, 'error' => 'new_parent_is_a_link']);
156 die;
157 } 153 }
158 154
159 $page->setParent($child); 155 $page->setParent($child);
@@ -171,11 +167,10 @@ class MenuAndPathsController
171 $nav_builder = new NavBuilder(); 167 $nav_builder = new NavBuilder();
172 $menu_builder = new MenuBuilder(null, false); 168 $menu_builder = new MenuBuilder(null, false);
173 169
174 echo json_encode(['success' => true, 'nav' => $nav_builder->render(), 'menu_buttons' => $menu_builder->render()]); 170 return new JsonResponse(['success' => true, 'nav' => $nav_builder->render(), 'menu_buttons' => $menu_builder->render()]);
175 die;
176 } 171 }
177 172
178 static public function SwitchPositions(EntityManager $entityManager, array $json): void 173 static public function SwitchPositions(EntityManager $entityManager, array $json): JsonResponse
179 { 174 {
180 $id1 = $json['id1']; 175 $id1 = $json['id1'];
181 $id2 = $json['id2']; 176 $id2 = $json['id2'];
@@ -196,15 +191,14 @@ class MenuAndPathsController
196 191
197 // nouveau menu 192 // nouveau menu
198 $nav_builder = new NavBuilder(); 193 $nav_builder = new NavBuilder();
199 echo json_encode(['success' => true, 'nav' => $nav_builder->render()]); 194 return new JsonResponse(['success' => true, 'nav' => $nav_builder->render()]);
200 } 195 }
201 else{ 196 else{
202 echo json_encode(['success' => false]); 197 return new JsonResponse(['success' => false]);
203 } 198 }
204 die;
205 } 199 }
206 200
207 static public function displayInMenu(EntityManager $entityManager, array $json): void 201 static public function displayInMenu(EntityManager $entityManager, array $json): JsonResponse
208 { 202 {
209 $id = $json['id']; 203 $id = $json['id'];
210 $checked = $json['checked']; 204 $checked = $json['checked'];
@@ -216,11 +210,10 @@ class MenuAndPathsController
216 210
217 // nouveau menu 211 // nouveau menu
218 $nav_builder = new NavBuilder(); 212 $nav_builder = new NavBuilder();
219 echo json_encode(['success' => true, 'nav' => $nav_builder->render()]); 213 return new JsonResponse(['success' => true, 'nav' => $nav_builder->render()]);
220 } 214 }
221 else{ 215 else{
222 echo json_encode(['success' => false]); 216 return new JsonResponse(['success' => false]);
223 } 217 }
224 die;
225 } 218 }
226} \ No newline at end of file 219} \ No newline at end of file