summaryrefslogtreecommitdiff
path: root/src/view
diff options
context:
space:
mode:
Diffstat (limited to 'src/view')
-rw-r--r--src/view/FooterBuilder.php2
-rw-r--r--src/view/HeaderBuilder.php2
-rw-r--r--src/view/MenuBuilder.php88
-rw-r--r--src/view/NavBuilder.php9
-rw-r--r--src/view/templates/header.php2
-rw-r--r--src/view/templates/menu.php15
6 files changed, 114 insertions, 4 deletions
diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php
index 49da71c..5a7748f 100644
--- a/src/view/FooterBuilder.php
+++ b/src/view/FooterBuilder.php
@@ -29,7 +29,7 @@ class FooterBuilder extends AbstractBuilder
29 $empty_admin_zone = 'empty_admin_zone'; 29 $empty_admin_zone = 'empty_admin_zone';
30 $link_edit_page = new URL(['page' => CURRENT_PAGE, 'action' => 'modif_page']); 30 $link_edit_page = new URL(['page' => CURRENT_PAGE, 'action' => 'modif_page']);
31 $link_new_page = new URL(['from' => CURRENT_PAGE, 'page' => 'nouvelle_page']); 31 $link_new_page = new URL(['from' => CURRENT_PAGE, 'page' => 'nouvelle_page']);
32 $link_change_paths = new URL(['from' => CURRENT_PAGE, 'page' => 'menu_chemins']); 32 $link_change_paths = new URL(['page' => 'menu_chemins']);
33 33
34 $link_change_password = new URL(['from' => CURRENT_PAGE, 'action' => 'modif_mdp']); 34 $link_change_password = new URL(['from' => CURRENT_PAGE, 'action' => 'modif_mdp']);
35 isset($_GET['id']) ? $link_change_password->addParams(['id' => $_GET['id']]) : ''; 35 isset($_GET['id']) ? $link_change_password->addParams(['id' => $_GET['id']]) : '';
diff --git a/src/view/HeaderBuilder.php b/src/view/HeaderBuilder.php
index eef2663..28aae13 100644
--- a/src/view/HeaderBuilder.php
+++ b/src/view/HeaderBuilder.php
@@ -16,7 +16,9 @@ class HeaderBuilder extends AbstractBuilder
16 { 16 {
17 if($child->getName() === 'nav'){ 17 if($child->getName() === 'nav'){
18 $this->nav = $child; 18 $this->nav = $child;
19 // actuellement le noeud nav ne contient aucune info utile et l'envoyer à NavBuilder est inutile
19 $nav_builder = new NavBuilder($this->nav); 20 $nav_builder = new NavBuilder($this->nav);
21
20 $nav = $nav_builder->render(); 22 $nav = $nav_builder->render();
21 } 23 }
22 elseif($child->getName() === 'breadcrumb'){ 24 elseif($child->getName() === 'breadcrumb'){
diff --git a/src/view/MenuBuilder.php b/src/view/MenuBuilder.php
new file mode 100644
index 0000000..0fcfbe5
--- /dev/null
+++ b/src/view/MenuBuilder.php
@@ -0,0 +1,88 @@
1<?php
2// src/view/MenuBuilder.php
3//
4// page Menu et chemins en mode admin
5
6use App\Entity\Node;
7use App\Entity\Page;
8
9class MenuBuilder extends AbstractBuilder
10{
11 private int $margin_left_multiplier = 29;
12
13 public function __construct(Node $node)
14 {
15 parent::__construct($node);
16 $viewFile = self::VIEWS_PATH . $node->getName() . '.php';
17
18 if(file_exists($viewFile))
19 {
20 /*if(!empty($node->getNodeData()->getData()))
21 {
22 extract($node->getNodeData()->getData());
23 }*/
24
25 // ajouter un article
26 $new_article = '';
27 if($_SESSION['admin'])
28 {
29 $this->unfoldMenu(Director::$menu_data, 0 - $this->margin_left_multiplier);
30 }
31 else{
32 header('Location: ' . new URL);
33 die;
34 }
35
36 ob_start();
37 require $viewFile;
38 $this->html = ob_get_clean(); // pas de concaténation ici, on écrase
39 }
40 }
41
42 private function unfoldMenu(Page $menu, int $margin_left): void
43 {
44 $margin_left += $this->margin_left_multiplier;
45 $this->html .= '<div class="level">' . "\n";
46
47 foreach($menu->getChildren() as $entry)
48 {
49 $div_style = 'margin-left: ' . $margin_left . 'px;';
50 $checked = $entry->IsInMenu() ? 'checked' : '';
51 $this->html .= '<div id="' . $entry->getId() . '" style="' . $div_style . '">
52 <img class="move_entry_icon" onclick="" src="assets/arrow-left.svg">
53 <img class="move_entry_icon" onclick="" src="assets/arrow-right.svg">
54 <img class="move_entry_icon" onclick="switchMenuPositions(' . $entry->getId() . ', \'up\')" src="assets/arrow-up.svg">
55 <img class="move_entry_icon" onclick="switchMenuPositions(' . $entry->getId() . ', \'down\')" src="assets/arrow-down.svg">
56 <span class="menu_entry_checkbox">
57 <input type="checkbox" ' . $checked . ' onclick="checkMenuEntry(' . $entry->getId() . ')">
58 </span>
59 <button>' . $entry->getPageName() . '</button>';
60
61 if(str_starts_with($entry->getEndOfPath(), 'http')){
62 $this->html .= '<span id="edit-i..."><img class="move_entry_icon" src="assets/edit.svg" onclick="openEditor(\'i...\')"></span>
63 <i>' . $entry->getEndOfPath() . '</i>
64 <span id="delete-i..."><img class="move_entry_icon" src="assets/delete-bin.svg" onclick="delete(\'i...\')"></span>';
65 }
66 else{
67 $this->html .= '<i>' . $entry->getPagePath() . '</i>';
68 }
69
70
71 // supprimer me label "visible" et griser le texte et bouton en JS à la place
72
73 /*
74 => flèche gauche: position = position du parent + 1, parent = grand-parent, recalculer les positions
75 => flèche droite: position = nombre d'éléments de la fraterie + 1, l'élément précédent devient le parent
76 => flèches haut et bas: inversement de position, comme pour les noeuds, mais dans la table page
77 => checkbox: in_menu ^= 1
78 */
79
80 if(count($entry->getChildren()) > 0){
81 $this->unfoldMenu($entry, $margin_left);
82 }
83 $this->html .= '</div>' . "\n";
84 }
85 $this->html .= "</div>\n";
86 $margin_left -= $this->margin_left_multiplier;
87 }
88} \ No newline at end of file
diff --git a/src/view/NavBuilder.php b/src/view/NavBuilder.php
index 603fcfa..2718569 100644
--- a/src/view/NavBuilder.php
+++ b/src/view/NavBuilder.php
@@ -1,5 +1,7 @@
1<?php 1<?php
2// src/view/NavBuilder.php 2// src/view/NavBuilder.php
3//
4// menu principal
3 5
4declare(strict_types=1); 6declare(strict_types=1);
5 7
@@ -8,10 +10,13 @@ use App\Entity\Page;
8 10
9class NavBuilder extends AbstractBuilder 11class NavBuilder extends AbstractBuilder
10{ 12{
11 public function __construct(Node $node) 13 public function __construct(Node $node = null)
12 { 14 {
13 $this->html .= '<nav class="nav_main"><ul>'; 15 $this->html .= '<nav class="nav_main"><ul>';
14 $this->html .= $this->navMainHTML(Director::$menu_data, Director::$page_path->getArray()); 16 $this->html .= $this->navMainHTML(
17 Director::$menu_data,
18 // param nullable, ça retire une dépendance stricte entre NavBuilder et Director
19 Director::$page_path != null ? Director::$page_path->getArray() : []);
15 $this->html .= '</ul></nav>'; 20 $this->html .= '</ul></nav>';
16 } 21 }
17 22
diff --git a/src/view/templates/header.php b/src/view/templates/header.php
index 0bf4396..4b633a6 100644
--- a/src/view/templates/header.php
+++ b/src/view/templates/header.php
@@ -1,7 +1,7 @@
1<body> 1<body>
2 <div> 2 <div>
3 <header> 3 <header>
4 <div class="empty_nav_zone"> 4 <div id="nav_zone">
5 <?= $nav ?> 5 <?= $nav ?>
6 </div> 6 </div>
7 7
diff --git a/src/view/templates/menu.php b/src/view/templates/menu.php
new file mode 100644
index 0000000..a7f318e
--- /dev/null
+++ b/src/view/templates/menu.php
@@ -0,0 +1,15 @@
1<section class="menu">
2 <h3>Menu et chemins</h3>
3 <aside>
4 <p><img src="assets/arrow-left.svg"> remonter dans l'arbre</p>
5 <p><img src="assets/arrow-right.svg"> devenir une branche de l'élément précédent</p>
6 <p><img src="assets/arrow-up.svg"><img src="assets/arrow-down.svg"> déplacer la branche parmi celles de même niveau</p>
7 <p><input type="checkbox" checked>afficher/cacher</p>
8 </aside>
9<?= $this->html ?>
10 <div class="new_entry_buttons">
11 <p>Ajouter une nouvelle entrée dans le menu?</p>
12 <button id="new-i..." onclick="openEditor('i...')"><img class="action_icon" src="assets/edit.svg">avec une URL</button>
13 ...sinon cliquer sur Nouvelle page<img src="assets/arrow-down.svg">dans la barre jaune
14 </div>
15</section> \ No newline at end of file