diff options
Diffstat (limited to 'src/controller/MenuAndPathsController.php')
| -rw-r--r-- | src/controller/MenuAndPathsController.php | 57 |
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 | ||
| 6 | use App\Entity\Page; | 6 | use App\Entity\Page; |
| 7 | use Doctrine\ORM\EntityManager; | 7 | use Doctrine\ORM\EntityManager; |
| 8 | use Symfony\Component\HttpFoundation\JsonResponse; | ||
| 9 | use Symfony\Component\HttpFoundation\RedirectResponse; | ||
| 8 | 10 | ||
| 9 | class MenuAndPathsController | 11 | class 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 |
