]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MLIB/Marco.php
Se agrega un ejemplo sobre la utilizacion de los PDF con la nueva clase
[mecon/meconlib.git] / lib / MLIB / Marco.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 'PEAR.php';
27 require_once 'MLIB/Marco/Copete.php';
28 require_once 'MLIB/Marco/Menu.php';
29 require_once 'MLIB/Marco/MenuPrincipal.php';
30
31 //Agregado para el uso de HTML_Page (Uso la version Original de Pear)
32 require_once 'MLIB/HTML/Page.php';
33 require_once 'HTML/Table.php';
34
35 //Defino los directorios por default
36 define ('DIR_IMAGENES', 'images');
37 define ('DIR_ESTILOS' , 'css'   );
38 define ('DIR_JS'      , 'js'    );
39 define ('DIR_WWW'     , 'www'   );
40 define ('DIR_CACHE'   , '/tmp'  );
41
42 //Defino las constantes
43 define ('SCRIPT_DIR_BASE', '/MLIB/js/' );
44 define ('ESTILO_DIR_BASE', '/MLIB/css/');
45 define ('SCRIPT_GENERICO', 'marco.js'   );
46 define ('ESTILO_GENERICO', 'marco.css'  );
47
48 /**
49  * Clase encargada del manejo del Marco de los sistemas.
50  *
51  * @access public
52  */
53 class MLIB_Marco extends MLIB_HTML_Page {
54     /**
55      * Array con los datos de configuracion del sistema.
56      *
57      * @var    array $configuracion
58      * @access private
59      */
60     var $_configuracion;
61
62     /**
63      * Mantiene el estado de los espacios
64      *
65      * @var    bool $espacios
66      * @access private
67      */
68     var $_espacios = true;
69
70     /**
71      * Menu vertical para agregar en la pantalla.
72      *
73      * @var    mixed $menuVertical
74      * @access private
75      */
76     var $_menuVertical = null;
77
78     /**
79      * Mantiene el estado de los links en la pagina. (True habilitados, False no)
80      *
81      * @var    bool $links
82      * @access private
83      */
84     var $_links = true;
85
86     /**
87      * Constructor. Recibe como parametro el path del archivo de configuracion
88      *
89      * @param  string $arch_configuracion indicacion de la ubicacion y nombre del archivo de configuracion
90      * @param  MLIB_Perm $obj_permiso Objeto Permisos
91      *
92      * @return void
93      * @access public
94      */
95     function MLIB_Marco($arch_configuracion, $obj_permiso = null) 
96     {
97         //Creo el objeto pagina
98         parent::MLIB_HTML_Page();
99         //Obtengo y arreglo la configuracion
100         $this->_obtenerConfiguracion($arch_configuracion);
101         //Agrego el objeto permiso a la configuracion
102         if (@$obj_permiso) {
103             $this->_configuracion['obj_permiso'] = $obj_permiso;    
104         }
105         //Agrego el estilo y el script genericos
106         $this->addScript(SCRIPT_DIR_BASE.SCRIPT_GENERICO);
107         $this->addStyleSheet(ESTILO_DIR_BASE.ESTILO_GENERICO);
108         //Seteo el titulo
109         $this->setTitle($this->_configuracion['titulo_sistema']);
110         $this->_configuracion['subtitulo'] = '';
111         $this->_configuracion['titulo_sistema2'] = '';
112     }
113
114     /**
115      * Funcion que se encarga de la obtencion y generacion del array de configuracion. Recibe como parametro el path del archivo de configuracion
116      *
117      * @param  string $archivo Archivo de configuracion del sistema
118      *
119      * @return array
120      * @access private
121      */
122     function _obtenerConfiguracion($archivo) 
123     {
124         $this->_configuracion = include $archivo;    
125         //Verifico que existan los directorios, si no es asi los reemplazo por los defaults
126         if (!@$this->_configuracion['directorios']['root']) {
127             trigger_error('Es obligatorio ingresar el directorio root!', E_USER_ERROR); 
128         }
129         if (!@$this->_configuracion['directorios']['imagenes']){
130             $this->_configuracion['directorios']['imagenes'] = $this->_configuracion['directorios']['root'].'/'.DIR_IMAGENES;
131         }
132         if (!@$this->_configuracion['directorios']['estilos']){
133             $this->_configuracion['directorios']['estilos'] = $this->_configuracion['directorios']['root'].'/'.DIR_ESTILOS;
134         }
135         if (!@$this->_configuracion['directorios']['js']){
136             $this->_configuracion['directorios']['js'] = $this->_configuracion['directorios']['root'].'/'.DIR_JS;
137         }        
138         if (!@$this->_configuracion['directorios']['www']){
139             $this->_configuracion['directorios']['www'] = $this->_configuracion['directorios']['root'].'/'.DIR_WWW;
140         }        
141         if (!@$this->_configuracion['directorios_fs']['cache']){
142             $this->_configuracion['directorios_fs']['cache'] = DIR_CACHE;
143         }         
144     }
145
146     /**
147      * Redefinicion de la funcion que permite agregar objetos o html al body de la pagina
148 Si es un objeto debe tener un metodo toHtml y opcionalmente puede tener un getCSS.
149 @deprecated
150      *
151      * @param  Mixed $body Mixed. Recibe el contenido a agregar como body de la pagina
152      *
153      * @return void
154      * @access public
155      */
156     function addBody($body) 
157     {
158         $this->addBodyContent($body);
159     }
160
161     /**
162      * Funcion que permite concatenar lo pasado como parametro al titulo del sistema
163      *
164      * @param  string $titulo String que se quiere agregar al titulo del sistema
165      *
166      * @return void
167      * @access public
168      */
169     function addTitle($titulo) 
170     {
171         $this->_configuracion['titulo_sistema2'].= ' - '.$titulo;
172     }
173
174     /**
175      * Setea la variable que define si hay que separar el body del menu
176      *
177      * @param  bool $espacios Si es verdadero agrega los espacios, sino los elimina
178      *
179      * @return void
180      * @access public
181      */
182     function setEspacios($espacios = true) 
183     {
184         $this->_espacios = $espacios;
185     }
186
187     /**
188      * Agrega un menu vertical a la izquierda en la pantalla.
189      *
190      * @param  mixed $menuVertical Objeto u Html que representa el menu a mostrar.
191      *
192      * @return void
193      * @access public
194      */
195     function addMenuVertical($menuVertical) 
196     {
197         if ((is_object($menuVertical)) && (method_exists($menuVertical, 'getcss'))) {
198             $this->addStyleSheet($menuVertical->getCSS());
199         }
200         $this->_menuVertical = $menuVertical;
201     }
202
203     /**
204      * Permite habilitar o deshabilitar los links de una pagina (todos)
205      *
206      * @param  bool $param True habilita los links, False no.
207      *
208      * @return void
209      * @access public
210      */
211     function habilitarLinks($param = true) 
212     {
213         $this->_links = $param;
214     }
215
216     /**
217      * Devuelve el html de la pagina
218      *
219      * @return string
220      * @access public
221      */
222     function toHTML() 
223     {
224         //Seteo el titulo de la pagina
225         parent::setTitle($this->_configuracion['titulo_sistema'].$this->_configuracion['titulo_sistema2']);
226         //Agrego la opcion seleccionada de links a la configuracion 
227         $this->_configuracion['links']    = $this->_links;
228         //Agrego la opcion seleccionada de espacios a la configuracion 
229         $this->_configuracion['espacios'] = $this->_espacios;
230         //Creo el menu principal
231         $menu = new MLIB_Marco_MenuPrincipal ($this->_configuracion);
232         //Agrego el contenido de la pagina
233         $body = array ( 'body' => $this->_body, 'menuVertical' => $this->_menuVertical);
234                                   //Page
235         //Agrego el contenido al menu
236         $menu->addBody($body);       
237         //Agrego el Marco completo a Page
238         $this->setBody('<div style="width: 760px" align="left">');
239         foreach ($menu->resultado AS $res) {
240             $this->addBodyContent($res);
241         }
242         $this->addBodyContent('</div>');
243         return parent::toHTML();
244     }
245
246     /**
247      * Funcion que permite concatenar lo pasado como parametro al titulo del sistema
248      *
249      * @param  string $subtitulo Subtitulo a agregar
250      *
251      * @return void
252      * @access public
253      */
254     function addSubTitle($subtitulo) 
255     {
256         if (is_a($subtitulo, 'MLIB_html_link')) {
257             $subtitulo->updateAttributes(
258                 array('class' => 'MLIB_marco_subtitle'));
259         }
260         if (method_exists($subtitulo, 'tohtml')) {
261             $subtitulo = $subtitulo->toHtml();
262         }
263         $this->_configuracion['subtitulo'] .= ' - ' . $subtitulo;
264     }
265
266     /**
267      * Concatena lo pasado por parametro al titulo del sistema
268      *
269      * @param  string $titulo Titulo a agregar. Si se pasa vacio se borra lo que pudiera estar
270      *
271      * @return void
272      * @access public
273      */
274     function setTitle($titulo = '') 
275     {
276         $this->_configuracion['titulo_sistema2'] = ($titulo) ? ' - '.$titulo :
277             '';
278     }
279
280     /**
281      * Concatena lo pasado por parametro al titulo de seccion
282      *
283      * @param  string $subtitulo Setea el subtitulo. Si se pasa vacio borra lo que pudiera estar.
284      *
285      * @return void
286      * @access public
287      */
288     function setSubtitle($subtitulo = '') 
289     {
290         $this->_configuracion['subtitulo'] = ($subtitulo) ? ' - '.$subtitulo :
291             '';
292     }
293
294     /**
295      * Permite hacer que en el copete aparezca un icono de ayuda, en un lugar predefinido. Sobreescribe lo seteado anteriormente por cualquier metodo.
296      *
297      * @param  mixed $ayuda Objeto MLIB_HTML_Link o string para utilizar en el map.
298      *
299      * @return void
300      * @access public
301      */
302     function setAyuda($ayuda) 
303     {
304         $this->_configuracion['ayuda'] = $ayuda;
305     }
306
307     /**
308      * Permite obtener el array de configuracion completo. En caso de recibir una clave como parametro devuelve su valor. Solo se tienen en cuenta las claves del primer nivel.
309      *
310      * @param  string $clave Clave del array de configuracion a obtener.
311      *
312      * @return mixed
313      * @access public
314      */
315     function getConf($clave = null) 
316     {
317         if ($clave) {
318             return @$this->_configuracion[$clave];
319         }
320         else {
321             return $this->_configuracion;
322         }
323     }
324 }
325 ?>