]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/Marco/Menu.php
MARCO: addMenuVertical ahora funciona con cualquier tipo de menu. Falta verificar...
[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->_configuracion = $configuracion;
110     }
111     // -X2C
112
113     // +X2C Operation 57
114     /**
115      * Funcion que se encarga de generar el archivo que despues sera utilizado con la funcion EVAL.
116      *
117      * @return void
118      * @access private
119      */
120     function _generarArchivo() // ~X2C
121     {
122         $s = serialize($this);
123         $fp = fopen($this->_configuracion['directorios']['root'].'/'.MENU_SERIALIZADO,'w');
124         fputs($fp, $s);
125         fclose($fp);
126     }
127     // -X2C
128
129     // +X2C Operation 58
130     /**
131      * Funcion que se encarga de obtener el archivo con los datos del objeto para ser utilizado con la funcion EVAL.
132      *
133      * @param  string $directorio Nombre del directorio en donde se encuentra el sistema instalado
134      *
135      * @return string
136      * @access private
137      */
138     function _obtenerArchivo($directorio) // ~X2C
139     {
140         $s = implode("", @file($this->_configuracion['directorios']['root'].'/'.MENU_SERIALIZADO));
141         return unserialize($s);
142     }
143     // -X2C
144
145
146     // +X2C Operation 76
147     /**
148      * Funcion que obtiene el array de configuracion de secciones.
149      *
150      * @return array
151      * @access private
152      */
153     function _obtenerConfSecciones() // ~X2C
154     {
155         return $this->_configuracion['secciones'];
156     }
157     // -X2C
158
159     // +X2C Operation 82
160     /**
161      * Funcion que arma a partir de la configuracion de las secciones el array con los objetos seccion.
162      *
163      * @param  array $confSec Array con la informacion de las secciones
164      *
165      * @return void
166      * @access private
167      */
168     function _armarArraySecciones($confSec) // ~X2C
169     {
170         $linksel = $_SERVER['PHP_SELF'];
171         $ultimo = 0;
172         $cuenta = count ($confSec);
173         $i = 1;
174         foreach ($confSec as $sec) {
175             //Veo si tiene permisos para ver la seccion
176             if (!@$this->_configuracion['obj_permiso']) {
177                 $ver = true;
178             }
179             elseif ($this->_configuracion['obj_permiso']->tiene()) {
180                 $ver = true;
181             }
182             else {
183                 $ver - false;
184             }
185             if ($ver) {
186                 $tmp = new MECON_Marco_Seccion ($sec, $this->_configuracion);         
187                 array_push($this->_componentes,$tmp->toHtml($linksel));
188                 if ($cuenta == $i) {
189                     $ultimo = 1;
190                 }
191                 array_push($this->_componentesVertical, $tmp->toHtmlVertical($linksel,$ultimo));
192                 $i++;
193                 array_push($this->_secciones,$tmp);
194             }
195         }
196     }
197     // -X2C
198
199
200     // +X2C Operation 126
201     /**
202      * 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.
203      *
204      * @return void
205      * @access private
206      */
207     function _serializarArraySecciones() // ~X2C
208     {
209         $secciones = $this->_configuracion['secciones'];
210         $tmp  = array();
211         $tmp2 = array();
212         
213         $PATH = $this->_configuracion['directorios']['root'];
214        
215         foreach ($secciones as $sec) { //Chequeo las secciones
216             $tmp[$sec['nombre']] = array ($PATH.'/'.$sec['link']);
217             if (array_key_exists('hijos',$sec)) {
218                 foreach ($sec['hijos'] as $hijo) { //Chequeo las subsecciones            
219                     array_push($tmp[$sec['nombre']],$PATH.'/'.$hijo['link']);
220                     $tmp2[$hijo['nombre']] = array ($PATH.'/'.$hijo['link']);
221                     if (array_key_exists('subhijos',$hijo)) {
222                         foreach ($hijo['subhijos'] as $subhijo) { //Chequeo las subsubsecciones
223                             array_push($tmp[$sec['nombre']],$PATH.'/'.$subhijo);
224                             array_push($tmp2[$hijo['nombre']],$PATH.'/'.$subhijo);
225                         }
226                     }
227                 }
228             }
229         }
230         $tmp = array_merge($tmp,$tmp2);
231         $s = serialize($tmp);
232         $file_cache = strtr( $this->_configuracion['directorios']['root'], '/','_');
233         $fp = fopen($this->_configuracion['directorios_fs']['cache'].'/'.ARRAYSECCIONES_SERIALIZADO.'_'.$file_cache,'w');
234         fputs($fp, $s);
235         fclose($fp);
236     }
237     // -X2C
238
239
240     // +X2C Operation 134
241     /**
242      * Funcion que se encarga de agregar componentes al array
243      *
244      * @param  array $componente Datos del componente de menu a agregar
245      *
246      * @return void
247      * @access public
248      */
249     function agregarComponente($componente) // ~X2C
250     {
251         array_push($this->_componentes,$componente);
252     }
253     // -X2C
254
255
256     // +X2C Operation 143
257     /**
258      * Funcion que se encarga de devolver lo que se debe mostrar en pantalla
259      *
260      * @return string
261      * @access public
262      */
263     function toHtml() // ~X2C
264     {
265         return $this->_tabla->toHtml();
266     }
267     // -X2C
268
269
270     // +X2C Operation 151
271     /**
272      * Devuelve el html del menu que hay que mostrar en pantalla
273      *
274      * @return string
275      * @access public
276      */
277     function menuToHtml() // ~X2C
278     {
279         return $this->_menuHtml;
280     }
281     // -X2C
282
283 } // -X2C Class :MECON_Marco_Menu
284
285 ?>