]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MLIB/Marco/Seccion.php
Se agrega un objeto que permite armar tablas html a partir de templates.
[mecon/meconlib.git] / lib / MLIB / Marco / Seccion.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                                     mlib
4 -------------------------------------------------------------------------------
5 This file is part of mlib.
6
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)
10 any later version.
11
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.
15  
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 -------------------------------------------------------------------------------
23 $Id$
24 -----------------------------------------------------------------------------*/
25
26 require_once 'MLIB/Marco/ImagenAnimada.php';
27 require_once 'MLIB/Marco/Menu.php';
28 require_once 'MLIB/Marco/MenuHorizontal.php';
29 require_once 'MLIB/Marco/MenuVertical.php';
30 require_once 'MLIB/Marco/MenuOculto.php';
31
32 /**
33  * Clase para el manejo de las secciones
34  *
35  * @access public
36  */
37 class MLIB_Marco_Seccion {
38     /**
39      * Nombre de la seccion.
40      *
41      * @var    string $nombre
42      * @access private
43      */
44     var $_nombre = '';
45
46     /**
47      * Este es el nombre de la imagen
48      *
49      * @var    Imagen $imagen
50      * @access private
51      */
52     var $_imagen;
53
54     /**
55      * Hijos (menu) de la seccion.
56      *
57      * @var    Menu $hijos
58      * @access private
59      */
60     var $_hijos;
61
62     /**
63      * Valor string del tipo de menu de la seccion
64      *
65      * @var    string $tipoMenu
66      * @access private
67      */
68     var $_tipoMenu = '';
69
70     /**
71      * Array con la configuracion del sistema
72      *
73      * @var    array $configuracion
74      * @access private
75      */
76     var $_configuracion = array();
77
78     /**
79      * Contiene el html del menu de la seccion
80      *
81      * @var    string $menuHtml
82      * @access private
83      */
84     var $_menuHtml = '';
85
86     /**
87      * Nombre del archivo pagina.
88      *
89      * @var    string $link
90      * @access private
91      */
92     var $_link = '';
93
94     /**
95      * Recibe como parametro el nombre de la seccion
96      *
97      * @param  array $seccion Array con la informacion de la seccion
98      * @param  array $configuracion Array con la configuracion del sistema
99      *
100      * @return void
101      * @access public
102      */
103     function MLIB_Marco_Seccion($seccion, $configuracion)
104     {
105         $this->_nombre   = @strval($seccion['nombre']);
106         $imgComun        = @strval($seccion['imagenComun']);
107         $imgMouseOn      = @strval($seccion['imagenMouseOn']);
108         $imgSelect       = @strval($seccion['imagenSelect']);
109         $this->_tipoMenu = @strval(strtolower($seccion['tipoMenu']));
110         $this->_link     = @strval($seccion['link']);
111         
112         $this->_imagen = new MLIB_Marco_ImagenAnimada( $imgComun, 
113                                                         $imgMouseOn, 
114                                                         $imgSelect,
115                                                         $configuracion['directorios']['imagenes'], 
116                                                         $this->_nombre,
117                                                         $configuracion['directorios']['root'].'/'.
118                                                         $this->_link,
119                                                         @strval($seccion['alt']));
120         if (!is_null($configuracion)) {
121             $this->_configuracion = $configuracion;
122         }
123         if (array_key_exists('hijos', $seccion)) {
124             $this->_cargarHijos($seccion['hijos']);
125         }
126     }
127
128     /**
129      * Funcion que devuelve un string con el html a imprimir por pantalla.
130      *
131      * @param  string $link_sel Indica la pagina a la cual se quiere acceder.
132      *
133      * @return string
134      * @access public
135      */
136     function toHtml($link_sel)
137     {
138         if (!$this->_configuracion['links']) {
139             $this->_imagen->setHabilitada(false);
140         }
141         if ($this->verifSeccionSeleccionada($link_sel)) {
142             $this->_imagen->setSeleccionada(true);
143         }
144         return $this->_imagen->toHtml();
145     }
146
147     /**
148      * Carga el array con los objetos hijos de la seccion
149      *
150      * @param  array $hijos Array con los datos de los hijos de la seccion
151      *
152      * @return void
153      * @access private
154      */
155     function _cargarHijos($hijos)
156     {
157         if ($this->_tipoMenu == 'vertical'){
158             $tmp = new MLIB_Marco_MenuVertical($this->_configuracion);
159         }
160         elseif ($this->_tipoMenu == 'horizontal') {
161             $tmp = new MLIB_Marco_MenuHorizontal($this->_configuracion);
162         }
163         else {
164             $tmp = new MLIB_Marco_MenuOculto($this->_configuracion);
165         }
166         foreach ($hijos as $hijo) {
167             $hijo['alt'] = @$hijo['alt'] ? $hijo['alt'] : $hijo['nombre'];
168             $hijo['nombre'] = $this->_nombre.'-'.$hijo['nombre'];
169             $tmp->agregarComponente($hijo);
170         }
171         $this->_hijos = $tmp;
172     }
173
174     /**
175      * Funcion que se encarga de desserializar el array asociativo paginas-secciones.
176      *
177      * @return void
178      * @access private
179      */
180     function _desSerializarArraySecciones() 
181     {
182         $file_cache = strtr($this->_configuracion['directorios']['root'],'/','_');
183         $tmp = $this->_configuracion['directorios_fs']['cache'].'/'.ARRAYSECCIONES_SERIALIZADO.'_'.$file_cache;
184         
185         if (file_exists($tmp)) {
186             $s = implode("", @file($tmp));
187             return unserialize($s);
188         }
189         else {
190             return null;
191         }
192     }
193
194     /**
195      * Funcion que se encarga de verificar si la pagina a la cual se quiere 
196      * acceder pertenece a la seccion que estoy dibujando. Se utiliza como 
197      * agregado en toHtml.
198      * Devuelve 1 si pertenece a la seccion, en caso contrario 0.
199      *
200      * @param  string $link_sel Nombre de la pagina a la cual se quiere acceder.
201      *
202      * @return int
203      * @access public
204      */
205     function verifSeccionSeleccionada($link_sel) 
206     {
207         $tmp = $this->_desSerializarArraySecciones();
208         $retorno = 0;
209         if (isset($tmp) && array_key_exists($this->_nombre,$tmp)) {
210             foreach ($tmp[$this->_nombre] as $t) {
211                 if (rtrim($link_sel, '/') == rtrim($t, '/')) {
212                     $retorno = 1;
213                 }
214             }
215         }
216         return $retorno;
217     }
218     
219     /**
220      * Devuelve el html a mostrar en pantalla
221      *
222      * @param  string $link_sel Nombre de la seccion seleccionada
223      * @param  bool $ultimo Indica si es el ultimo componente del menu.....en caso de serlo, debe mostrar la imagen con codito
224      *
225      * @return string
226      * @access public
227      */
228     function toHtmlVertical($link_sel, $ultimo = false)
229     {
230         $style = "text-decoration:none";
231         
232         if (!$this->_configuracion['links']) {
233             $link_start = '';
234             $link_end   = '';
235         }
236         else {
237             $link_start = '<a href="'.$this->_configuracion['directorios']['root'].'/'.$this->_link.'" style="'.$style.'">';
238             $link_end   = '</a>';
239         }
240         
241         $sec = array ();
242         if ($this->verifSeccionSeleccionada($link_sel)) {
243             $sec[] = $link_start.'<img src="/MLIB/images/general_carpeta_f3" border="0">'.$link_end;
244         }
245         else {
246             $sec[] = $link_start.'<img src="/MLIB/images/general_carpeta" border="0">'.$link_end;
247         }
248         
249         $nombre = strstr($this->_nombre, '-');
250         $nombre = substr($nombre, 1);
251         $sec[] = '<font face="Arial, Helvetica, sans-serif" size="1"><p>'.$nombre.'</p></font>';
252         return $sec;
253     }
254 }
255 ?>