Rev 16945 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php/*** Menu Helper Template** Este archivo genera el menú del sidebar dinámicamente basado en:* - El tipo de usuario (empresa o sistema)* - Los permisos ACL del usuario actual* - La estructura de menú definida en acl.config.php*/// Obtener información del usuario actual$currentUserPlugin = $this->currentUserHelper();$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();// Seleccionar el menú apropiado según el contextoif ($currentCompany) {// Usuario de empresa: cargar menú de empresa$menu = getAclMenuCompany();} else {// Usuario de sistema: cargar menú de administración del sistema$menu = getAclMenuSystem();}// Obtener el tipo de usuario para validación de permisos$usertype_id = $currentUser->usertype_id;// Procesar la URI actual para resaltar elementos activos del menú$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';if ($request_uri) {// Remover slash inicial si existeif (substr($request_uri, 0, 1) == '/') {$request_uri = substr($request_uri, 1);}// Remover slash final si existeif (substr($request_uri, strlen($request_uri) - 1, 1) == '/') {$request_uri = substr($request_uri, 0, strlen($request_uri) - 1);}}// Obtener el objeto ACL para validación de permisos$acl = $this->viewModel()->getCurrent()->getVariable('acl');// Contador para IDs únicos de elementos colapsables$liCount = 0;// Iterar sobre el primer nivel del menú (categorías principales)foreach ($menu as $level1) :// Validar que el elemento existe y el usuario tiene permisosif (!$level1 || !$level1['route'] || !$acl->isAllowed($usertype_id, $level1['route'])) {continue;}$liCount++;// Si no tiene páginas hijas, es un enlace directoif (empty($level1['pages'])) :?><!-- Elemento de menú directo (sin submenús) --><li class="nav-item"><a href="/<?php echo $level1['route'] ?>" class="nav-link"><span class="link-title"><?php echo $level1['label'] ?></span></a></li><?php else : ?><!-- Categoría de menú con submenús --><li class="nav-item nav-category"><?php echo $level1['label'] ?></li><?php// Iterar sobre el segundo nivel del menú (módulos)foreach ($level1['pages'] as $level2) :// Validar permisos para el segundo nivelif (!$level2 || !$level2['route'] || !$acl->isAllowed($usertype_id, $level2['route'])) {continue;}$liCount++;// Si no tiene subpáginas, es un enlace directo de segundo nivelif (empty($level2['pages'])) :?><!-- Elemento de segundo nivel (enlace directo) --><li class="nav-item"><a href="/<?php echo $level2['route'] ?>" class="nav-link"><span class="link-title"><?php echo $level2['label'] ?></span></a></li><?php else : ?><!-- Elemento de segundo nivel con submenús colapsables --><li class="nav-item"><a class="nav-link"data-bs-toggle="collapse"href="#li<?php echo $liCount; ?>"role="button"aria-expanded="false"aria-controls="li<?php echo $liCount; ?>"><span class="link-title"><?php echo $level2['label'] ?></span></a><!-- Contenedor colapsable para submenús --><div class="collapse" id="li<?php echo $liCount; ?>"><ul class="nav sub-menu"><?php// Iterar sobre el tercer nivel del menú (subpáginas)foreach ($level2['pages'] as $level3) :// Validar permisos para el tercer nivelif (!$level3 || !$level3['route'] || !$acl->isAllowed($usertype_id, $level3['route'])) {continue;}$liCount++;// Si no tiene subpáginas de cuarto nivel, es un enlace directoif (empty($level3['pages'])) :?><!-- Elemento de tercer nivel (enlace directo) --><li class="nav-item"><a href="/<?php echo $level3['route'] ?>" class="nav-link"><?php echo $level3['label'] ?></a></li><?php else : ?><!-- Elemento de tercer nivel con submenús de cuarto nivel --><li class="nav-item"><a href="#li<?php echo $liCount; ?>" class="nav-link"><?php echo $level3['label'] ?></a><!-- Submenú de cuarto nivel --><ul class="nav sub-menu"><?php// Iterar sobre el cuarto nivel del menúforeach ($level3['pages'] as $level4) :// Validar permisos para el cuarto nivelif (!$level4 || !$level4['route'] || !$acl->isAllowed($usertype_id, $level4['route'])) {continue;}$liCount++;?><!-- Elemento de cuarto nivel (enlace directo) --><li class="nav-item"><a href="/<?php echo $level4['route'] ?>" class="nav-link"><?php echo $level4['label'] ?></a></li><?php endforeach; ?></ul></li><?php endif; ?><?php endforeach; ?></ul></div></li><?php endif; ?><?php endforeach; ?><?php endif; ?><?php endforeach; ?>