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