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