Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16945 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
16893 stevensc 1
<?php
17342 stevensc 2
/**
3
 * Menu Helper Template
4
 *
5
 * Este archivo genera el menú del sidebar dinámicamente basado en:
6
 * - El tipo de usuario (empresa o sistema)
7
 * - Los permisos ACL del usuario actual
8
 * - La estructura de menú definida en acl.config.php
9
 */
16893 stevensc 10
 
17342 stevensc 11
// Obtener información del usuario actual
1 www 12
$currentUserPlugin = $this->currentUserHelper();
13
$currentUser = $currentUserPlugin->getUser();
16893 stevensc 14
$currentCompany = $currentUserPlugin->getCompany();
1 www 15
 
17342 stevensc 16
// Seleccionar el menú apropiado según el contexto
16893 stevensc 17
if ($currentCompany) {
17342 stevensc 18
    // Usuario de empresa: cargar menú de empresa
19
    $menu = getAclMenuCompany();
1 www 20
} else {
17342 stevensc 21
    // Usuario de sistema: cargar menú de administración del sistema
22
    $menu = getAclMenuSystem();
1 www 23
}
24
 
17342 stevensc 25
// Obtener el tipo de usuario para validación de permisos
16893 stevensc 26
$usertype_id = $currentUser->usertype_id;
16805 efrain 27
 
17342 stevensc 28
// Procesar la URI actual para resaltar elementos activos del menú
1 www 29
$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
30
 
16893 stevensc 31
if ($request_uri) {
17342 stevensc 32
    // Remover slash inicial si existe
33
    if (substr($request_uri, 0, 1) == '/') {
34
        $request_uri = substr($request_uri, 1);
35
    }
36
    // Remover slash final si existe
37
    if (substr($request_uri, strlen($request_uri) - 1, 1) == '/') {
38
        $request_uri = substr($request_uri, 0, strlen($request_uri) - 1);
39
    }
4621 stevensc 40
}
1 www 41
 
17342 stevensc 42
// Obtener el objeto ACL para validación de permisos
1 www 43
$acl = $this->viewModel()->getCurrent()->getVariable('acl');
16805 efrain 44
 
17342 stevensc 45
// Contador para IDs únicos de elementos colapsables
16806 efrain 46
$liCount = 0;
17342 stevensc 47
 
48
// Iterar sobre el primer nivel del menú (categorías principales)
16893 stevensc 49
foreach ($menu as $level1) :
17342 stevensc 50
 
51
    // Validar que el elemento existe y el usuario tiene permisos
52
    if (!$level1 || !$level1['route'] || !$acl->isAllowed($usertype_id, $level1['route'])) {
53
        continue;
54
    }
55
 
56
    $liCount++;
57
 
58
    // Si no tiene páginas hijas, es un enlace directo
59
    if (empty($level1['pages'])) :
16893 stevensc 60
?>
17342 stevensc 61
        <!-- Elemento de menú directo (sin submenús) -->
62
        <li class="nav-item">
63
            <a href="/<?php echo $level1['route'] ?>" class="nav-link">
64
                <span class="link-title"><?php echo $level1['label'] ?></span>
65
            </a>
66
        </li>
16805 efrain 67
 
17342 stevensc 68
    <?php else : ?>
69
        <!-- Categoría de menú con submenús -->
70
        <li class="nav-item nav-category"><?php echo $level1['label'] ?></li>
71
        <?php
72
        // Iterar sobre el segundo nivel del menú (módulos)
73
        foreach ($level1['pages'] as $level2) :
74
 
75
            // Validar permisos para el segundo nivel
76
            if (!$level2 || !$level2['route'] || !$acl->isAllowed($usertype_id, $level2['route'])) {
77
                continue;
78
            }
79
 
80
            $liCount++;
81
 
82
            // Si no tiene subpáginas, es un enlace directo de segundo nivel
83
            if (empty($level2['pages'])) :
84
        ?>
85
                <!-- Elemento de segundo nivel (enlace directo) -->
86
                <li class="nav-item">
87
                    <a href="/<?php echo $level2['route'] ?>" class="nav-link">
88
                        <span class="link-title"><?php echo $level2['label'] ?></span>
89
                    </a>
90
                </li>
91
 
92
            <?php else : ?>
93
                <!-- Elemento de segundo nivel con submenús colapsables -->
94
                <li class="nav-item">
95
                    <a class="nav-link"
96
                       data-bs-toggle="collapse"
97
                       href="#li<?php echo $liCount; ?>"
98
                       role="button"
99
                       aria-expanded="false"
100
                       aria-controls="li<?php echo $liCount; ?>">
101
                        <span class="link-title"><?php echo $level2['label'] ?></span>
102
                    </a>
16805 efrain 103
 
17342 stevensc 104
                    <!-- Contenedor colapsable para submenús -->
105
                    <div class="collapse" id="li<?php echo $liCount; ?>">
106
                        <ul class="nav sub-menu">
107
                            <?php
108
                            // Iterar sobre el tercer nivel del menú (subpáginas)
109
                            foreach ($level2['pages'] as $level3) :
110
                                // Validar permisos para el tercer nivel
111
                                if (!$level3 || !$level3['route'] || !$acl->isAllowed($usertype_id, $level3['route'])) {
112
                                    continue;
113
                                }
16805 efrain 114
 
17342 stevensc 115
                                $liCount++;
16893 stevensc 116
 
17342 stevensc 117
                                // Si no tiene subpáginas de cuarto nivel, es un enlace directo
118
                                if (empty($level3['pages'])) :
119
                            ?>
120
                                    <!-- Elemento de tercer nivel (enlace directo) -->
121
                                    <li class="nav-item">
122
                                        <a href="/<?php echo $level3['route'] ?>" class="nav-link">
123
                                            <?php echo $level3['label'] ?>
124
                                        </a>
125
                                    </li>
126
                                <?php else : ?>
127
                                    <!-- Elemento de tercer nivel con submenús de cuarto nivel -->
128
                                    <li class="nav-item">
129
                                        <a href="#li<?php echo $liCount; ?>" class="nav-link">
130
                                            <?php echo $level3['label'] ?>
131
                                        </a>
132
 
133
                                        <!-- Submenú de cuarto nivel -->
134
                                        <ul class="nav sub-menu">
135
                                            <?php
136
                                            // Iterar sobre el cuarto nivel del menú
137
                                            foreach ($level3['pages'] as $level4) :
138
                                                // Validar permisos para el cuarto nivel
139
                                                if (!$level4 || !$level4['route'] || !$acl->isAllowed($usertype_id, $level4['route'])) {
140
                                                    continue;
141
                                                }
16893 stevensc 142
 
17342 stevensc 143
                                                $liCount++;
144
                                            ?>
145
                                                <!-- Elemento de cuarto nivel (enlace directo) -->
146
                                                <li class="nav-item">
147
                                                    <a href="/<?php echo $level4['route'] ?>" class="nav-link">
148
                                                        <?php echo $level4['label'] ?>
149
                                                    </a>
150
                                                </li>
16893 stevensc 151
 
17342 stevensc 152
                                            <?php endforeach; ?>
153
                                        </ul>
154
                                    </li>
155
                                <?php endif; ?>
16893 stevensc 156
 
157
 
158
 
159
 
160
 
17342 stevensc 161
                            <?php endforeach; ?>
162
                        </ul>
163
                    </div>
164
                </li>
16893 stevensc 165
 
17342 stevensc 166
            <?php endif; ?>
16893 stevensc 167
 
17342 stevensc 168
        <?php endforeach; ?>
16893 stevensc 169
 
17342 stevensc 170
    <?php endif; ?>
16893 stevensc 171
 
172
<?php endforeach; ?>