summaryrefslogtreecommitdiff
path: root/src/view/MenuBuilder.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/MenuBuilder.php')
-rw-r--r--src/view/MenuBuilder.php88
1 files changed, 88 insertions, 0 deletions
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