+<?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
+-------------------------------------------------------------------------------
+ Ministerio de EconomÃa
+ meconlib
+-------------------------------------------------------------------------------
+This file is part of meconlib.
+
+meconlib is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option)
+any later version.
+
+meconlib is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License; if not,
+write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+Boston, MA 02111-1307 USA
+-------------------------------------------------------------------------------
+Creado: Mon Apr 14 16:23:22 2003
+Autor: Martin Marrese <mmarre@mecon.gov.ar>
+-------------------------------------------------------------------------------
+$Id$
+-----------------------------------------------------------------------------*/
+
+require_once 'PEAR.php';
+require_once 'MECON/Marco/Copete.php';
+require_once 'MECON/Marco/Menu.php';
+require_once 'MECON/Marco/MenuPrincipal.php';
+
+//Agregado para el uso de HTML_Page (Uso la version Original de Pear)
+require_once 'MECON/HTML/Page.php';
+require_once 'HTML/Table.php';
+
+//Defino los directorios por default
+define ('DIR_IMAGENES', 'images');
+define ('DIR_ESTILOS' , 'css' );
+define ('DIR_JS' , 'js' );
+define ('DIR_WWW' , 'www' );
+define ('DIR_CACHE' , '/tmp' );
+
+//Defino las constantes
+define ('SCRIPT_DIR_BASE', '/MECON/js/' );
+define ('ESTILO_DIR_BASE', '/MECON/css/');
+define ('SCRIPT_GENERICO', 'marco.js' );
+define ('ESTILO_GENERICO', 'marco.css' );
+
+/**
+ * Clase encargada del manejo del Marco de los sistemas.
+ *
+ * @access public
+ */
+class MECON_Marco extends MECON_HTML_Page {
+ /**
+ * Array con los datos de configuracion del sistema.
+ *
+ * @var array $configuracion
+ * @access private
+ */
+ var $_configuracion;
+
+ /**
+ * Mantiene el estado de los espacios
+ *
+ * @var bool $espacios
+ * @access private
+ */
+ var $_espacios = true;
+
+ /**
+ * Menu vertical para agregar en la pantalla.
+ *
+ * @var mixed $menuVertical
+ * @access private
+ */
+ var $_menuVertical = null;
+
+ /**
+ * Mantiene el estado de los links en la pagina. (True habilitados, False no)
+ *
+ * @var bool $links
+ * @access private
+ */
+ var $_links = true;
+
+ /**
+ * Constructor. Recibe como parametro el path del archivo de configuracion
+ *
+ * @param string $arch_configuracion indicacion de la ubicacion y nombre del archivo de configuracion
+ * @param MECON_Perm $obj_permiso Objeto Permisos
+ *
+ * @return void
+ * @access public
+ */
+ function MECON_Marco($arch_configuracion, $obj_permiso = null)
+ {
+ //Creo el objeto pagina
+ parent::MECON_HTML_Page();
+ //Obtengo y arreglo la configuracion
+ $this->_obtenerConfiguracion($arch_configuracion);
+ //Agrego el objeto permiso a la configuracion
+ if (@$obj_permiso) {
+ $this->_configuracion['obj_permiso'] = $obj_permiso;
+ }
+ //Agrego el estilo y el script genericos
+ $this->addScript(SCRIPT_DIR_BASE.SCRIPT_GENERICO);
+ $this->addStyleSheet(ESTILO_DIR_BASE.ESTILO_GENERICO);
+ //Seteo el titulo
+ $this->setTitle($this->_configuracion['titulo_sistema']);
+ $this->_configuracion['subtitulo'] = '';
+ $this->_configuracion['titulo_sistema2'] = '';
+ }
+
+ /**
+ * Funcion que se encarga de la obtencion y generacion del array de configuracion. Recibe como parametro el path del archivo de configuracion
+ *
+ * @param string $archivo Archivo de configuracion del sistema
+ *
+ * @return array
+ * @access private
+ */
+ function _obtenerConfiguracion($archivo)
+ {
+ $this->_configuracion = include $archivo;
+ //Verifico que existan los directorios, si no es asi los reemplazo por los defaults
+ if (!@$this->_configuracion['directorios']['root']) {
+ trigger_error('Es obligatorio ingresar el directorio root!', E_USER_ERROR);
+ }
+ if (!@$this->_configuracion['directorios']['imagenes']){
+ $this->_configuracion['directorios']['imagenes'] = $this->_configuracion['directorios']['root'].'/'.DIR_IMAGENES;
+ }
+ if (!@$this->_configuracion['directorios']['estilos']){
+ $this->_configuracion['directorios']['estilos'] = $this->_configuracion['directorios']['root'].'/'.DIR_ESTILOS;
+ }
+ if (!@$this->_configuracion['directorios']['js']){
+ $this->_configuracion['directorios']['js'] = $this->_configuracion['directorios']['root'].'/'.DIR_JS;
+ }
+ if (!@$this->_configuracion['directorios']['www']){
+ $this->_configuracion['directorios']['www'] = $this->_configuracion['directorios']['root'].'/'.DIR_WWW;
+ }
+ if (!@$this->_configuracion['directorios_fs']['cache']){
+ $this->_configuracion['directorios_fs']['cache'] = DIR_CACHE;
+ }
+ }
+
+ /**
+ * Redefinicion de la funcion que permite agregar objetos o html al body de la pagina
+Si es un objeto debe tener un metodo toHtml y opcionalmente puede tener un getCSS.
+@deprecated
+ *
+ * @param Mixed $body Mixed. Recibe el contenido a agregar como body de la pagina
+ *
+ * @return void
+ * @access public
+ */
+ function addBody($body)
+ {
+ $this->addBodyContent($body);
+ }
+
+ /**
+ * Funcion que permite concatenar lo pasado como parametro al titulo del sistema
+ *
+ * @param string $titulo String que se quiere agregar al titulo del sistema
+ *
+ * @return void
+ * @access public
+ */
+ function addTitle($titulo)
+ {
+ $this->_configuracion['titulo_sistema2'].= ' - '.$titulo;
+ }
+
+ /**
+ * Setea la variable que define si hay que separar el body del menu
+ *
+ * @param bool $espacios Si es verdadero agrega los espacios, sino los elimina
+ *
+ * @return void
+ * @access public
+ */
+ function setEspacios($espacios = true)
+ {
+ $this->_espacios = $espacios;
+ }
+
+ /**
+ * Agrega un menu vertical a la izquierda en la pantalla.
+ *
+ * @param mixed $menuVertical Objeto u Html que representa el menu a mostrar.
+ *
+ * @return void
+ * @access public
+ */
+ function addMenuVertical($menuVertical)
+ {
+ if ((is_object($menuVertical)) && (method_exists($menuVertical, 'getcss'))) {
+ $this->addStyleSheet($menuVertical->getCSS());
+ }
+ $this->_menuVertical = $menuVertical;
+ }
+
+ /**
+ * Permite habilitar o deshabilitar los links de una pagina (todos)
+ *
+ * @param bool $param True habilita los links, False no.
+ *
+ * @return void
+ * @access public
+ */
+ function habilitarLinks($param = true)
+ {
+ $this->_links = $param;
+ }
+
+ /**
+ * Devuelve el html de la pagina
+ *
+ * @return string
+ * @access public
+ */
+ function toHTML()
+ {
+ //Seteo el titulo de la pagina
+ parent::setTitle($this->_configuracion['titulo_sistema'].$this->_configuracion['titulo_sistema2']);
+ //Agrego la opcion seleccionada de links a la configuracion
+ $this->_configuracion['links'] = $this->_links;
+ //Agrego la opcion seleccionada de espacios a la configuracion
+ $this->_configuracion['espacios'] = $this->_espacios;
+ //Creo el menu principal
+ $menu = new MECON_Marco_MenuPrincipal ($this->_configuracion);
+ //Agrego el contenido de la pagina
+ $body = array ( 'body' => $this->_body, 'menuVertical' => $this->_menuVertical);
+ //Page
+ //Agrego el contenido al menu
+ $menu->addBody($body);
+ //Agrego el Marco completo a Page
+ $this->setBody('<div style="width: 760px" align="left">');
+ foreach ($menu->resultado AS $res) {
+ $this->addBodyContent($res);
+ }
+ $this->addBodyContent('</div>');
+ return parent::toHTML();
+ }
+
+ /**
+ * Funcion que permite concatenar lo pasado como parametro al titulo del sistema
+ *
+ * @param string $subtitulo Subtitulo a agregar
+ *
+ * @return void
+ * @access public
+ */
+ function addSubTitle($subtitulo)
+ {
+ if (is_a($subtitulo, 'mecon_html_link')) {
+ $subtitulo->updateAttributes(
+ array('class' => 'mecon_marco_subtitle'));
+ }
+ if (method_exists($subtitulo, 'tohtml')) {
+ $subtitulo = $subtitulo->toHtml();
+ }
+ $this->_configuracion['subtitulo'] .= ' - ' . $subtitulo;
+ }
+
+ /**
+ * Concatena lo pasado por parametro al titulo del sistema
+ *
+ * @param string $titulo Titulo a agregar. Si se pasa vacio se borra lo que pudiera estar
+ *
+ * @return void
+ * @access public
+ */
+ function setTitle($titulo = '')
+ {
+ $this->_configuracion['titulo_sistema2'] = ($titulo) ? ' - '.$titulo :
+ '';
+ }
+
+ /**
+ * Concatena lo pasado por parametro al titulo de seccion
+ *
+ * @param string $subtitulo Setea el subtitulo. Si se pasa vacio borra lo que pudiera estar.
+ *
+ * @return void
+ * @access public
+ */
+ function setSubtitle($subtitulo = '')
+ {
+ $this->_configuracion['subtitulo'] = ($subtitulo) ? ' - '.$subtitulo :
+ '';
+ }
+
+ /**
+ * Permite hacer que en el copete aparezca un icono de ayuda, en un lugar predefinido. Sobreescribe lo seteado anteriormente por cualquier metodo.
+ *
+ * @param mixed $ayuda Objeto MECON_HTML_Link o string para utilizar en el map.
+ *
+ * @return void
+ * @access public
+ */
+ function setAyuda($ayuda)
+ {
+ $this->_configuracion['ayuda'] = $ayuda;
+ }
+
+ /**
+ * 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.
+ *
+ * @param string $clave Clave del array de configuracion a obtener.
+ *
+ * @return mixed
+ * @access public
+ */
+ function getConf($clave = null)
+ {
+ if ($clave) {
+ return @$this->_configuracion[$clave];
+ }
+ else {
+ return $this->_configuracion;
+ }
+ }
+}
+?>
\ No newline at end of file