]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/Marco/Menu.php
BugFix. No podia haber dos subsecciones con el mismo nombre. A partir de ahora si.
[mecon/meconlib.git] / lib / MECON / Marco / Menu.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
11 any later version.
12
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Creado: Mon Apr 14 16:23:22 2003
22 Autor:  Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MECON/Marco/Seccion.php';
28 require_once 'MECON/Marco/ImagenAnimada.php';
29 require_once 'HTML/Table.php';
30
31 define ('MENU_SERIALIZADO'          , 'MenuSerializado');
32 define ('ARRAYSECCIONES_SERIALIZADO', 'ArraySeccionesSerializado');
33
34 // +X2C Class 14 :MECON_Marco_Menu
35 /**
36  * Clase para el manejo de los menues y secciones de los sistemas.
37  *
38  * @package MECON_Marco
39  * @access public
40  */
41 class MECON_Marco_Menu {
42     /**
43      * Array con la configuracion de las secciones del sistema;.
44      *
45      * @var    array $configuracion
46      * @access private
47      */
48     var $_configuracion = array();
49
50     /**
51      * Array de array con los componentes del menu
52      *
53      * @var    array $componentes
54      * @access private
55      */
56     var $_componentes = array();
57
58     /**
59      * Variable que contiene la tabla general de menues que se va a mostrar en pantalla
60      *
61      * @var    table $tabla
62      * @access private
63      */
64     var $_tabla;
65
66     /**
67      * Variable que contiene el titulo de la seccion seleccionada
68      *
69      * @var    string $titulo
70      * @access private
71      */
72     var $_titulo = '';
73
74     /**
75      * Array con los objetos seccion.
76      *
77      * @var    array $secciones
78      * @access private
79      */
80     var $_secciones = array();
81
82     /**
83      * Array de array con los componentes del menu en caso de ser este vertical
84      *
85      * @var    string $componentesVertical
86      * @access private
87      */
88     var $_componentesVertical = array();
89
90     // ~X2C
91
92     // +X2C Operation 56
93     /**
94      * Recibe como parametro el directorio en donde se encuentra el sistema.
95      *
96      * @param  array $configuracion Array con los datos de las secciones
97      *
98      * @return void
99      * @access public
100      */
101     function MECON_Marco_Menu($configuracion = null) // ~X2C
102     {
103         $this->_tabla = new HTML_Table('width=760 
104                                         align="center" 
105                                         bgcolor="#FFFFFF" 
106                                         cellspacing="0" 
107                                         cellpadding="0" 
108                                         border="0"');
109         $this->_tabla->setLineEnd('');
110         $this->_tabla->setTab('');
111         
112         $this->_configuracion = $configuracion;
113     }
114     // -X2C
115
116     // +X2C Operation 57
117     /**
118      * Funcion que se encarga de generar el archivo que despues sera utilizado con la funcion EVAL.
119      *
120      * @return void
121      * @access private
122      */
123     function _generarArchivo() // ~X2C
124     {
125         $s = serialize($this);
126         $fp = fopen($this->_configuracion['directorios']['root'].'/'.MENU_SERIALIZADO,'w');
127         fputs($fp, $s);
128         fclose($fp);
129     }
130     // -X2C
131
132     // +X2C Operation 58
133     /**
134      * Funcion que se encarga de obtener el archivo con los datos del objeto para ser utilizado con la funcion EVAL.
135      *
136      * @param  string $directorio Nombre del directorio en donde se encuentra el sistema instalado
137      *
138      * @return string
139      * @access private
140      */
141     function _obtenerArchivo($directorio) // ~X2C
142     {
143         $s = implode("", @file($this->_configuracion['directorios']['root'].'/'.MENU_SERIALIZADO));
144         return unserialize($s);
145     }
146     // -X2C
147
148
149     // +X2C Operation 76
150     /**
151      * Funcion que obtiene el array de configuracion de secciones.
152      *
153      * @return array
154      * @access private
155      */
156     function _obtenerConfSecciones() // ~X2C
157     {
158         return $this->_configuracion['secciones'];
159     }
160     // -X2C
161
162     // +X2C Operation 82
163     /**
164      * Funcion que arma a partir de la configuracion de las secciones el array con los objetos seccion.
165      *
166      * @param  array $confSec Array con la informacion de las secciones
167      *
168      * @return void
169      * @access private
170      */
171     function _armarArraySecciones($confSec) // ~X2C
172     {
173         $linksel = $_SERVER['PHP_SELF'];
174         $ultimo = 0;
175         $cuenta = count ($confSec);
176         $i = 1;
177         foreach ($confSec as $sec) {
178             //Veo si tiene permisos para ver la seccion
179             if (!@$this->_configuracion['obj_permiso'] || !@$sec['permisos']) {
180                 $ver = true;
181             }
182             elseif ($this->_configuracion['obj_permiso']->tiene(@$sec['permisos'])) {
183                 $ver = true;
184             }
185             else {
186                 $ver = false;
187             }
188             if ($ver) {
189                 $tmp = new MECON_Marco_Seccion ($sec, $this->_configuracion);         
190                 array_push($this->_componentes,$tmp->toHtml($linksel));
191                 if ($cuenta == $i) {
192                     $ultimo = 1;
193                 }
194                 array_push($this->_componentesVertical, $tmp->toHtmlVertical($linksel,$ultimo));
195                 array_push($this->_secciones,$tmp);
196             }
197             $i++;
198         }
199     }
200     // -X2C
201
202
203     // +X2C Operation 126
204     /**
205      * Funcion que se encarga de serializar el array asociativo paginas-secciones. Se utilizara en la clase seccion para identificar a que seccion pertenece la pagina a la cual se quiere acceder.
206      *
207      * @return void
208      * @access private
209      */
210     function _serializarArraySecciones() // ~X2C
211     {
212         $secciones = $this->_configuracion['secciones'];
213         $tmp  = array();
214         $tmp2 = array();
215         
216         $PATH = $this->_configuracion['directorios']['root'];
217        
218         foreach ($secciones as $sec) { //Chequeo las secciones
219             $tmp[$sec['nombre']] = array ($PATH.'/'.$sec['link']);
220             if (array_key_exists('hijos',$sec)) {
221                 foreach ($sec['hijos'] as $hijo) { //Chequeo las subsecciones            
222                     array_push($tmp[$sec['nombre']],$PATH.'/'.$hijo['link']);
223                     $tmp2[$sec['nombre'].'-'.$hijo['nombre']] = array ($PATH.'/'.$hijo['link']);
224                     if (array_key_exists('subhijos',$hijo)) {
225                         foreach ($hijo['subhijos'] as $subhijo) { //Chequeo las subsubsecciones
226                             array_push($tmp[$sec['nombre']],$PATH.'/'.$subhijo);
227                             array_push($tmp2[$sec['nombre'].'-'.$hijo['nombre']],$PATH.'/'.$subhijo);
228                         }
229                     }
230                 }
231             }
232             if (array_key_exists('subhijos',$sec)) {
233                 foreach ($sec['subhijos'] as $subhijo2) { //Chequeo la lista de hijos no secciones
234                     array_push($tmp[$sec['nombre']],$PATH.'/'.$subhijo2);
235                 }
236             }
237         }
238         $tmp = array_merge($tmp,$tmp2);
239         $s = serialize($tmp);
240         $file_cache = strtr( $this->_configuracion['directorios']['root'], '/','_');
241         $fp = fopen($this->_configuracion['directorios_fs']['cache'].'/'.ARRAYSECCIONES_SERIALIZADO.'_'.$file_cache,'w');
242         fputs($fp, $s);
243         fclose($fp);
244     }
245     // -X2C
246
247
248     // +X2C Operation 134
249     /**
250      * Funcion que se encarga de agregar componentes al array
251      *
252      * @param  array $componente Datos del componente de menu a agregar
253      *
254      * @return void
255      * @access public
256      */
257     function agregarComponente($componente) // ~X2C
258     {
259         array_push($this->_componentes,$componente);
260     }
261     // -X2C
262
263
264     // +X2C Operation 143
265     /**
266      * Funcion que se encarga de devolver lo que se debe mostrar en pantalla
267      *
268      * @return string
269      * @access public
270      */
271     function toHtml() // ~X2C
272     {
273         return $this->_tabla->toHtml();
274     }
275     // -X2C
276
277
278     // +X2C Operation 151
279     /**
280      * Devuelve el html del menu que hay que mostrar en pantalla
281      *
282      * @return string
283      * @access public
284      */
285     function menuToHtml() // ~X2C
286     {
287         return $this->_menuHtml;
288     }
289     // -X2C
290
291     // +X2C Operation 222
292     /**
293      * Devuelve un string con el encabezado de la seccion
294      *
295      * @param  string $titulo Titulo de la seccion
296      *
297      * @return string
298      * @access private
299      */
300     function _armarEncabezado($titulo) // ~X2C
301     {
302         return '<font face="Arial, Helvetica, sans-serif" size="3" color="#336699"><b>'.$titulo.'</b></font>';
303     }
304     // -X2C
305
306 } // -X2C Class :MECON_Marco_Menu
307
308 ?>