]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/Marco/Menu.php
BugFixes a la primera version de addMenuVertical de Marco
[mecon/meconlib.git] / lib / MECON / Marco / Menu.php
1 <?php
2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
3 // +----------------------------------------------------------------------+
4 // | PHP Version 4                                                        |
5 // +----------------------------------------------------------------------+
6 // | Copyright (c) 1997-2003 The PHP Group                                |
7 // +----------------------------------------------------------------------+
8 // | This source file is subject to version 2.02 of the PHP license,      |
9 // | that is bundled with this package in the file LICENSE, and is        |
10 // | available at through the world-wide-web at                           |
11 // | http://www.php.net/license/2_02.txt.                                 |
12 // | If you did not receive a copy of the PHP license and are unable to   |
13 // | obtain it through the world-wide-web, please send a note to          |
14 // | license@php.net so we can mail you a copy immediately.               |
15 // +----------------------------------------------------------------------+
16 // | Created: Mon Apr 14 16:23:22 2003
17 // | Author:  Martin Marrese <mmarre@mecon.gov.ar>
18 // +----------------------------------------------------------------------+
19 //
20 // $Id$
21 // $Author$
22 // $URL$
23 // $Date$
24 // $Rev$
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 :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 Menu {
42     /**
43      * Array con la configuracion de las secciones del sistema;.
44      *
45      * @var    array $configuracion
46      * @access private
47      */
48     var $_configuracion;
49
50     /**
51      * Array de array con los componentes del menu
52      *
53      * @var    array $componentes
54      * @access private
55      */
56     var $_componentes;
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;
81
82     /**
83      * @var    string $componentesVertical
84      * @access private
85      */
86     var $_componentesVertical;
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 Menu($configuracion = null) // ~X2C
100     {
101         $this->_componentes = array (); //Inicializo vacio el array de componentes del menu
102         $this->_componentesVertical = array (); //Inicializo vacio el array de componentes del menu
103         $this->_secciones = array (); //Inicializo vacio el array de los objetos secciones
104         $this->_tabla = new HTML_Table('width=760 align="center" bgcolor="#FFFFFF" cellspacing="0" cellpadding="0" border="0"');
105         $this->_configuracion = $configuracion;
106     }
107     // -X2C
108
109     // +X2C Operation 57
110     /**
111      * Funcion que se encarga de generar el archivo que despues sera utilizado con la funcion EVAL.
112      *
113      * @return void
114      * @access private
115      */
116     function _generarArchivo() // ~X2C
117     {
118         $s = serialize($this);
119         $fp = fopen($this->_configuracion['directorios']['root'].'/'.MENU_SERIALIZADO,'w');
120         fputs($fp, $s);
121         fclose($fp);
122     }
123     // -X2C
124
125     // +X2C Operation 58
126     /**
127      * Funcion que se encarga de obtener el archivo con los datos del objeto para ser utilizado con la funcion EVAL.
128      *
129      * @param  string $directorio Nombre del directorio en donde se encuentra el sistema instalado
130      *
131      * @return string
132      * @access private
133      */
134     function _obtenerArchivo($directorio) // ~X2C
135     {
136         $s = implode("", @file($this->_configuracion['directorios']['root'].'/'.MENU_SERIALIZADO));
137         return unserialize($s);
138     }
139     // -X2C
140
141
142     // +X2C Operation 76
143     /**
144      * Funcion que obtiene el arrayde configuracion de secciones.
145      *
146      * @return array
147      * @access private
148      */
149     function _obtenerConfSecciones() // ~X2C
150     {
151         return $this->_configuracion['secciones'];
152     }
153     // -X2C
154
155     // +X2C Operation 82
156     /**
157      * Funcion que arma a partir de la configuracion de las secciones el array con los objetos seccion.
158      *
159      * @param  array $confSec Array con la informacion de las secciones
160      *
161      * @return void
162      * @access private
163      */
164     function _armarArraySecciones($confSec) // ~X2C
165     {
166         $linksel = $_SERVER['PHP_SELF'];
167         $ultimo = 0;
168         $cuenta = count ($confSec);
169         $i = 1;
170         foreach ($confSec as $sec) {
171             $tmp = new Seccion ($sec, $this->_configuracion);         
172             array_push($this->_componentes,$tmp->toHtml($linksel));
173             if ($cuenta == $i) {
174                 $ultimo = 1;
175             }
176             array_push($this->_componentesVertical, $tmp->toHtmlVertical($linksel,$ultimo));
177             $i++;
178             array_push($this->_secciones,$tmp);
179         }
180     }
181     // -X2C
182
183
184     // +X2C Operation 126
185     /**
186      * 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.
187      *
188      * @return void
189      * @access private
190      */
191     function _serializarArraySecciones() // ~X2C
192     {
193         $secciones = $this->_configuracion['secciones'];
194         $tmp  = array();
195         $tmp2 = array();
196         
197         $PATH = $this->_configuracion['directorios']['root'];
198        
199         foreach ($secciones as $sec) { //Chequeo las secciones
200             $tmp[$sec['nombre']] = array ($PATH.'/'.$sec['link']);
201             if (array_key_exists('hijos',$sec)) {
202                 foreach ($sec['hijos'] as $hijo) { //Chequeo las subsecciones            
203                     array_push($tmp[$sec['nombre']],$PATH.'/'.$hijo['link']);
204                     $tmp2[$hijo['nombre']] = array ($PATH.'/'.$hijo['link']);
205                     if (array_key_exists('subhijos',$hijo)) {
206                         foreach ($hijo['subhijos'] as $subhijo) { //Chequeo las subsubsecciones
207                             array_push($tmp[$sec['nombre']],$PATH.'/'.$subhijo);
208                             array_push($tmp2[$hijo['nombre']],$PATH.'/'.$subhijo);
209                         }
210                     }
211                 }
212             }
213         }
214         $tmp = array_merge($tmp,$tmp2);
215         $s = serialize($tmp);
216         $file_cache = strtr( $this->_configuracion['directorios']['root'], '/','_');
217         $fp = fopen($this->_configuracion['directorios_fs']['cache'].'/'.ARRAYSECCIONES_SERIALIZADO.'_'.$file_cache,'w');
218         fputs($fp, $s);
219         fclose($fp);
220     }
221     // -X2C
222
223
224     // +X2C Operation 134
225     /**
226      * Funcion que se encarga de agregar componentes al array
227      *
228      * @param  array $componente Datos del componente de menu a agregar
229      *
230      * @return void
231      * @access public
232      */
233     function agregarComponente($componente) // ~X2C
234     {
235         array_push($this->_componentes,$componente);
236     }
237     // -X2C
238
239
240     // +X2C Operation 143
241     /**
242      * Funcion que se encarga de devolver lo que se debe mostrar en pantalla
243      *
244      * @return string
245      * @access public
246      */
247     function toHtml() // ~X2C
248     {
249         return $this->_tabla->toHtml();
250     }
251     // -X2C
252
253
254     // +X2C Operation 151
255     /**
256      * Devuelve el html del menu que hay que mostrar en pantalla
257      *
258      * @return string
259      * @access public
260      */
261     function menuToHtml() // ~X2C
262     {
263         return $this->_menuHtml;
264     }
265     // -X2C
266
267 } // -X2C Class :Menu
268
269 ?>