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