aboutsummaryrefslogtreecommitdiff
path: root/src/view
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-09-01 18:52:17 +0200
committerpolo <ordipolo@gmx.fr>2025-09-01 18:52:17 +0200
commitf477314613beb26b0ce4c61ec0b1900df1de1cb1 (patch)
treed41ace78a572a11887e7cfa2611c3f02fb04e51c /src/view
parente642cd51d7e8599537f8514bef8d5d16096dddf8 (diff)
downloadcms-f477314613beb26b0ce4c61ec0b1900df1de1cb1.zip
renommage des présentations,modif présentation des blocs et largeur min (donc nb de colonnes) en mode grid, corrections de bugs et erreurs 404, le param page_modif n'est plus une action, légère symfonyfication du routeur
Diffstat (limited to 'src/view')
-rw-r--r--src/view/FooterBuilder.php29
-rw-r--r--src/view/MainBuilder.php63
-rw-r--r--src/view/NewBuilder.php13
-rw-r--r--src/view/NewsBlockBuilder.php11
-rw-r--r--src/view/PostBlockBuilder.php11
-rw-r--r--src/view/templates/modify_page.php (renamed from src/view/templates/main.php)6
-rw-r--r--src/view/templates/news_block.php2
-rw-r--r--src/view/templates/post_block.php2
8 files changed, 97 insertions, 40 deletions
diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php
index eda5be1..cf88476 100644
--- a/src/view/FooterBuilder.php
+++ b/src/view/FooterBuilder.php
@@ -24,21 +24,16 @@ class FooterBuilder extends AbstractBuilder
24 24
25 // zone admin 25 // zone admin
26 $empty_admin_zone = ''; 26 $empty_admin_zone = '';
27 //$zone_admin = '';
28 if($_SESSION['admin']) 27 if($_SESSION['admin'])
29 { 28 {
30 $empty_admin_zone = 'empty_admin_zone'; 29 $empty_admin_zone = 'empty_admin_zone';
31 $link_edit_page = CURRENT_PAGE === 'article' ? new URL(['page' => 'accueil']) : new URL(['page' => CURRENT_PAGE]);
32 if(MainBuilder::$modif_mode){ 30 if(MainBuilder::$modif_mode){
33 $mode = 'modification de page'; 31 $mode = 'modification de page';
34 $div_admin = 'logged_in modif_mode'; 32 $div_admin = 'logged_in modif_mode';
35 $link_edit_label = 'Sortir du mode modification';
36 } 33 }
37 else{ 34 else{
38 $mode = 'administrateur'; 35 $mode = 'administrateur';
39 $div_admin = 'logged_in'; 36 $div_admin = 'logged_in';
40 $link_edit_page->addParams(['action' => 'modif_page']);
41 $link_edit_label = 'Modifier la page';
42 } 37 }
43 $link_new_page = new URL(['page' => 'nouvelle_page']); 38 $link_new_page = new URL(['page' => 'nouvelle_page']);
44 $link_change_paths = new URL(['page' => 'menu_chemins']); 39 $link_change_paths = new URL(['page' => 'menu_chemins']);
@@ -51,9 +46,9 @@ class FooterBuilder extends AbstractBuilder
51 46
52 $zone_admin = '<div class="admin_buttons_zone"> 47 $zone_admin = '<div class="admin_buttons_zone">
53 <p>Vous êtes en mode ' . $mode . ".</p>\n" . 48 <p>Vous êtes en mode ' . $mode . ".</p>\n" .
54 '<div><a href="' . $link_new_page . '"><button>Nouvelle page</button></a></div>' . "\n" . 49 '<div><a href="' . $link_new_page . '"><button>Nouvelle page</button></a></div>' . "\n";
55 '<div><a href="' . $link_edit_page . '"><button>' . $link_edit_label . '</button></a></div>' . "\n" . 50 $zone_admin .= $this->makePageModifModeButton();
56 '<div><a href="' . $link_change_paths . '"><button>Menu et chemins</button></a></div>' . "\n" . 51 $zone_admin .= '<div><a href="' . $link_change_paths . '"><button>Menu et chemins</button></a></div>' . "\n" .
57 '<div><a href="' . $link_change_password . '"><button>Mon compte</button></a></div>' . "\n" . 52 '<div><a href="' . $link_change_password . '"><button>Mon compte</button></a></div>' . "\n" .
58 '<div><a href="' . $link_logout . '"><button>Déconnexion</button></a></div>' . "\n" . 53 '<div><a href="' . $link_logout . '"><button>Déconnexion</button></a></div>' . "\n" .
59 '</div>' . "\n"; 54 '</div>' . "\n";
@@ -73,4 +68,22 @@ class FooterBuilder extends AbstractBuilder
73 $this->html = ob_get_clean(); 68 $this->html = ob_get_clean();
74 } 69 }
75 } 70 }
71
72 private function makePageModifModeButton(): string
73 {
74 $link_edit_page = new URL(['page' => CURRENT_PAGE]);
75 if(CURRENT_PAGE !== 'article'){
76 if(MainBuilder::$modif_mode){
77 $link_edit_label = 'Sortir du mode modification';
78 }
79 else{
80 $link_edit_page->addParams(['mode' => 'page_modif']);
81 $link_edit_label = 'Modifier la page';
82 }
83 return '<div><a href="' . $link_edit_page . '"><button>' . $link_edit_label . '</button></a></div>' . "\n";
84 }
85 else{
86 return '';
87 }
88 }
76} \ No newline at end of file 89} \ No newline at end of file
diff --git a/src/view/MainBuilder.php b/src/view/MainBuilder.php
index d7a0dfa..fc80cd1 100644
--- a/src/view/MainBuilder.php
+++ b/src/view/MainBuilder.php
@@ -5,10 +5,11 @@ declare(strict_types=1);
5 5
6use App\Entity\Article; 6use App\Entity\Article;
7use App\Entity\Node; 7use App\Entity\Node;
8use App\Entity\Presentation;
8 9
9class MainBuilder extends AbstractBuilder 10class MainBuilder extends AbstractBuilder
10{ 11{
11 static bool $modif_mode = false; 12 static public bool $modif_mode = false;
12 13
13 public function __construct(Node $node) 14 public function __construct(Node $node)
14 { 15 {
@@ -52,7 +53,8 @@ class MainBuilder extends AbstractBuilder
52 // mode modification de page uniquement 53 // mode modification de page uniquement
53 private function viewEditBlocks($node): void 54 private function viewEditBlocks($node): void
54 { 55 {
55 $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; // mode modification uniquement 56 //$viewFile = self::VIEWS_PATH . $node->getName() . '.php'; // mode modification uniquement
57 $viewFile = self::VIEWS_PATH . 'modify_page.php'; // mode modification uniquement
56 $blocks = Blocks::getTypeNamePairs(); 58 $blocks = Blocks::getTypeNamePairs();
57 59
58 $options = ''; 60 $options = '';
@@ -71,25 +73,62 @@ class MainBuilder extends AbstractBuilder
71 73
72 $bloc_edit = ''; 74 $bloc_edit = '';
73 foreach($node->getChildren() as $child_node){ 75 foreach($node->getChildren() as $child_node){
76 // mettre tout ça dans une vue modify_block.php
77 // => pourrait être déplacé au niveau des articles
78
74 // renommage d'un bloc 79 // renommage d'un bloc
75 $bloc_edit .= '<div id="bloc_edit_' . $child_node->getId() . '"> 80 $bloc_edit .= '<div class="modify_one_block" id="bloc_edit_' . $child_node->getId() . '">
76 <p><label for="bloc_rename_' . $child_node->getId() . '"><b>' . Blocks::getNameFromType($child_node->getName()) . '</b></label> 81 <div class="block_options">
77 <input type="text" id="bloc_rename_' . $child_node->getId() . '" name="bloc_rename_title" value="' . $child_node->getNodeData()->getdata()['title'] . '" required> 82 <label for="bloc_rename_' . $child_node->getId() . '">Type <b>' . Blocks::getNameFromType($child_node->getName()) . '</b></label>
78 <button onclick="renamePageBloc(' . $child_node->getId() . ')">Renommer</button>'. "\n"; 83 <p>
84 <input type="text" id="bloc_rename_' . $child_node->getId() . '" name="bloc_rename_title" value="' . $child_node->getNodeData()->getdata()['title'] . '" required>
85 <button onclick="renamePageBloc(' . $child_node->getId() . ')">Renommer</button>
86 </p>'. "\n";
79 // déplacement d'un bloc 87 // déplacement d'un bloc
80 $bloc_edit .= '<img class="action_icon" onclick="switchBlocsPositions(' . $child_node->getId() . ', \'up\', \'' . CURRENT_PAGE . '\')" src="assets/arrow-up.svg"> 88 $bloc_edit .= '<div style="display: flex; flex-wrap: wrap;">
81 <img class="action_icon" onclick="switchBlocsPositions(' . $child_node->getId() . ', \'down\', \'' . CURRENT_PAGE . '\')" src="assets/arrow-down.svg">' . "\n"; 89 <p>
90 <img class="action_icon" onclick="switchBlocsPositions(' . $child_node->getId() . ', \'up\', \'' . CURRENT_PAGE . '\')" src="assets/arrow-up.svg">
91 <img class="action_icon" onclick="switchBlocsPositions(' . $child_node->getId() . ', \'down\', \'' . CURRENT_PAGE . '\')" src="assets/arrow-down.svg">
92 </p>' . "\n";
82 // suppression d'un bloc 93 // suppression d'un bloc
83 $bloc_edit .= '<form method="post" action="' . new URL(['page' => CURRENT_PAGE]) . '"> 94 $bloc_edit .= '<form method="post" action="' . new URL(['page' => CURRENT_PAGE]) . '">
84 <input type="hidden" name="delete_bloc_id" value="' . $child_node->getId() . '"> 95 <input type="hidden" name="delete_bloc_id" value="' . $child_node->getId() . '">
85 <input type="hidden" name="delete_bloc_hidden"> 96 <input type="hidden" name="delete_bloc_hidden">
86 <input type="submit" value="Supprimer" onclick="return confirm(\'Voulez-vous vraiment supprimer ce bloc?\');"></p> 97 <input type="submit" value="Supprimer" onclick="return confirm(\'Voulez-vous vraiment supprimer ce bloc?\');">
87 </form> 98 </form>
99 </div>
88 </div>'. "\n"; 100 </div>'. "\n";
101 if($child_node->getNodeData()->getPresentation() !== null){
102 // select mode de présentation
103 $bloc_edit .= '<div class="grid_options"><p>
104 <label for="presentation_select_' . $child_node->getId() . '">Présentation</label>
105 <select id="presentation_select_' . $child_node->getId() . '" onchange="changePresentation(' . $child_node->getId() . ')">';
106 $bloc_edit .= $this->makePresentationOptions($child_node->getNodeData()->getPresentation()->getName());
107 $bloc_edit .= '</select>';
108 // select largeur minimale colonnes mode grid
109 $bloc_edit .= '<div id="cols_min_width_edit_' . $child_node->getId() . '" class="' . ($child_node->getNodeData()->getPresentation()->getName() === 'grid' ? '' : 'hidden') . '">
110 <label for="cols_min_width_select_' . $child_node->getId() . '">Largeur minimum </label>';
111 $bloc_edit .= '<input type="number" id="cols_min_width_select_' . $child_node->getId() . '" onchange="changeColsMinWidth(' . $child_node->getId() . ')" min="150" max="400" value="' . $child_node->getNodeData()->getColsMinWidth() . '">';
112 /*$bloc_edit .= '<select id="cols_min_width_select_' . $child_node->getId() . '" onchange="changeColsMinWidth(' . $child_node->getId() . ')">'
113 . $this->makeColsMinWidthOptions($child_node->getNodeData()->getColsMinWidth())
114 . '</select>';*/
115 $bloc_edit .= ' pixels</div>
116 </div>';
117 }
118 $bloc_edit .= "</div>\n";
89 } 119 }
90 120
91 ob_start(); 121 ob_start();
92 require $viewFile; 122 require $viewFile;
93 $this->html .= ob_get_clean(); 123 $this->html .= ob_get_clean();
94 } 124 }
125
126 private function makePresentationOptions(string $presentation): string
127 {
128 $options = '';
129 foreach(Presentation::$option_list as $key => $value){
130 $options .= '<option value="' . $key . '" ' . ($presentation === $key ? 'selected' : '') . '>' . $value . '</option>';
131 }
132 return $options;
133 }
95} \ No newline at end of file 134} \ No newline at end of file
diff --git a/src/view/NewBuilder.php b/src/view/NewBuilder.php
index 2d30d32..2d66238 100644
--- a/src/view/NewBuilder.php
+++ b/src/view/NewBuilder.php
@@ -7,6 +7,8 @@ use App\Entity\Node;
7 7
8class NewBuilder extends AbstractBuilder 8class NewBuilder extends AbstractBuilder
9{ 9{
10 static public bool $new_article_mode = false;
11
10 public function __construct(Node $node, ) 12 public function __construct(Node $node, )
11 { 13 {
12 $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; 14 $viewFile = self::VIEWS_PATH . $node->getName() . '.php';
@@ -39,7 +41,6 @@ class NewBuilder extends AbstractBuilder
39 $content = $node->getArticle()->getContent(); 41 $content = $node->getArticle()->getContent();
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 $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>';
41 } 43 }
42 // page d'accueil (avec des news)
43 else{ 44 else{
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>'; 45 $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>';
45 } 46 }
@@ -101,7 +102,7 @@ class NewBuilder extends AbstractBuilder
101 $date_buttons = '<div class="button_zone">' . $modify_date . $close_editor_date . $submit_date . '</div>'; 102 $date_buttons = '<div class="button_zone">' . $modify_date . $close_editor_date . $submit_date . '</div>';
102 103
103 // mode nouvel article 104 // mode nouvel article
104 if($_GET['id'][0] != 'i'){ 105 if(self::$new_article_mode){
105 $delete_article = ''; 106 $delete_article = '';
106 // valider la création d'un nouvel article 107 // valider la création d'un nouvel article
107 $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"'; 108 $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"';
@@ -109,8 +110,7 @@ class NewBuilder extends AbstractBuilder
109 } 110 }
110 // mode article existant 111 // mode article existant
111 else{ 112 else{
112 // supprimer article existant 113 $url = new URL(['action' => 'delete_article', 'id' => $_GET['id'], 'from' => $_GET['from'] ?? '']);
113 $url = new URL(['action' => 'delete_article', 'id' => $_GET['id'], 'from' => $_GET['from']]);
114 $delete_article = '<form id="delete-' . $id . '" method="post" onsubmit="return confirm(\'Voulez-vous vraiment supprimer cet article ?\');" action="' . $url . '"> 114 $delete_article = '<form id="delete-' . $id . '" method="post" onsubmit="return confirm(\'Voulez-vous vraiment supprimer cet article ?\');" action="' . $url . '">
115 <p><button type="submit"> 115 <p><button type="submit">
116 <img class="action_icon" src="assets/delete-bin.svg"> 116 <img class="action_icon" src="assets/delete-bin.svg">
@@ -122,7 +122,7 @@ class NewBuilder extends AbstractBuilder
122 122
123 $admin_buttons = $delete_article . $from_to_button . $submit_article; 123 $admin_buttons = $delete_article . $from_to_button . $submit_article;
124 } 124 }
125 // page d'accueil 125 // autre page
126 else{ 126 else{
127 $modify_article = '<p id="edit-' . $id . '"></p>' . "\n"; 127 $modify_article = '<p id="edit-' . $id . '"></p>' . "\n";
128 128
@@ -143,6 +143,9 @@ class NewBuilder extends AbstractBuilder
143 $admin_buttons = $from_to_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article; 143 $admin_buttons = $from_to_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article;
144 } 144 }
145 } 145 }
146 else{
147 $admin_buttons = $from_to_button;
148 }
146 149
147 ob_start(); 150 ob_start();
148 require($viewFile); 151 require($viewFile);
diff --git a/src/view/NewsBlockBuilder.php b/src/view/NewsBlockBuilder.php
index 6b54196..861949a 100644
--- a/src/view/NewsBlockBuilder.php
+++ b/src/view/NewsBlockBuilder.php
@@ -21,11 +21,12 @@ class NewsBlockBuilder extends AbstractBuilder
21 extract($node->getNodeData()->getData()); 21 extract($node->getNodeData()->getData());
22 } 22 }
23 23
24 $presentation = $node->getNodeData()->getPresentation()->getName(); // affichage list ou grid 24 // stratégie d'affichage du contenu (utilisation de méthodes ou de classe List, GridPresentation, etc)
25 25 $section_class = $node->getNodeData()->getPresentation()->getName(); // = list, grid , mosaic ou carousel
26 // exécution de la stratégie (utilisation de méthodes ou de classe List, Grid, CarouselPresentation) 26 if($section_class === 'grid'){
27 $section_class = $presentation; 27 $min_width = (string)$node->getNodeData()->getColsMinWidth();
28 $section_child_class = $presentation === 'grid' ? 'grid_columns' : ''; 28 $cols_min_width = 'grid-template-columns: repeat(auto-fit, minmax(' . $min_width . 'px, 1fr));';
29 }
29 30
30 // ajouter un article 31 // ajouter un article
31 $new_article = ''; 32 $new_article = '';
diff --git a/src/view/PostBlockBuilder.php b/src/view/PostBlockBuilder.php
index 6ec91f7..8ad0498 100644
--- a/src/view/PostBlockBuilder.php
+++ b/src/view/PostBlockBuilder.php
@@ -21,11 +21,12 @@ class PostBlockBuilder extends AbstractBuilder
21 extract($node->getNodeData()->getData()); 21 extract($node->getNodeData()->getData());
22 } 22 }
23 23
24 $presentation = $node->getNodeData()->getPresentation()->getName(); // affichage list ou grid 24 // stratégie d'affichage du contenu (utilisation de méthodes ou de classe List, GridPresentation, etc)
25 25 $section_class = $node->getNodeData()->getPresentation()->getName(); // = list, grid , mosaic ou carousel
26 // exécution de la stratégie (utilisation de méthodes ou de classe List, Grid, CarouselPresentation) 26 if($section_class === 'grid'){
27 $section_class = $presentation; 27 $min_width = (string)$node->getNodeData()->getColsMinWidth();
28 $section_child_class = $presentation === 'grid' ? 'grid_columns' : ''; 28 $cols_min_width = 'grid-template-columns: repeat(auto-fit, minmax(' . $min_width . 'px, 1fr));';
29 }
29 30
30 // ajouter un article 31 // ajouter un article
31 $new_article = ''; 32 $new_article = '';
diff --git a/src/view/templates/main.php b/src/view/templates/modify_page.php
index 48ada5f..5ab1a95 100644
--- a/src/view/templates/main.php
+++ b/src/view/templates/modify_page.php
@@ -31,8 +31,8 @@
31 <input type="submit" value="Supprimer" onclick="return confirm('Voulez-vous vraiment supprimer cette page?');"> 31 <input type="submit" value="Supprimer" onclick="return confirm('Voulez-vous vraiment supprimer cette page?');">
32 </form> 32 </form>
33 </div> 33 </div>
34 <div class="edit_bloc_zone"> 34 <div class="edit_block_zone">
35 <div class="new_bloc"> 35 <div class="new_block">
36 <p>Ajouter un bloc de page</p> 36 <p>Ajouter un bloc de page</p>
37 <form method="post" action="<?= new URL(['page' => CURRENT_PAGE]) ?>"> 37 <form method="post" action="<?= new URL(['page' => CURRENT_PAGE]) ?>">
38 <p><label for="bloc_title">Titre</label> 38 <p><label for="bloc_title">Titre</label>
@@ -45,7 +45,7 @@
45 <input type="submit" value="Valider"></p> 45 <input type="submit" value="Valider"></p>
46 </form> 46 </form>
47 </div> 47 </div>
48 <div class="modify_bloc"> 48 <div class="modify_block">
49 <p>Modifier un bloc</p> 49 <p>Modifier un bloc</p>
50 <?= $bloc_edit ?> 50 <?= $bloc_edit ?>
51 </div> 51 </div>
diff --git a/src/view/templates/news_block.php b/src/view/templates/news_block.php
index d88d780..9d01513 100644
--- a/src/view/templates/news_block.php
+++ b/src/view/templates/news_block.php
@@ -5,7 +5,7 @@
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="<?= $section_child_class ?>"> 8 <div class="section_child" style="<?= $cols_min_width ?>">
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/post_block.php b/src/view/templates/post_block.php
index d88d780..9d01513 100644
--- a/src/view/templates/post_block.php
+++ b/src/view/templates/post_block.php
@@ -5,7 +5,7 @@
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="<?= $section_child_class ?>"> 8 <div class="section_child" style="<?= $cols_min_width ?>">
9<?= $content ?> 9<?= $content ?>
10 </div> 10 </div>
11</section> \ No newline at end of file 11</section> \ No newline at end of file