blob: 0fcfbe57e756ed07f527ab7b78e5aa7d1b0c9894 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
<?php
// src/view/MenuBuilder.php
//
// page Menu et chemins en mode admin
use App\Entity\Node;
use App\Entity\Page;
class MenuBuilder extends AbstractBuilder
{
private int $margin_left_multiplier = 29;
public function __construct(Node $node)
{
parent::__construct($node);
$viewFile = self::VIEWS_PATH . $node->getName() . '.php';
if(file_exists($viewFile))
{
/*if(!empty($node->getNodeData()->getData()))
{
extract($node->getNodeData()->getData());
}*/
// ajouter un article
$new_article = '';
if($_SESSION['admin'])
{
$this->unfoldMenu(Director::$menu_data, 0 - $this->margin_left_multiplier);
}
else{
header('Location: ' . new URL);
die;
}
ob_start();
require $viewFile;
$this->html = ob_get_clean(); // pas de concaténation ici, on écrase
}
}
private function unfoldMenu(Page $menu, int $margin_left): void
{
$margin_left += $this->margin_left_multiplier;
$this->html .= '<div class="level">' . "\n";
foreach($menu->getChildren() as $entry)
{
$div_style = 'margin-left: ' . $margin_left . 'px;';
$checked = $entry->IsInMenu() ? 'checked' : '';
$this->html .= '<div id="' . $entry->getId() . '" style="' . $div_style . '">
<img class="move_entry_icon" onclick="" src="assets/arrow-left.svg">
<img class="move_entry_icon" onclick="" src="assets/arrow-right.svg">
<img class="move_entry_icon" onclick="switchMenuPositions(' . $entry->getId() . ', \'up\')" src="assets/arrow-up.svg">
<img class="move_entry_icon" onclick="switchMenuPositions(' . $entry->getId() . ', \'down\')" src="assets/arrow-down.svg">
<span class="menu_entry_checkbox">
<input type="checkbox" ' . $checked . ' onclick="checkMenuEntry(' . $entry->getId() . ')">
</span>
<button>' . $entry->getPageName() . '</button>';
if(str_starts_with($entry->getEndOfPath(), 'http')){
$this->html .= '<span id="edit-i..."><img class="move_entry_icon" src="assets/edit.svg" onclick="openEditor(\'i...\')"></span>
<i>' . $entry->getEndOfPath() . '</i>
<span id="delete-i..."><img class="move_entry_icon" src="assets/delete-bin.svg" onclick="delete(\'i...\')"></span>';
}
else{
$this->html .= '<i>' . $entry->getPagePath() . '</i>';
}
// supprimer me label "visible" et griser le texte et bouton en JS à la place
/*
=> flèche gauche: position = position du parent + 1, parent = grand-parent, recalculer les positions
=> flèche droite: position = nombre d'éléments de la fraterie + 1, l'élément précédent devient le parent
=> flèches haut et bas: inversement de position, comme pour les noeuds, mais dans la table page
=> checkbox: in_menu ^= 1
*/
if(count($entry->getChildren()) > 0){
$this->unfoldMenu($entry, $margin_left);
}
$this->html .= '</div>' . "\n";
}
$this->html .= "</div>\n";
$margin_left -= $this->margin_left_multiplier;
}
}
|