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