]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MLIB/Marco/MenuPrincipal.php
Se agrega un objeto que permite armar tablas html a partir de templates.
[mecon/meconlib.git] / lib / MLIB / Marco / MenuPrincipal.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: Thu May 15 18:36:01 2003
21 Autor:  Martin Marrese <mmarre@mecon.gov.ar>
22 -------------------------------------------------------------------------------
23 $Id$
24 -----------------------------------------------------------------------------*/
25
26 require_once 'HTML/Table.php';
27 require_once 'MLIB/HTML/Image.php';
28 require_once 'MLIB/Marco/MenuHorizontal.php';
29
30
31 /**
32  * Clase que se encarga del manejo del menu principal. Este menu es el de secciones general del sistema.
33  *
34  * @access public
35  */
36 class MLIB_Marco_MenuPrincipal extends MLIB_Marco_MenuHorizontal {
37     /**
38      * Contiene el objeto seccion que se encuentra seleccionada. Se utiliza para mostrar el menu.
39      *
40      * @var    Seccion $seccionSeleccionada
41      * @access private
42      */
43     var $_seccionSeleccionada = null;
44     
45     /**
46      * @param  array $configuracion Configuracion del sistema
47      *
48      * @return void
49      * @access public
50      */
51     function MLIB_Marco_MenuPrincipal($configuracion) 
52     {
53         parent::MLIB_Marco_Menu($configuracion);
54
55         if (!is_null($configuracion['secciones'] || $configuracion['secciones'] == '')) {
56             $this->_armarArraySecciones($this->_obtenerConfSecciones());
57             //Serializo el array asociativo de paginas-secciones
58 //                if (!file_exists($this->_configuracion['directorios']['root'].'/'.ARRAYSECCIONES_SERIALIZADO)) {
59                     $this->_serializarArraySecciones();                
60 //                }
61         }
62         
63     }
64
65     /**
66      * Funcion que se encarga de agregar el body a la seccion seleccionada
67      *
68      * @param  array $body 
69      *
70      * @return void
71      * @access public
72      */
73     function addBody($body) 
74     {
75         //ARMO EL MENU PRINCIPAL
76         $colspan = count($this->_componentes);
77         //Agrego el copete
78         $copete =& new MLIB_Marco_Copete 
79             (@$this->_configuracion['directorios']['imagenes'],
80              @$this->_configuracion['ayuda'], 
81              @$this->_configuracion['titulo_sistema']
82              );
83         $tmp = $this->_tabla->addRow(array($copete->toHtml()), 
84                 'align="center" bgcolor="#FFFFFF"');
85         $this->_tabla->updateCellAttributes($tmp, 0, 
86                 'colspan="'. $colspan .'"');
87         //Agrego las secciones
88         $tmp = $this->_tabla->addRow($this->_componentes, 
89                 'align="center" bgcolor="#CCCCCC"');
90         $width = intval (100 / $colspan);
91         for ($col=0; $col < $colspan; $col++) {
92             $this->_tabla->updateCellAttributes($tmp, $col,
93                     'width="'.$width.'%"');
94         }
95         //Agrego la linea de separacion
96         $tmp = $this->_tabla->addRow(array(new MLIB_HTML_Image(
97                         '/MLIB/images/general_linea.gif', str_repeat('=', 108)
98                         )),'align="center" height="1"');
99         $this->_tabla->updateCellAttributes($tmp, 0, 'colspan="'.$colspan.'"');
100
101         //BUSCO LA SECCION SELECCIONADA
102         foreach ($this->_secciones as $sec) { 
103             if ($sec->verifSeccionSeleccionada($_SERVER['PHP_SELF']))
104             {                                                                          
105                 $this->_seccionSeleccionada = $sec;
106                 break; //Salgo del foreach
107             }
108         }
109
110         //IMPORTANTE: ACA EMPIEZO A ACTUAR DIFERENTE SEGUN EL ESTILO DE MENU QUE
111         //SE SELECCIONE
112
113         //VOY POR LAS SUBSECCIONES, AGREGO EL MENU SI CORRESPONDE
114         if (isset($this->_seccionSeleccionada->_hijos)) {
115             $this->resultado[] = $this->_tabla;
116             $this->_seccionSeleccionada->_hijos->addBody(
117                     $body['body'],
118                     $this->_seccionSeleccionada->_nombre, 
119                     $body['menuVertical']
120                     );
121             foreach ($this->_seccionSeleccionada->_hijos->resultado AS $res) {
122                 $this->resultado[] = $res;
123             }
124         }
125         else {
126         //NO HAY MENUES DE MARCO
127             //Agrego el encabezado
128             if ($this->_seccionSeleccionada) {
129                 $this->_tabla->addRow(
130                         array(
131                             $this->_armarEncabezado($this->_seccionSeleccionada->_nombre.
132                                 $this->_configuracion['subtitulo'])
133                             ),'align="left" bgcolor="#FFFFFF" colspan="'. 
134                         $colspan .'"');
135                 $this->_tabla->addRow(array(
136                             new MLIB_HTML_Image('/MLIB/images/general_linea2.gif',
137                                 str_repeat('-', 108))),
138                         'border="0" align="center" colspan="'. $colspan .'"');
139             }
140             $this->resultado[] = $this->_tabla;
141             
142             //Si hay un menu vertical lo tengo en cuenta, sino tiro el contenido
143             //directamente
144             if ($body['menuVertical']) {
145                 $MENUVERTICAL = new HTML_Table ('width="760"');
146                 $cuerpo = '';
147                 if (is_array($body['body'])) {
148                     if ($this->_configuracion['espacios']) {
149                         $cuerpo.= '&nbsp;<BR>';
150                     }
151                     foreach ($body['body'] as $bod) {
152                         if (is_object($bod)) {
153                             if (method_exists($bod,'toHtml')) {
154                                 $cuerpo.= $bod->toHtml();
155                             } 
156                             else {
157                                 trigger_error('El metodo no existe! - '. 
158                                         get_class($bod).'::toHtml()', 
159                                         E_USER_WARNING);
160                             }
161                         } 
162                         else {
163                             $cuerpo.= $bod;
164                         }
165                     }
166                 } 
167                 else {
168                     $cuerpo = $body['body'];
169                 }
170                 $MENUVERTICAL->addRow(array($body['menuVertical'], $cuerpo),
171                         'valign="top"');
172                 $MENUVERTICAL->updateColAttributes(0, 'width="10%"');
173                 $this->resultado[] = $MENUVERTICAL;
174             }
175             else {
176                 //Agrego si corresponde el espacio al inicio
177                 if ($this->_configuracion['espacios']) {
178                     $this->resultado[] = '&nbsp;<BR>';
179                 }
180                 $this->resultado = array_merge($this->resultado, $body['body']);
181             }
182         }
183     }
184 }
185 ?>