1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
4 -------------------------------------------------------------------------------
5 This file is part of mlib.
7 mlib is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2 of the License, or (at your option)
12 mlib is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License; if not,
17 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 Boston, MA 02111-1307 USA
19 -------------------------------------------------------------------------------
20 Creado: Mon Apr 14 16:23:22 2003
21 Autor: Martin Marrese <mmarre@mecon.gov.ar>
22 -------------------------------------------------------------------------------
24 -----------------------------------------------------------------------------*/
26 require_once 'MLIB/Marco/Seccion.php';
27 require_once 'MLIB/Marco/ImagenAnimada.php';
28 require_once 'HTML/Table.php';
30 define ('MENU_SERIALIZADO' , 'MenuSerializado');
31 define ('ARRAYSECCIONES_SERIALIZADO', 'ArraySeccionesSerializado');
34 * Clase para el manejo de los menues y secciones de los sistemas.
38 class MLIB_Marco_Menu {
40 * Array con los resultados para agregar a la pagina.
41 * Sobre este array MLIB_Marco realiza un foreach para agregar lo que
44 * @var array $resultado
47 var $resultado = array(); /**
49 * Array con la configuracion de las secciones del sistema o subsecciones de
50 * la sección principal.
52 * @var array $configuracion
55 var $_configuracion = array();
58 * Array de array con los componentes del menu.
60 * @var array $componentes
63 var $_componentes = array();
66 * Objeto que contiene el menu a mostrar. Opcionalmente puede contener el
67 * body de la pagina si es el caso de un menu vertical.
75 * Variable que contiene el titulo de la seccion seleccionada.
83 * Array con los objetos seccion.
85 * @var array $secciones
88 var $_secciones = array();
91 * Array de array con los componentes del menu en caso de ser este vertical.
93 * @var string $componentesVertical
96 var $_componentesVertical = array();
99 * Recibe como parametro la configuracion del sistema.
101 * @param array $configuracion Array con los datos de las secciones
106 function MLIB_Marco_Menu($configuracion = null)
108 $this->_configuracion = $configuracion;
109 $this->_tabla =& new HTML_Table (
112 'cellspacing' => '0',
113 'cellpadding' => '0',
120 * Funcion que obtiene el array de configuracion de secciones.
125 function _obtenerConfSecciones()
127 return $this->_configuracion['secciones'];
131 * Devuelve un string con el encabezado de la seccion
133 * @param string $titulo Titulo de la seccion
138 function _armarEncabezado($titulo)
140 return '<div class="MLIB_marco_subtitle">'.$titulo.'</div>';
144 * Funcion que arma a partir de la configuracion de las secciones el array
145 * con los objetos seccion.
147 * @param array $confSec Array con la informacion de las secciones
152 function _armarArraySecciones($confSec)
154 $linksel = $_SERVER['PHP_SELF'];
156 $cuenta = count ($confSec);
158 foreach ($confSec as $sec) {
159 //Veo si tiene permisos para ver la seccion
160 if (!@$this->_configuracion['obj_permiso'] || !@$sec['permisos']) {
163 elseif ($this->_configuracion['obj_permiso']->tiene(@$sec['permisos'])) {
170 $tmp = new MLIB_Marco_Seccion ($sec, $this->_configuracion);
171 array_push($this->_componentes, $tmp->toHtml($linksel));
175 array_push($this->_componentesVertical,
176 $tmp->toHtmlVertical($linksel,$ultimo));
177 array_push($this->_secciones,$tmp);
184 * Funcion que se encarga de agregar componentes al array
186 * @param array $componente Datos del componente de menu a agregar
191 function agregarComponente($componente)
193 array_push($this->_componentes,$componente);
197 * Funcion que se encarga de devolver lo que se debe mostrar en pantalla
204 return $this->_tabla->toHtml();
208 * Devuelve el html del menu que hay que mostrar en pantalla
213 function menuToHtml()
215 return $this->_menuHtml;
219 * Funcion que se encarga de generar el archivo que despues sera utilizado
220 * con la funcion EVAL.
225 function _generarArchivo()
227 $s = serialize($this);
228 $fp = fopen($this->_configuracion['directorios']['root'].'/'.MENU_SERIALIZADO,'w');
234 * Funcion que se encarga de obtener el archivo con los datos del objeto
235 * para ser utilizado con la funcion EVAL.
237 * @param string $directorio Nombre del directorio en donde se encuentra el
243 function _obtenerArchivo($directorio)
245 $s = implode("", @file($this->_configuracion['directorios']['root'].'/'.MENU_SERIALIZADO));
246 return unserialize($s);
250 * Funcion que se encarga de serializar el array asociativo
251 * paginas-secciones. Se utilizara en la clase seccion para identificar
252 * a que seccion pertenece la pagina a la cual se quiere acceder.
257 function _serializarArraySecciones()
259 $secciones = $this->_configuracion['secciones'];
263 $PATH = $this->_configuracion['directorios']['root'];
265 foreach ($secciones as $sec) { //Chequeo las secciones
266 $tmp[$sec['nombre']] = array ($PATH.'/'.$sec['link']);
267 if (array_key_exists('hijos',$sec)) {
268 foreach ($sec['hijos'] as $hijo) { //Chequeo las subsecciones
269 array_push($tmp[$sec['nombre']],$PATH.'/'.$hijo['link']);
270 $tmp2[$sec['nombre'].'-'.$hijo['nombre']] = array ($PATH.'/'.$hijo['link']);
271 if (array_key_exists('subhijos',$hijo)) {
272 foreach ($hijo['subhijos'] as $subhijo) { //Chequeo las subsubsecciones
273 array_push($tmp[$sec['nombre']],$PATH.'/'.$subhijo);
274 array_push($tmp2[$sec['nombre'].'-'.$hijo['nombre']],$PATH.'/'.$subhijo);
279 if (array_key_exists('subhijos',$sec)) {
280 foreach ($sec['subhijos'] as $subhijo2) { //Chequeo la lista de hijos no secciones
281 array_push($tmp[$sec['nombre']],$PATH.'/'.$subhijo2);
285 $tmp = array_merge($tmp,$tmp2);
286 $s = serialize($tmp);
287 $file_cache = strtr( $this->_configuracion['directorios']['root'], '/','_');
288 $fp = fopen($this->_configuracion['directorios_fs']['cache'].'/'.ARRAYSECCIONES_SERIALIZADO.'_'.$file_cache,'w');