From 547d7feed68e89957f062b8ed9b988f28c5830ce Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 3 Aug 2025 00:23:11 +0200 Subject: =?UTF-8?q?r=C3=A9organisation=203:=20classes=20controller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/ArticleController.php | 169 +++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 src/controller/ArticleController.php (limited to 'src/controller/ArticleController.php') diff --git a/src/controller/ArticleController.php b/src/controller/ArticleController.php new file mode 100644 index 0000000..e3e4edb --- /dev/null +++ b/src/controller/ArticleController.php @@ -0,0 +1,169 @@ + + $director->findNodeById($section_id); + $director->makeSectionNode(); + $node = $director->getNode(); // =
+ + if(is_array($content)){ + $date = new \DateTime($content['d']); + $article = new Article($content['i'], $date, $content['t'], $content['p']); + $article_node = new Node('new', 'i' . (string)$date->getTimestamp(), [], count($node->getChildren()) + 1, $node, $node->getPage(), $article); + + // id_node tout juste généré + //$article_node->getId(); + } + else{ + $timestamp = time(); + $date = new \DateTime; + $date->setTimestamp($timestamp); + + $article = new Article($content, $date); // le "current" timestamp est obtenu par la BDD + $article_node = new Node('article', 'i' . (string)$timestamp, [], count($node->getChildren()) + 1, $node, $node->getPage(), $article); + } + + $entityManager->persist($article_node); + $entityManager->flush(); + + echo json_encode(['success' => true, 'article_id' => $article_node->getArticleTimestamp()]); + die; + } + // modification article + else{ + $id[0] = 'i'; // id de l'article node + } + + if($director->makeArticleNode($id)) // une entrée est trouvée + { + $node = $director->getArticleNode(); // article + switch($json['id'][0]){ + case 'i': + $node->getArticle()->setContent($content); + break; + case 'p': + $node->getArticle()->setPreview($content); // html de l'éditeur + break; + case 't': + $node->getArticle()->setTitle($content); // html de l'éditeur + break; + case 'd': + echo json_encode(['success' => false, 'message' => 'l\'action editor_submit ne supporte pas les dates, utiliser date_submit.']); + die; + default: + echo json_encode(['success' => false, 'message' => 'identifiant non utilisable']); + die; + } + $entityManager->flush(); + echo json_encode(['success' => true]); + } + else + { + echo json_encode(['success' => false, 'message' => 'article non identifié']); + } + } + else{ + echo json_encode(['success' => false, 'message' => 'Erreur de décodage JSON']); + } + die; + } + + static public function deleteArticle(EntityManager $entityManager, array $json): void + { + $director = new Director($entityManager); + $director->makeArticleNode($json['id'], true); + $article = $director->getArticleNode(); + $section = $director->getNode(); + + $entityManager->remove($article); + $section->removeChild($article); + $section->sortChildren(true); // régénère les positions + $entityManager->flush(); + + // test avec une nouvelle requête qui ne devrait rien trouver + if(!$director->makeArticleNode($json['id'])) + { + echo json_encode(['success' => true]); + + // on pourrait afficher une notification "toast" + } + else{ + http_response_code(500); + echo json_encode(['success' => false, 'message' => 'Erreur lors de la suppression de l\'article.']); + } + die; + } + + static public function switchPositions(EntityManager $entityManager, array $json): void + { + $director = new Director($entityManager); + $director->makeArticleNode($json['id1'], true); + $article1 = $director->getArticleNode(); + $section = $director->getNode(); + + $section->sortChildren(true); // régénère les positions avant inversion + + $article2 = null; + foreach($section->getChildren() as $child){ + if($child->getArticleTimestamp() === $json['id2']) // type string + { + $article2 = $child; + break; + } + } + + // inversion + $tmp = $article1->getPosition(); + $article1->setPosition($article2->getPosition()); + $article2->setPosition($tmp); + $entityManager->flush(); + + echo json_encode(['success' => true]); + die; + } + + static public function dateSubmit(EntityManager $entityManager, array $json): void + { + $id = $json['id']; + $id[0] = 'i'; + $date = new DateTime($json['date']); + + $director = new Director($entityManager); + $director->makeArticleNode($id); + $node = $director->getArticleNode(); + $node->getArticle()->setDateTime($date); + $entityManager->flush(); + + echo json_encode(['success' => true]); + die; + } +} \ No newline at end of file -- cgit v1.2.3