Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16945 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

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