logStatus=LOG_NONE; $this->queryMode=2; $this->defList = array(); $this->defVS = array(); $this->vDSN = array(); $this->templatesCompilationDir = 'templates_c/'; } public function __destruct() { //Almacenamos la configuración en la SESSION siempre que exista la aplicación (Cuando se cierra la aplicación no la guardamos) if(IgepSession::existeAplicacion($this->applicationName)) $_SESSION[$this->applicationName]['configuration'] = serialize(self::$_instance); } public static function getConfig() { //Cargamos el fichero de configuración del Framework try { //Comprobar que existe el fichero y cargarlo if (empty(self::$_instance))//Review: David y Toni: Clase Pear:Config para cargar fichero { $g_aplicacion = ConfigFramework::getApplicationName(); if(!isset($_SESSION[$g_aplicacion]['configuration'])) { $instance = new ConfigFramework(); //Leemos el fichero de configuración del Framework $fichero = './igep/gvHidraConfig.inc.xml'; $instance->_loadConfigFile($fichero); //Leemos el fichero de configuración del CUSTOM $customDirName =$instance->getCustomDirName(); $fichero = './igep/custom/'.$customDirName.'/gvHidraConfig.inc.xml'; $instance->_loadConfigFile($fichero); //Leemos el fichero de configuración de la APLICACIÓN $fichero = './gvHidraConfig.inc.xml'; $instance->_loadConfigFile($fichero); self::$_instance = $instance; $_SESSION[$g_aplicacion]['configuration'] = serialize($instance); } else { self::$_instance = unserialize($_SESSION[$g_aplicacion]['configuration']); } } return self::$_instance; } catch (Exception $e) { die('ConfigFramework::getConfig() EXCEPCION: errores en la lectura de los ficheros.'); } }//Fin getConfig (constructor singleton) /** * getCustomDirName:: Devuelve el nombre del subdirectorio de CUSTOM actual * * Devuelve el directorio que contiene la información de custom * * @access public */ public static function getCustomDirName() { if(empty(self::$_instance)) { return('cit.gva.es'); } return self::$_instance->customDirName; } /** * setCustomDirName:: Devuelve el nombre del subdirectorio de CUSTOM actual * * Fija el directorio que contiene la información de custom * * @access public * * @param string $dirName Cadena que indica el directorio de custom * */ public function setCustomDirName($dirName) { $this->customDirName = $dirName; } /** * getApplicationName:: Devuelve el nombre de la aplicación actual * * @return string Nombre de la aplicación * @access public */ public static function getApplicationName() { if(empty(self::$_instance)) { try { //REVIEW: Posibilidad, utilizar el directorio padre del Script como "nombre de aplicación" $fichero = './gvHidraConfig.inc.xml'; if (file_exists($fichero)) { $sXML = simplexml_load_file($fichero); $nombreApp = (string) $sXML->applicationName; unset($sXML);//Liberamos el recurso return($nombreApp); } else { die("getApplicationName::MUERE porque no existe el fichero $fichero"); } } catch (Exception $e) { die('getApplicationName::MUERE AL LEER EL FICHERO CONFIG'); }//Fin try-catch } return self::$_instance->applicationName; } /** * setApplicationName: Establece el nombre de aplicación * * Establece el nombre de aplicación actual * @access private * @param string $appName Cadena que indica el nombre de la aplicacion * */ private function setApplicationName($appName) { $this->applicationName = $appName; } /** * getAppVersion:: Devuelve la versión de la aplicación * * Devuelve el número de versión de la aplicación. En desarrollo devolverá HEAD. * @return string Texto con la versión de la aplicación * @access public */ public function getAppVersion() { return($this->applicationVersion); } /** * setApplicationName: Fija la versión que se esta ejecutando. * * Establece la versión de la aplicación que se esta ejecutando. * @access public * @param string $appVersion Cadena que indica la versión de la aplicación * */ public function setAppVersion($appVersion) { $this->applicationVersion = $appVersion; } /** * getCustomTitle:: Devuelve la cadena de personalización de la barra superior * * En la barra superior se ha designado un pequeño espacio para un texto personalizado. * Este método permite accder a dicho valor * @return string Texto de personalización de la barra superior * @access public */ public function getCustomTitle() { return($this->customTitle); } /** * setCustomTitle: Fija el texto personalizado de la barra de título * * @access public * @param string $customTitle Cadena con el breve texto de personalización * */ public function setCustomTitle($customTitle) { $this->customTitle = $customTitle; } /** * getLogStatus:: Devuelve el estado del log. * * Devuelve el estado del log en la aplicación. Los valores posibles son LOG_NONE, LOG_ERRORS, LOG_AUDIT y LOG_ALL. * @access public */ public function getLogStatus() { return($this->logStatus); } /** * setLogStatus: Fija el estado del log. * * Establece el estado del log. Los valores posibles son LOG_NONE, LOG_ERRORS, LOG_AUDIT y LOG_ALL. * @access public * @param string $status contiene el nuevo estado del log. * */ public function setLogStatus($status) { ($status>=LOG_NONE&&$status<=LOG_ALL)?$this->logStatus=$status:die('Error al fijar logStatus.'); } /** * getQueryMode:: Devuelve el valor del modo de consulta (ver propiedad para var posibles valores). * * Devuelve el valor del modo de consulta para saber de que modo se van a construir las Querys. * @access public */ public function getQueryMode() { return($this->queryMode); } /** * setQueryMode: Fija el estado del log. * * Establece el estado del log. Los valores posibles son LOG_NONE, LOG_ERRORS, LOG_AUDIT y LOG_ALL. * @access public * @param string $mode contiene el nuevo modo de consulta. * */ public function setQueryMode($mode) { ($mode>=0&&$mode<=3)?$this->queryMode=$mode:die('Error al fijar queryMode.'); } /** * getTemplatesCompilationDir:: Devuelve el directorio de templates_c * * Devuelve el directorio de compilacion de las plantillas de smarty. * @access public */ public function getTemplatesCompilationDir() { return($this->templatesCompilationDir); } /** * setTemplatesCompilationDir: Fija el directorio de templates_c * * Establece el directorio de compilacion de las plantillas de smarty. * @access public * @param string $dir directorio de compilacion de plantillas * */ public function setTemplatesCompilationDir($dir) { $this->templatesCompilationDir = $dir; } /* ------------------------------------------------------------------------ */ /* ----------------------------- METODOS PRIVADOS ------------------------- */ /* ------------------------------------------------------------------------ */ /** * _loadConfigFile: Carga un fichero de configuración XML * * Carga el fichero de configuración XML indicado por parámetro y asigna los valores * leídos en el mismo en la instancia.del objeto * @access private * @param string $fichero */ private function _loadConfigFile($fichero) { try { if (file_exists($fichero)) { $sXML = simplexml_load_file($fichero); if ($sXML->applicationName) $this->applicationName = (string) $sXML->applicationName; if ($sXML->templatesCompilationDir) $this->templatesCompilationDir = (string) $sXML->templatesCompilationDir; if ($sXML->appVersion) $this->applicationVersion = (string) $sXML->appVersion; if ($sXML->customTitle) $this->customTitle = utf8_decode((string) $sXML->customTitle); if ($sXML->customDirName) $this->customDirName = (string) $sXML->customDirName; //logSettings if ($sXML->logSettings) { $vAtributos = $sXML->logSettings->attributes(); $estadoLog = (string) $vAtributos['status']; switch ($estadoLog) { case 'LOG_ERRORS': $this->logStatus = LOG_ERRORS; break; case 'LOG_AUDIT': $this->logStatus = LOG_AUDIT; break; case 'LOG_ALL': $this->logStatus = LOG_ALL; break; default: $this->logStatus = LOG_NONE; }//Fin switch }//Fin if logSettings //queryMode if ($sXML->queryMode) { $vAtributos = $sXML->queryMode->attributes(); $queryMode = (string) $vAtributos['status']; switch (trim($queryMode)) { case '1': $this->queryMode = 1; break; case '2': $this->queryMode = 2; break; case '3': $this->queryMode = 3; break; case '4': $this->queryMode = 4; break; default: $this->queryMode = 2; } }//Fin if queryMode //DSNZone if ($sXML->DSNZone) { foreach ($sXML->DSNZone->dbDSN as $db) { $vAtributosDB = $db->attributes(); $idDSN = (string) $vAtributosDB['id']; $dbType = (string) $vAtributosDB['sgbd']; $dbHost= (string) $db->dbHost; $dbPort= (string) $db->dbPort; $dbDataBase= (string) $db->dbDatabase; $dbUser =(string) $db->dbUser; $dbPassword =(string) $db->dbPassword; $parse_DBType = $this->_parseDBType($dbType); if ($dbType=='thin' or $dbType=='oracle-thin') $this->vDSN[$idDSN] = array ( 'phptype' => $parse_DBType, 'username' => $dbUser, 'password' => $dbPassword, 'hostspec' => "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$dbHost)(PORT=$dbPort))(CONNECT_DATA=(SID=$dbDataBase)))", ); else $this->vDSN[$idDSN] = array ( 'phptype' => $parse_DBType, 'username' => $dbUser, 'password' => $dbPassword, 'hostspec' => $dbHost, 'port' => $dbPort, 'database' => $dbDataBase, ); }//Fin foreach DB foreach ($sXML->DSNZone->wsDSN as $ws) { $vAtributosWS = $ws->attributes(); $idWS = (string) $vAtributosWS['id']; $uriWSDL = (string) $ws->uriWSDL;; $wsUser =(string) $ws->wsUser; $wsPassword =(string) $ws->wsPassword; $this->vDSN[$idWS] = array ( 'uriWSDL' => $uriWSDL, 'username' => $wsUser, 'password' => $wsPassword, ); }//Fin foreach WS }//Fin if DSNZone } else //REVIEW tratamiento de Excepciones { die('_loadConfigFile::MUERE AL LEER EL FICHERO CONFIG'); } } catch (Exception $e) { die('_loadConfigFile::Error en carga de fichero'); } }//Fin _loadConfigFile /** * _parseDBType: Dada una cadena con el nombre del SGBD devuelve el nombre canónico * * @access private * @param string $sgbdType El SGBD (oracle, oci, oci8, thin, postgres, pgsql, mysql, mysqli... */ private function _parseDBType($sgbdType) { $retorno =''; switch (strtolower(trim($sgbdType))) { case 'postgres': case 'pgsql': $retorno = 'pgsql'; break; case 'oci8': case 'oci': case 'oracle': case 'thin': case 'oracle-thin': $retorno = 'oci8'; break; case 'mysqli': case 'mysql': $retorno = 'mysqli'; break; } return($retorno); } /** * setDefList: fija la definición de una lista desplegable * * Carga la definición de una lista desplegable en el objeto de configuración para * que posteriormente pueda ser utilizada en cualquier parte de la aplicación. * @access public * @param string $key clave con la que se identificará la lista en la aplicación * @param string $query consulta que se ejecutará al obtener la lista * @return none */ function setDefList($key,$query) { $this->defList[$key] = $query; return 0; } /** * getDefList: devuelve la definición de una lista desplegable * * Devuelve la definición de una lista desplegable. Concretamente devuelve la sentencia SELECT con * la que se obtienen los resultados deseados. * @access public * @param string $key clave con la que se identifica la lista en la aplicación * @return string */ function getDefList($key) { if(isset($this->defList[$key])) return $this->defList[$key]; return -1; } /** * getListKeys: devuelve las claves de las listas desplegables * * @access public * @return array */ function getListKeys($key) { return array_keys($this->defList); } /** * setDefVS: fija la definición de una ventana de seleccion * * Carga la definición de una ventana de seleccion en el objeto de configuración para * que posteriormente pueda ser utilizada en cualquier parte de la aplicación. * @access public * @param string $key clave con la que se identificará la lista en la aplicación * @param string $query consulta con la que obtendremos el resultado * @param array $fields campos de busqueda. Campos sobre los que se realizará el filtro. * @return none */ function setDefVS($key,$query,$fields=null) { $this->defVS[$key]['consulta'] = $query; if(!empty($fields)) $this->defVS[$key]['camposBusqueda'] = $fields; return 0; } /** * getDefVS: devuelve la definición de una ventana de seleccion * * Devuelve la definición de una ventana de seleccion. * @access public * @param string $key clave con la que se identifica la lista en la aplicación * @return array */ function getDefVS($key) { if(isset($this->defVS[$key])) return $this->defVS[$key]; return -1; } /** * getVSKeys: devuelve las claves de las ventanas de seleccion * * @access public * @return array */ function getVSKeys() { return array_keys($this->defVS); } /** * setDSN: almacena un vector de conexion a una BD * * Guarda en la configuración una conexión a la BD que posteriormente * se utilizará en la aplicacion. * @access public * @param string $key clave con la que se identificará el array de conexion * @param string $vdsn array de conexion basado en la estructura PEAR * @return none */ function setDSN($key, $vdsn) { $this->vDSN[$key] = $vdsn; } /** * getDefVS: devuelve el array de conexion, * * Dada un ID devuelve el array de conexion correspondiente * @access public * @param string $key clave con la que se identifica el array de conexion * @return array */ function getDSN($key) { if(isset($this->vDSN[$key])) return $this->vDSN[$key]; return null; } }//Fin ConfigFramework ?>