aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-08-26 01:15:33 +0200
committerpolo <ordipolo@gmx.fr>2025-08-26 01:15:33 +0200
commitf4df3e9b9df3d54ce58796f923da70ff7e566018 (patch)
treebbd037099976d0411533823b26a34949d04f286c
parentb02b44d1da7e9ddd7a341d29a597accfbb78155c (diff)
downloadcms-f4df3e9b9df3d54ce58796f923da70ff7e566018.zip
séparation bloc / mise en page, bloc spécial pour les actus, renommage de classes, fichiers, etc
-rw-r--r--src/controller/ArticleController.php2
-rw-r--r--src/controller/PageManagementController.php18
-rw-r--r--src/installation.php9
-rw-r--r--src/model/Blocks.php38
-rw-r--r--src/model/entities/Article.php2
-rw-r--r--src/model/entities/NodeData.php12
-rw-r--r--src/model/entities/Presentation.php31
-rw-r--r--src/view/GaleryBuilder.php2
-rw-r--r--src/view/MainBuilder.php34
-rw-r--r--src/view/NewBuilder.php11
-rw-r--r--src/view/NewsBlockBuilder.php (renamed from src/view/GridBuilder.php)30
-rw-r--r--src/view/PostBlockBuilder.php (renamed from src/view/BlogBuilder.php)25
-rw-r--r--src/view/PostBuilder.php (renamed from src/view/ArticleBuilder.php)4
-rw-r--r--src/view/templates/news_block.php (renamed from src/view/templates/blog.php)4
-rw-r--r--src/view/templates/post.php (renamed from src/view/templates/article.php)0
-rw-r--r--src/view/templates/post_block.php (renamed from src/view/templates/grid.php)4
16 files changed, 153 insertions, 73 deletions
diff --git a/src/controller/ArticleController.php b/src/controller/ArticleController.php
index 3b39335..078754a 100644
--- a/src/controller/ArticleController.php
+++ b/src/controller/ArticleController.php
@@ -49,7 +49,7 @@ class ArticleController
49 $date->setTimestamp($timestamp); 49 $date->setTimestamp($timestamp);
50 50
51 $article = new Article($content, $date); // le "current" timestamp est obtenu par la BDD 51 $article = new Article($content, $date); // le "current" timestamp est obtenu par la BDD
52 $article_node = new Node('article', 'i' . (string)$timestamp, [], count($node->getChildren()) + 1, $node, $node->getPage(), $article); 52 $article_node = new Node('post', 'i' . (string)$timestamp, [], count($node->getChildren()) + 1, $node, $node->getPage(), $article);
53 } 53 }
54 54
55 $entityManager->persist($article_node); 55 $entityManager->persist($article_node);
diff --git a/src/controller/PageManagementController.php b/src/controller/PageManagementController.php
index f84c528..50ce193 100644
--- a/src/controller/PageManagementController.php
+++ b/src/controller/PageManagementController.php
@@ -6,6 +6,7 @@ declare(strict_types=1);
6use App\Entity\Page; 6use App\Entity\Page;
7use App\Entity\Node; 7use App\Entity\Node;
8use App\Entity\NodeData; 8use App\Entity\NodeData;
9use App\Entity\Presentation;
9//use App\Entity\Image; 10//use App\Entity\Image;
10use Doctrine\Common\Collections\ArrayCollection; 11use Doctrine\Common\Collections\ArrayCollection;
11use Doctrine\ORM\EntityManager; 12use Doctrine\ORM\EntityManager;
@@ -136,8 +137,7 @@ class PageManagementController
136 $main = $director->getNode(); 137 $main = $director->getNode();
137 $position = count($main->getChildren()) + 1; // position dans la fraterie 138 $position = count($main->getChildren()) + 1; // position dans la fraterie
138 139
139 $blocks = ['blog', 'grid', 'calendar', 'galery', 'form']; // même liste dans FormBuilder.php 140 if(!in_array($_POST["bloc_select"], Blocks::getNameList(), true)) // 3è param: contrôle du type
140 if(!in_array($_POST["bloc_select"], $blocks, true)) // 3è param: contrôle du type
141 { 141 {
142 header("Location: " . new URL(['page' => $_GET['page'], 'error' => 'bad_bloc_type'])); 142 header("Location: " . new URL(['page' => $_GET['page'], 'error' => 'bad_bloc_type']));
143 die; 143 die;
@@ -163,7 +163,7 @@ class PageManagementController
163 $entityManager->persist($bulk_data[0]); 163 $entityManager->persist($bulk_data[0]);
164 } 164 }
165 165
166 $bloc = new Node( 166 $block = new Node(
167 $_POST["bloc_select"], 167 $_POST["bloc_select"],
168 null, [], 168 null, [],
169 $position, 169 $position,
@@ -171,9 +171,17 @@ class PageManagementController
171 $page); 171 $page);
172 $data = new NodeData( 172 $data = new NodeData(
173 ['title' => trim(htmlspecialchars($_POST["bloc_title"]))], 173 ['title' => trim(htmlspecialchars($_POST["bloc_title"]))],
174 $bloc); 174 $block);
175 175
176 $entityManager->persist($bloc); 176 // valeurs par défaut
177 if($_POST["bloc_select"] === 'post_block'){
178 $data->setPresentation($entityManager->find('App\Entity\Presentation', 1)); // pas génial l'utilisation de l'index dans la table
179 }
180 elseif($_POST["bloc_select"] === 'news_block'){
181 $data->setPresentation($entityManager->find('App\Entity\Presentation', 2));
182 }
183
184 $entityManager->persist($block);
177 $entityManager->persist($data); 185 $entityManager->persist($data);
178 $entityManager->flush(); 186 $entityManager->flush();
179 header("Location: " . new URL(['page' => $_GET['page'], 'action' => 'modif_page'])); 187 header("Location: " . new URL(['page' => $_GET['page'], 'action' => 'modif_page']));
diff --git a/src/installation.php b/src/installation.php
index 5adb697..dd3aa35 100644
--- a/src/installation.php
+++ b/src/installation.php
@@ -7,6 +7,7 @@ use App\Entity\Page;
7use App\Entity\Node; 7use App\Entity\Node;
8use App\Entity\NodeData; 8use App\Entity\NodeData;
9use App\Entity\Image; 9use App\Entity\Image;
10use App\Entity\Presentation;
10use Doctrine\Common\Collections\ArrayCollection; 11use Doctrine\Common\Collections\ArrayCollection;
11use Doctrine\ORM\EntityManager; 12use Doctrine\ORM\EntityManager;
12 13
@@ -116,6 +117,10 @@ function makeStartPage(EntityManager $entityManager){
116 $head_new_page = new Node('head', NULL, ['css_array' => ['body', 'head', 'nav', 'new_page', 'foot'], 'js_array' => ['main', 'new_page']], 1, NULL, $new_page, NULL); 117 $head_new_page = new Node('head', NULL, ['css_array' => ['body', 'head', 'nav', 'new_page', 'foot'], 'js_array' => ['main', 'new_page']], 1, NULL, $new_page, NULL);
117 $bloc_new_page = new Node('new_page', NULL, [], 1, $main, $new_page, NULL); 118 $bloc_new_page = new Node('new_page', NULL, [], 1, $main, $new_page, NULL);
118 119
120 /* -- table presentation -- */
121 $list = new Presentation('list');
122 $grid = new Presentation('grid');
123
119 /* -- table image -- */ 124 /* -- table image -- */
120 // paramètres: file_name, file_path, file_path_mini, mime_type, alt 125 // paramètres: file_name, file_path, file_path_mini, mime_type, alt
121 $favicon = new Image("favicon48x48.png", NULL, "assets/favicon48x48.png", "image/png", "favicon"); 126 $favicon = new Image("favicon48x48.png", NULL, "assets/favicon48x48.png", "image/png", "favicon");
@@ -162,6 +167,10 @@ function makeStartPage(EntityManager $entityManager){
162 $entityManager->persist($bloc_edit_menu); 167 $entityManager->persist($bloc_edit_menu);
163 $entityManager->persist($head_new_page); 168 $entityManager->persist($head_new_page);
164 $entityManager->persist($bloc_new_page); 169 $entityManager->persist($bloc_new_page);
170
171 /* -- table presentation -- */
172 $entityManager->persist($list);
173 $entityManager->persist($grid);
165 174
166 /* -- table image -- */ 175 /* -- table image -- */
167 $entityManager->persist($favicon); 176 $entityManager->persist($favicon);
diff --git a/src/model/Blocks.php b/src/model/Blocks.php
new file mode 100644
index 0000000..f6475cd
--- /dev/null
+++ b/src/model/Blocks.php
@@ -0,0 +1,38 @@
1<?php
2// src/Blocks.php
3
4class Blocks{
5 /*private array $types = ['blog', 'grid', 'calendar', 'galery', 'form'];*/
6 static private array $types = ['post_block', 'news_block', 'calendar', 'galery', 'form'];
7
8 /*private array $names = ['Blog', 'Grille', 'Calendrier', 'Galerie', 'Formulaire'];*/
9 static private array $names = ['Articles libres', 'Actualités', 'Calendrier', 'Galerie', 'Formulaire'];
10
11 static public function getNameList(): array
12 {
13 $blocks = [];
14 foreach(self::$types as $type){
15 $blocks[] = $type;
16 }
17 return $blocks;
18 }
19
20 static public function getTypeNamePairs(): array
21 {
22 $blocks = [];
23 for($i = 0; $i < count(self::$types); $i++){
24 $blocks[] = ['type' => self::$types[$i], 'name' => self::$names[$i]];
25 }
26 return $blocks;
27 }
28
29 static public function getNameFromType(string $type): string
30 {
31 for($i=0; $i < count(self::$types); $i++){
32 if(self::$types[$i] === $type){
33 return self::$names[$i];
34 }
35 }
36 return 'server side error';
37 }
38} \ No newline at end of file
diff --git a/src/model/entities/Article.php b/src/model/entities/Article.php
index 14028ec..5412497 100644
--- a/src/model/entities/Article.php
+++ b/src/model/entities/Article.php
@@ -1,5 +1,7 @@
1<?php 1<?php
2// src/model/entities/Article.php 2// src/model/entities/Article.php
3//
4// entité commune pour les "post" (articles simples) et les "news" (complexes avec titre, aperçu et contenu)
3 5
4declare(strict_types=1); 6declare(strict_types=1);
5 7
diff --git a/src/model/entities/NodeData.php b/src/model/entities/NodeData.php
index 758ccb7..c835727 100644
--- a/src/model/entities/NodeData.php
+++ b/src/model/entities/NodeData.php
@@ -24,6 +24,10 @@ class NodeData
24 #[ORM\JoinColumn(name: "node_id", referencedColumnName: "id_node", onDelete: "CASCADE")] 24 #[ORM\JoinColumn(name: "node_id", referencedColumnName: "id_node", onDelete: "CASCADE")]
25 private Node $node; 25 private Node $node;
26 26
27 #[ORM\ManyToOne(targetEntity: Presentation::class)]
28 #[ORM\JoinColumn(name: "presentation_id", referencedColumnName: "id_presentation", nullable: true)]
29 private Presentation $presentation;
30
27 #[ORM\Column(type: "json")] 31 #[ORM\Column(type: "json")]
28 private array $data; 32 private array $data;
29 33
@@ -47,6 +51,14 @@ class NodeData
47 { 51 {
48 return $this->id_node_data; 52 return $this->id_node_data;
49 } 53 }
54 public function getPresentation(): Presentation
55 {
56 return $this->presentation;
57 }
58 public function setPresentation(Presentation $presentation): void
59 {
60 $this->presentation = $presentation;
61 }
50 public function getData(): array 62 public function getData(): array
51 { 63 {
52 return $this->data; 64 return $this->data;
diff --git a/src/model/entities/Presentation.php b/src/model/entities/Presentation.php
new file mode 100644
index 0000000..73b6a6a
--- /dev/null
+++ b/src/model/entities/Presentation.php
@@ -0,0 +1,31 @@
1<?php
2// src/model/entities/Presentation.php
3
4declare(strict_types=1);
5
6namespace App\Entity;
7
8use Doctrine\ORM\Mapping as ORM;
9
10#[ORM\Entity]
11#[ORM\Table(name: TABLE_PREFIX . "presentation")]
12class Presentation
13{
14 #[ORM\Id]
15 #[ORM\GeneratedValue]
16 #[ORM\Column(type: "integer")]
17 private int $id_presentation;
18
19 #[ORM\Column(type: "string", length: 255)]
20 private string $name_presentation;
21
22 public function __construct(string $name)
23 {
24 $this->name_presentation = $name;
25 }
26
27 public function getName(): string
28 {
29 return $this->name_presentation;
30 }
31} \ No newline at end of file
diff --git a/src/view/GaleryBuilder.php b/src/view/GaleryBuilder.php
index f2dafc2..749cb30 100644
--- a/src/view/GaleryBuilder.php
+++ b/src/view/GaleryBuilder.php
@@ -54,7 +54,7 @@ class GaleryBuilder extends AbstractBuilder
54 54
55 // squelette d'un nouvel article 55 // squelette d'un nouvel article
56 ob_start(); 56 ob_start();
57 require self::VIEWS_PATH . 'article.php'; 57 require self::VIEWS_PATH . 'post.php';
58 $new_article = ob_get_clean(); 58 $new_article = ob_get_clean();
59 } 59 }
60 60
diff --git a/src/view/MainBuilder.php b/src/view/MainBuilder.php
index 889df37..d7a0dfa 100644
--- a/src/view/MainBuilder.php
+++ b/src/view/MainBuilder.php
@@ -36,13 +36,13 @@ class MainBuilder extends AbstractBuilder
36 $this->html .= $builder->render(); 36 $this->html .= $builder->render();
37 } 37 }
38 else{ 38 else{
39 // si action = "modif_page", affiche des commandes pour modifier 39 // si action = "modif_page", affiche des commandes supplémentaires
40 if($_SESSION['admin'] && self::$modif_mode){ 40 if($_SESSION['admin'] && self::$modif_mode){
41 // ajouter un contrôle du champ in_menu 41 // ajouter un contrôle du champ in_menu
42 $this->viewEditBlocks($node); 42 $this->viewEditBlocks($node);
43 } 43 }
44 44
45 // cas normal 45 // dans tous les cas
46 $this->useChildrenBuilder($node); 46 $this->useChildrenBuilder($node);
47 } 47 }
48 48
@@ -53,42 +53,18 @@ class MainBuilder extends AbstractBuilder
53 private function viewEditBlocks($node): void 53 private function viewEditBlocks($node): void
54 { 54 {
55 $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; // mode modification uniquement 55 $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; // mode modification uniquement
56 56 $blocks = Blocks::getTypeNamePairs();
57 // blocs disponibles, même liste dans post.php
58 $blocks = [ // créer une classe pour ça?
59 ['type' => 'blog', 'name' => 'Blog'],
60 ['type' => 'grid', 'name' => 'Grille'],
61 ['type' => 'calendar', 'name' => 'Calendrier'],
62 ['type' => 'galery', 'name' => 'Galerie'],
63 ['type' => 'form', 'name' => 'Formulaire']];
64
65 function getBlockName(array $blocks, string $type){ // créer une classe pour ça?
66 for($i=0; $i < count($blocks); $i++){
67 if($blocks[$i]['type'] === $type){
68 return $blocks[$i]['name'];
69 }
70 }
71 }
72 57
73 $options = ''; 58 $options = '';
74 for($i = 0; $i < count($blocks); $i++){ 59 for($i = 0; $i < count($blocks); $i++){
75 $options .= '<option value= "' . $blocks[$i]['type'] . '">' . $blocks[$i]['name'] . "</option>\n"; 60 $options .= '<option value= "' . $blocks[$i]['type'] . '">' . $blocks[$i]['name'] . "</option>\n";
76 } 61 }
77 62
78 // blabla
79 /*$this->html .= '<aside class="modif_page_explanations">
80 <p>Modification de la structure d\'une page:</p>
81 <div>
82 <p><img></p>
83 <p><img></p>
84 </div>
85 </aside>' . "\n";*/
86
87 //$page_id = Director::$page_path->getLast()->getId(); 63 //$page_id = Director::$page_path->getLast()->getId();
88 $head_node = null; 64 $head_node = null;
89 foreach(ViewController::$root_node->getChildren() as $first_level_node){ 65 foreach(ViewController::$root_node->getChildren() as $first_level_node){
90 if($first_level_node->getName() === 'head'){ 66 if($first_level_node->getName() === 'head'){
91 $head_node = $first_level_node; // normallement c'est le 1er enfant 67 $head_node = $first_level_node; // normalement c'est le 1er enfant
92 break; 68 break;
93 } 69 }
94 } 70 }
@@ -97,7 +73,7 @@ class MainBuilder extends AbstractBuilder
97 foreach($node->getChildren() as $child_node){ 73 foreach($node->getChildren() as $child_node){
98 // renommage d'un bloc 74 // renommage d'un bloc
99 $bloc_edit .= '<div id="bloc_edit_' . $child_node->getId() . '"> 75 $bloc_edit .= '<div id="bloc_edit_' . $child_node->getId() . '">
100 <p><label for="bloc_rename_' . $child_node->getId() . '"><b>' . getBlockName($blocks, $child_node->getName()) . '</b></label> 76 <p><label for="bloc_rename_' . $child_node->getId() . '"><b>' . Blocks::getNameFromType($child_node->getName()) . '</b></label>
101 <input type="text" id="bloc_rename_' . $child_node->getId() . '" name="bloc_rename_title" value="' . $child_node->getNodeData()->getdata()['title'] . '" required> 77 <input type="text" id="bloc_rename_' . $child_node->getId() . '" name="bloc_rename_title" value="' . $child_node->getNodeData()->getdata()['title'] . '" required>
102 <button onclick="renamePageBloc(' . $child_node->getId() . ')">Renommer</button>'. "\n"; 78 <button onclick="renamePageBloc(' . $child_node->getId() . ')">Renommer</button>'. "\n";
103 // déplacement d'un bloc 79 // déplacement d'un bloc
diff --git a/src/view/NewBuilder.php b/src/view/NewBuilder.php
index c410eb7..fc6ade6 100644
--- a/src/view/NewBuilder.php
+++ b/src/view/NewBuilder.php
@@ -35,21 +35,18 @@ class NewBuilder extends AbstractBuilder
35 $content = ''; 35 $content = '';
36 36
37 // page article unique 37 // page article unique
38 if(Director::$page_path->getLast()->getEndOfPath() === 'article') 38 if(Director::$page_path->getLast()->getEndOfPath() === 'article'){
39 {
40 $content = $node->getArticle()->getContent(); 39 $content = $node->getArticle()->getContent();
41 $from_to_button = '<p><a class="link_to_article" href="' . new URL(['page' => 'accueil']) . '"><button>Page<br>d\'accueil</button></a></p>'; 40 $from_to_button = '<p><a class="link_to_article" href="' . new URL(isset($_GET['from']) ? ['page' => $_GET['from']] : []) . '"><button>Page<br>précédente</button></a></p>';
42 } 41 }
43 // page d'accueil (avec des news) 42 // page d'accueil (avec des news)
44 else 43 else{
45 { 44 $from_to_button = '<p><a class="link_to_article" href="' . new URL(['page' => 'article', 'id' => $id, 'from' => CURRENT_PAGE]) . '"><button><img class="action_icon" src="assets/book-open.svg">Lire la suite</button></a></p>';
46 $from_to_button = '<p><a class="link_to_article" href="' . new URL(['page' => 'article', 'id' => $id]) . '"><button><img class="action_icon" src="assets/book-open.svg">Lire la suite</button></a></p>';
47 } 45 }
48 46
49 47
50 $date_object = $node->getArticle()->getDateTime(); // class DateTime 48 $date_object = $node->getArticle()->getDateTime(); // class DateTime
51 $date = 'le ' . str_replace(':', 'h', $date_object->format('d-m-Y à H:i')); 49 $date = 'le ' . str_replace(':', 'h', $date_object->format('d-m-Y à H:i'));
52 //$date = str_replace(':', 'h', $date_object->format('d-m-Y à H:i'));
53 50
54 // partage 51 // partage
55 $share_link = new URL(['page' => 'article', 'id' => $id]); 52 $share_link = new URL(['page' => 'article', 'id' => $id]);
diff --git a/src/view/GridBuilder.php b/src/view/NewsBlockBuilder.php
index 30a9040..eebeadb 100644
--- a/src/view/GridBuilder.php
+++ b/src/view/NewsBlockBuilder.php
@@ -1,16 +1,18 @@
1<?php 1<?php
2// src/view/GridBuilder.php 2// src/view/NewsBlockBuilder.php
3 3
4declare(strict_types=1); 4declare(strict_types=1);
5 5
6use App\Entity\Node; 6use App\Entity\Node;
7 7
8class GridBuilder extends AbstractBuilder 8class NewsBlockBuilder extends AbstractBuilder
9{ 9{
10 public function __construct(Node $node) 10 public function __construct(Node $node)
11 { 11 {
12 parent::__construct($node); 12 parent::__construct($node);
13 $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; 13
14 // à remplacer par list.php/grid.php (une vue par stratégie) le jour ou ou a besoin de les différencier
15 $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; // = news_block.php, actuellement identique à post_block.php
14 16
15 if(file_exists($viewFile)) 17 if(file_exists($viewFile))
16 { 18 {
@@ -19,24 +21,21 @@ class GridBuilder extends AbstractBuilder
19 extract($node->getNodeData()->getData()); 21 extract($node->getNodeData()->getData());
20 } 22 }
21 23
24 $presentation = $node->getNodeData()->getPresentation()->getName(); // affichage list ou grid
25
26 // exécution de la stratégie (utilisation d'une méthode ou d'une classe)
27 $section_class = $presentation;
28 $section_child_class = $presentation === 'grid' ? 'grid_columns' : '';
29
22 // ajouter un article 30 // ajouter un article
23 $new_article = ''; 31 $new_article = '';
24 if($_SESSION['admin']) 32 if($_SESSION['admin'])
25 { 33 {
26 $id = 'n' . $this->id_node; 34 $id = 'n' . $this->id_node;
27 $js = 'onclick="openEditor(\'' . $id . '\')"';
28 35
29 $share_button = '<p class="share hidden"><img class="action_icon" src="assets/share.svg"></p>'; 36 $share_button = '<p class="share hidden"><img class="action_icon" src="assets/share.svg"></p>';
30 $html = '';
31 37
32 if(Director::$page_path->getLast()->getEndOfPath() === 'accueil'){ 38 $new_button = '<p><a class="link_to_article" href="' . new URL(['page' => 'article', 'id' => $id]) . '"><button><img class="action_icon" src="assets/edit.svg">Nouvel article</button></a></p>';
33 $new_button = '<p><a class="link_to_article" href="' . new URL(['page' => 'article', 'id' => $id]) . '">
34 <button><img class="action_icon" src="assets/edit.svg">Nouvel article</button></a></p>';
35 }
36 else{
37 $new_button = '<p id="new-' . $id . '">' . "\n" .
38 '<button ' . $js . '><img class="action_icon" src="assets/edit.svg">Nouvel article</button></p>';
39 }
40 39
41 $modify_js = 'onclick="openEditor(\'' . $id . '\')"'; 40 $modify_js = 'onclick="openEditor(\'' . $id . '\')"';
42 $modify_article = '<p id="edit-' . $id . '" class="hidden"><img class="action_icon" src="assets/edit.svg" ' . $modify_js . '></p>' . "\n"; 41 $modify_article = '<p id="edit-' . $id . '" class="hidden"><img class="action_icon" src="assets/edit.svg" ' . $modify_js . '></p>' . "\n";
@@ -56,11 +55,12 @@ class GridBuilder extends AbstractBuilder
56 $submit_js = 'onclick="submitArticle(\'' . $id . '\', \'\', clone' . $this->id_node . ')"'; 55 $submit_js = 'onclick="submitArticle(\'' . $id . '\', \'\', clone' . $this->id_node . ')"';
57 $submit_article = '<p id="submit-' . $id . '" class="hidden"><button ' . $submit_js . '>Valider</button></p>'; 56 $submit_article = '<p id="submit-' . $id . '" class="hidden"><button ' . $submit_js . '>Valider</button></p>';
58 57
58 $html = '';
59 $admin_buttons = $new_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article; 59 $admin_buttons = $new_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article;
60 60
61 // squelette d'un nouvel article 61 // post vide mis là pour le bouton "Nouvel article" => déplace vers page "article"
62 ob_start(); 62 ob_start();
63 require self::VIEWS_PATH . 'article.php'; 63 require self::VIEWS_PATH . 'post.php'; // nécéssite $admin_buttons et $html
64 $new_article = ob_get_clean(); 64 $new_article = ob_get_clean();
65 } 65 }
66 66
diff --git a/src/view/BlogBuilder.php b/src/view/PostBlockBuilder.php
index d646d5f..fadae31 100644
--- a/src/view/BlogBuilder.php
+++ b/src/view/PostBlockBuilder.php
@@ -1,16 +1,19 @@
1<?php 1<?php
2// src/view/BlogBuilder.php 2// src/view/PostBlockBuilder.php
3 3
4declare(strict_types=1); 4declare(strict_types=1);
5 5
6use App\Entity\Node; 6use App\Entity\Node;
7 7
8class BlogBuilder extends AbstractBuilder 8class PostBlockBuilder extends AbstractBuilder
9{ 9{
10 public function __construct(Node $node) 10 public function __construct(Node $node)
11 { 11 {
12 parent::__construct($node); 12 parent::__construct($node);
13 $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; 13
14 // à remplacer par list.php/grid.php (une vue par stratégie) le jour ou ou a besoin de les différencier
15 //$viewFile = self::VIEWS_PATH . $node->getName() . '.php';
16 $viewFile = self::VIEWS_PATH . 'post_block.php'; // actuellement identique à news_block.php
14 17
15 if(file_exists($viewFile)) 18 if(file_exists($viewFile))
16 { 19 {
@@ -19,18 +22,21 @@ class BlogBuilder extends AbstractBuilder
19 extract($node->getNodeData()->getData()); 22 extract($node->getNodeData()->getData());
20 } 23 }
21 24
25 $presentation = $node->getNodeData()->getPresentation()->getName(); // affichage list ou grid
26
27 // exécution de la stratégie (utilisation d'une méthode ou d'une classe)
28 $section_class = $presentation;
29 $section_child_class = $presentation === 'grid' ? 'grid_columns' : '';
30
22 // ajouter un article 31 // ajouter un article
23 $new_article = ''; 32 $new_article = '';
24 if($_SESSION['admin']) 33 if($_SESSION['admin'])
25 { 34 {
26 $id = 'n' . $this->id_node; 35 $id = 'n' . $this->id_node;
27 $js = 'onclick="openEditor(\'' . $id . '\')"';
28 36
29 $share_button = '<p class="share hidden"><img class="action_icon" src="assets/share.svg"></p>'; 37 $share_button = '<p class="share hidden"><img class="action_icon" src="assets/share.svg"></p>';
30 $html = ''; 38
31 39 $new_button = '<p id="new-' . $id . '">' . "\n" . '<button onclick="openEditor(\'' . $id . '\')"><img class="action_icon" src="assets/edit.svg">Nouvel article</button></p>';
32 $new_button = '<p id="new-' . $id . '">' . "\n" .
33 '<button ' . $js . '><img class="action_icon" src="assets/edit.svg">Nouvel article</button></p>';
34 40
35 $modify_js = 'onclick="openEditor(\'' . $id . '\')"'; 41 $modify_js = 'onclick="openEditor(\'' . $id . '\')"';
36 $modify_article = '<p id="edit-' . $id . '" class="hidden"><img class="action_icon" src="assets/edit.svg" ' . $modify_js . '></p>' . "\n"; 42 $modify_article = '<p id="edit-' . $id . '" class="hidden"><img class="action_icon" src="assets/edit.svg" ' . $modify_js . '></p>' . "\n";
@@ -50,11 +56,12 @@ class BlogBuilder extends AbstractBuilder
50 $submit_js = 'onclick="submitArticle(\'' . $id . '\', \'\', clone' . $this->id_node . ')"'; 56 $submit_js = 'onclick="submitArticle(\'' . $id . '\', \'\', clone' . $this->id_node . ')"';
51 $submit_article = '<p id="submit-' . $id . '" class="hidden"><button ' . $submit_js . '>Valider</button></p>'; 57 $submit_article = '<p id="submit-' . $id . '" class="hidden"><button ' . $submit_js . '>Valider</button></p>';
52 58
59 $html = '';
53 $admin_buttons = $new_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article; 60 $admin_buttons = $new_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article;
54 61
55 // squelette d'un nouvel article 62 // squelette d'un nouvel article
56 ob_start(); 63 ob_start();
57 require self::VIEWS_PATH . 'article.php'; 64 require self::VIEWS_PATH . 'post.php';
58 $new_article = ob_get_clean(); 65 $new_article = ob_get_clean();
59 } 66 }
60 67
diff --git a/src/view/ArticleBuilder.php b/src/view/PostBuilder.php
index 3b9de87..03a6990 100644
--- a/src/view/ArticleBuilder.php
+++ b/src/view/PostBuilder.php
@@ -1,11 +1,11 @@
1<?php 1<?php
2// src/view/ArticleBuilder.php 2// src/view/PostBuilder.php
3 3
4declare(strict_types=1); 4declare(strict_types=1);
5 5
6use App\Entity\Node; 6use App\Entity\Node;
7 7
8class ArticleBuilder extends AbstractBuilder 8class PostBuilder extends AbstractBuilder
9{ 9{
10 public function __construct(Node $node) 10 public function __construct(Node $node)
11 { 11 {
diff --git a/src/view/templates/blog.php b/src/view/templates/news_block.php
index dfb65b5..d88d780 100644
--- a/src/view/templates/blog.php
+++ b/src/view/templates/news_block.php
@@ -1,11 +1,11 @@
1<?php declare(strict_types=1); ?> 1<?php declare(strict_types=1); ?>
2<section class="blog" id="<?= $this->id_node ?>"> 2<section class="<?= $section_class ?>" id="<?= $this->id_node ?>">
3 <h3><?= $title ?></h3> 3 <h3><?= $title ?></h3>
4<?= $new_article ?> 4<?= $new_article ?>
5 <script> 5 <script>
6 var clone<?= $this->id_node ?> = document.currentScript.previousElementSibling.cloneNode(true); 6 var clone<?= $this->id_node ?> = document.currentScript.previousElementSibling.cloneNode(true);
7 </script> 7 </script>
8 <div> 8 <div class="<?= $section_child_class ?>">
9<?= $content ?> 9<?= $content ?>
10 </div> 10 </div>
11</section> \ No newline at end of file 11</section> \ No newline at end of file
diff --git a/src/view/templates/article.php b/src/view/templates/post.php
index 5cf35c2..5cf35c2 100644
--- a/src/view/templates/article.php
+++ b/src/view/templates/post.php
diff --git a/src/view/templates/grid.php b/src/view/templates/post_block.php
index 71c052b..d88d780 100644
--- a/src/view/templates/grid.php
+++ b/src/view/templates/post_block.php
@@ -1,11 +1,11 @@
1<?php declare(strict_types=1); ?> 1<?php declare(strict_types=1); ?>
2<section class="grid" id="<?= $this->id_node ?>"> 2<section class="<?= $section_class ?>" id="<?= $this->id_node ?>">
3 <h3><?= $title ?></h3> 3 <h3><?= $title ?></h3>
4<?= $new_article ?> 4<?= $new_article ?>
5 <script> 5 <script>
6 var clone<?= $this->id_node ?> = document.currentScript.previousElementSibling.cloneNode(true); 6 var clone<?= $this->id_node ?> = document.currentScript.previousElementSibling.cloneNode(true);
7 </script> 7 </script>
8 <div class="grid_columns"> 8 <div class="<?= $section_child_class ?>">
9<?= $content ?> 9<?= $content ?>
10 </div> 10 </div>
11</section> \ No newline at end of file 11</section> \ No newline at end of file