aboutsummaryrefslogtreecommitdiff
path: root/src/controller/ArticleController.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/ArticleController.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/ArticleController.php')
-rw-r--r--src/controller/ArticleController.php119
1 files changed, 67 insertions, 52 deletions
diff --git a/src/controller/ArticleController.php b/src/controller/ArticleController.php
index 2364c50..7019f5c 100644
--- a/src/controller/ArticleController.php
+++ b/src/controller/ArticleController.php
@@ -8,10 +8,12 @@ use App\Entity\Article;
8use Doctrine\ORM\EntityManager; 8use Doctrine\ORM\EntityManager;
9use Symfony\Component\HttpFoundation\Request; 9use Symfony\Component\HttpFoundation\Request;
10use Symfony\Component\HttpFoundation\Response; 10use Symfony\Component\HttpFoundation\Response;
11use Symfony\Component\HttpFoundation\JsonResponse;
12use Symfony\Component\HttpFoundation\RedirectResponse;
11 13
12class ArticleController 14class ArticleController
13{ 15{
14 static public function fetch(EntityManager $entityManager, Request $request): void 16 static public function fetch(EntityManager $entityManager, Request $request): JsonResponse
15 { 17 {
16 if($request->query->has('id') && !empty($request->query->get('id')) && $request->query->has('last_article')){ 18 if($request->query->has('id') && !empty($request->query->get('id')) && $request->query->has('last_article')){
17 $id = (int)$request->get('id'); // type et nettoie 19 $id = (int)$request->get('id'); // type et nettoie
@@ -29,6 +31,9 @@ class ArticleController
29 elseif($parent_block->getName() === 'news_block'){ 31 elseif($parent_block->getName() === 'news_block'){
30 $builder_name = 'NewBuilder'; 32 $builder_name = 'NewBuilder';
31 } 33 }
34 else{
35 return new JsonResponse(['success' => false, 'error' => 'server side error'], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
36 }
32 37
33 $html = ''; 38 $html = '';
34 foreach($bulk_data as $article){ 39 foreach($bulk_data as $article){
@@ -36,24 +41,20 @@ class ArticleController
36 $html .= $builder->render(); 41 $html .= $builder->render();
37 } 42 }
38 43
39 echo json_encode(['success' => true, 'html' => $html, 'truncated' => $get_articles_return[1]]); 44 return new JsonResponse(['success' => true, 'html' => $html, 'truncated' => $get_articles_return[1]]);
40 die;
41 } 45 }
42 else{ 46 else{
43 echo json_encode(['success' => false, 'error' => 'mauvais type de bloc']); 47 return new JsonResponse(['success' => false, 'error' => 'server side error']);
44 die;
45 } 48 }
46 } 49 }
47 else{ 50 else{
48 echo json_encode(['success' => false, 'error' => 'la requête ne comporte pas les paramètres attendus']); 51 return new JsonResponse(['success' => false, 'error' => 'bad parameters']);
49 die;
50 } 52 }
51 } 53 }
52 54
53 static public function editorSubmit(EntityManager $entityManager, array $json): void 55 static public function editorSubmit(EntityManager $entityManager, array $json): JsonResponse
54 { 56 {
55 if(json_last_error() === JSON_ERROR_NONE) 57 if(json_last_error() === JSON_ERROR_NONE){
56 {
57 $id = $json['id']; 58 $id = $json['id'];
58 if(in_array($id[0], ['t', 'p', 'i', 'd'])){ 59 if(in_array($id[0], ['t', 'p', 'i', 'd'])){
59 $id = substr($id, 1); 60 $id = substr($id, 1);
@@ -76,8 +77,7 @@ class ArticleController
76 if($json['id'][0] === 'n'){ // ici $id est un bloc 77 if($json['id'][0] === 'n'){ // ici $id est un bloc
77 $section_id = (int)substr($id, 1); // id du bloc <section> 78 $section_id = (int)substr($id, 1); // id du bloc <section>
78 if(!$model->findNodeById($section_id)){ // erreur mauvais id 79 if(!$model->findNodeById($section_id)){ // erreur mauvais id
79 echo json_encode(['success' => false, 'error' => 'article_not_saved, bad id']); 80 return new JsonResponse(['success' => false, 'error' => 'article_not_saved, bad id']);
80 die;
81 } 81 }
82 $model->makeSectionNode(); 82 $model->makeSectionNode();
83 $section = $model->getNode(); 83 $section = $model->getNode();
@@ -85,8 +85,7 @@ class ArticleController
85 // ajout d'une news 85 // ajout d'une news
86 if(is_array($content)){ 86 if(is_array($content)){
87 if($section->getPage()->getEndOfPath() !== $json['from']){ // erreur mauvais from 87 if($section->getPage()->getEndOfPath() !== $json['from']){ // erreur mauvais from
88 echo json_encode(['success' => false, 'error' => 'article_not_saved, bad from']); 88 return new JsonResponse(['success' => false, 'error' => 'article_not_saved, bad from']);
89 die;
90 } 89 }
91 90
92 $date = new \DateTime($content['d'] . ':' . (new \DateTime)->format('s')); // l'input type="datetime-local" ne donne pas les secondes, on les ajoute: 'hh:mm' . ':ss' 91 $date = new \DateTime($content['d'] . ':' . (new \DateTime)->format('s')); // l'input type="datetime-local" ne donne pas les secondes, on les ajoute: 'hh:mm' . ':ss'
@@ -112,14 +111,12 @@ class ArticleController
112 $entityManager->persist($article_node); 111 $entityManager->persist($article_node);
113 $entityManager->flush(); 112 $entityManager->flush();
114 113
115 echo json_encode(['success' => true, 'article_id' => $article_node->getId()]); 114 return new JsonResponse(['success' => true, 'article_id' => $article_node->getId()]);
116 die;
117 } 115 }
118 // modification article 116 // modification article
119 //else{} 117 //else{}
120 118
121 if($model->makeArticleNode($id)) // une entrée est trouvée 119 if($model->makeArticleNode($id)){ // une entrée est trouvée
122 {
123 $node = $model->getArticleNode(); 120 $node = $model->getArticleNode();
124 switch($json['id'][0]){ 121 switch($json['id'][0]){
125 case 'i': 122 case 'i':
@@ -132,54 +129,74 @@ class ArticleController
132 $node->getArticle()->setTitle($content); // html de l'éditeur 129 $node->getArticle()->setTitle($content); // html de l'éditeur
133 break; 130 break;
134 case 'd': 131 case 'd':
135 echo json_encode(['success' => false, 'message' => 'l\'action editor_submit ne supporte pas les dates, utiliser date_submit.']); 132 return new JsonResponse(['success' => false, 'message' => 'l\'action editor_submit ne supporte pas les dates, utiliser date_submit.']);
136 die;
137 default: // modif article simple (id sans lettre devant) 133 default: // modif article simple (id sans lettre devant)
138 $node->getArticle()->setContent($content); 134 $node->getArticle()->setContent($content);
139 } 135 }
140 $entityManager->flush(); 136 $entityManager->flush();
141 echo json_encode(['success' => true]); 137 return new JsonResponse(['success' => true]);
142 } 138 }
143 else 139 else{
144 { 140 return new JsonResponse(['success' => false, 'message' => 'article non identifié']);
145 echo json_encode(['success' => false, 'message' => 'article non identifié']);
146 } 141 }
147 } 142 }
148 else{ 143 else{
149 echo json_encode(['success' => false, 'message' => 'Erreur de décodage JSON']); 144 return new JsonResponse(['success' => false, 'message' => 'Erreur de décodage JSON']);
150 } 145 }
151 die;
152 } 146 }
153 147
154 static public function deleteArticle(EntityManager $entityManager, array $data): Response // $data peut être un $_GET ou du JSON 148 static public function deleteArticle(EntityManager $entityManager, Request $request): Response
155 { 149 {
156 $model = new Model($entityManager); 150 $model = new Model($entityManager);
157 if(!$model->makeArticleNode($data['id'], true)){ 151
158 return new Response( 152 if($request->headers->get('Content-Type') === 'application/json'){
159 '{"success": false, "message": "Erreur: pas d\'article à supprimer"}', 153 $id = json_decode($request->getContent(), true)['id'];
160 Response::HTTP_INTERNAL_SERVER_ERROR); // 500 154 }
155 elseif($request->headers->get('Content-Type') === 'application/x-www-form-urlencoded'){
156 $id = $request->query->get('id');
157 }
158 // ni JSON ni form, c'est quoi? un POST vide?
159 else{
160 return new Response('la méthode deleteArticle ne peut être appelée de cette manière');
161 } 161 }
162 $article = $model->getArticleNode();
163 $section = $model->getNode();
164 162
165 $entityManager->remove($article); 163 if(!$model->makeArticleNode($id, true)){
166 $section->removeChild($article); 164 $params = ['false', "Erreur 500 pas d\'article à supprimer"];
167 $section->sortChildren(true); // régénère les positions 165 }
166 else{
167 $article = $model->getArticleNode();
168 $section = $model->getNode();
169
170 $entityManager->remove($article);
171 $section->removeChild($article);
172 $section->sortChildren(true); // régénère les positions
173
174 try{
175 $entityManager->flush();
176 $params = ['true', 'Article supprimé avec succès'];
177 }
178 catch(Exception $e){
179 $params = ['false', 'Erreur 500 ' . $e->getMessage()];
180 }
181 }
168 182
169 try{ 183 if($request->headers->get('Content-Type') === 'application/json'){
170 $entityManager->flush(); 184 return new JsonResponse(
171 return new Response( 185 ['success' => $params[0], 'message' => $params[1]],
172 '{"success": true, "message": "Article supprimé avec succès"}', 186 $params[0] ? JsonResponse::HTTP_OK : JsonResponse::HTTP_INTERNAL_SERVER_ERROR
173 Response::HTTP_OK); // 200 187 );
174 }
175 catch(Exception $e){
176 return new Response(
177 '{"success": false, "message": "Erreur: ' . $e->getMessage() . '"}',
178 Response::HTTP_INTERNAL_SERVER_ERROR); // 500
179 } 188 }
189 elseif($request->headers->get('Content-Type') === 'application/x-www-form-urlencoded'){
190 $url = new URL(['page' => $request->query->get('from') ?? '', 'success' => $params[0], 'message' => $params[1]]);
191 return new RedirectResponse((string)$url);
192 }
193 else{
194 // cas inaccesible
195 throw new Exception('la méthode deleteArticle ne peut être appelée de cette manière');
196 }
180 } 197 }
181 198
182 static public function switchPositions(EntityManager $entityManager, array $json): void 199 static public function switchPositions(EntityManager $entityManager, array $json): JsonResponse
183 { 200 {
184 $model = new Model($entityManager); 201 $model = new Model($entityManager);
185 $model->makeArticleNode($json['id1'], true); 202 $model->makeArticleNode($json['id1'], true);
@@ -202,11 +219,10 @@ class ArticleController
202 $article2->setPosition($tmp); 219 $article2->setPosition($tmp);
203 $entityManager->flush(); 220 $entityManager->flush();
204 221
205 echo json_encode(['success' => true]); 222 return new JsonResponse(['success' => true]);
206 die;
207 } 223 }
208 224
209 static public function dateSubmit(EntityManager $entityManager, array $json): void 225 static public function dateSubmit(EntityManager $entityManager, array $json): JsonResponse
210 { 226 {
211 $id = substr($json['id'], 1); 227 $id = substr($json['id'], 1);
212 $date = new DateTime($json['date']); 228 $date = new DateTime($json['date']);
@@ -217,7 +233,6 @@ class ArticleController
217 $node->getArticle()->setDateTime($date); 233 $node->getArticle()->setDateTime($date);
218 $entityManager->flush(); 234 $entityManager->flush();
219 235
220 echo json_encode(['success' => true]); 236 return new JsonResponse(['success' => true]);
221 die;
222 } 237 }
223} \ No newline at end of file 238} \ No newline at end of file