X-Git-Url: https://git.llucax.com/mecon/ai.git/blobdiff_plain/6e0df7b212f1a721cf8df887c629b67957871225..5d1175ef0a3555a5042a7ab07f0e67db544b4685:/lib/AI/Sistema.php diff --git a/lib/AI/Sistema.php b/lib/AI/Sistema.php index 7a54776..2f65ea8 100644 --- a/lib/AI/Sistema.php +++ b/lib/AI/Sistema.php @@ -27,8 +27,17 @@ // $Id$ // +// +X2C includes +require_once 'AI/DBObject.php'; +// ~X2C + require_once 'AI/Error.php'; +/** + * Archivo de configuración. + */ +define('AI_SISTEMA_CONFFILE', dirname(__FILE__).'/Sistema.ini'); + // +X2C Class 416 :AI_Sistema /** * Sistema. @@ -36,7 +45,7 @@ require_once 'AI/Error.php'; * @package AI * @access public */ -class AI_Sistema { +class AI_Sistema extends AI_DBObject { /** * ID del sistema (ID en SAMURAI). * @@ -46,12 +55,28 @@ class AI_Sistema { var $sistema = 0; /** - * ?ono del sistema. + * Nombre del sistema (sólo de lectura, extraído de SAMURAI). + * + * @var string $nombre + * @access public + */ + var $nombre = ''; + + /** + * Descripción del sistema (sólo de lectura, extraído de SAMURAI). * - * @var HTML_Imagen $icono + * @var string $descripcion * @access public */ - var $icono = null; + var $descripcion = ''; + + /** + * Ícono del sistema. + * + * @var string $icono + * @access public + */ + var $icono = ''; /** * Enlace a donde se encuentra el sistema. @@ -77,6 +102,12 @@ class AI_Sistema { */ var $habilitado = true; + /** + * @var string $tipo + * @access public + */ + var $tipo = 'php'; + // ~X2C // +X2C Operation 466 @@ -88,28 +119,30 @@ class AI_Sistema { */ function AI_Sistema($sistema = 0) // ~X2C { - $this->sistema = $sistema; + parent::AI_DBObject($sistema, AI_SISTEMA_CONFFILE); } // -X2C - // +X2C Operation 460 + // +X2C Operation 536 /** - * @param mixed $db Base de datos o Resultado a utilizar. + * @param mixed $db Base de datos o resultado de donde cargar el sistema. * * @return PEAR_Error * @access public */ function cargar($db) // ~X2C { - $sistema = intval($this->sistema); + $id_field = $this->conf['id']; + $id = intval($this->$id_field); if (is_a($db, 'db_result')) { $result = $db; + $db = $result->dbh; // Si no es un resultado, hago el query. } else { $result = $db->query( - "SELECT * - FROM sistema - WHERE sistema = $sistema" + "SELECT AI.*, SA.nombre_sistema as nombre, SA.desc_sistema as descripcion + FROM {$this->conf['base']}.{$this->conf['tabla']} as AI, samurai.sistema as SA + WHERE AI.$id_field = $id AND AI.$id_field = SA.id_sistema" ); if (DB::isError($result)) { return $result; @@ -119,15 +152,12 @@ class AI_Sistema { $row = $result->fetchRow(DB_FETCHMODE_ASSOC); if (!$row) { return new AI_Error(AI_ERROR_NO_RESULTADOS, - "No hay más resultados en la DB [sistema=$sistema]"); + "No hay más resultados en la DB [id=$id]"); } // Asigno valores al objeto. - extract($row); - $this->sistema = $sistema; - $this->icono = $icono; # FIXME - new HTML_Icono (o no?) - $this->link = $link; - $this->link_ayuda = $link_ayuda; - $this->habilitado = $habilitado; + foreach ($row as $key => $val) { + $this->$key = $val; + } return true; } // -X2C @@ -135,75 +165,110 @@ class AI_Sistema { // +X2C Operation 459 /** * @param DB $db DB donde guardar. + * @param bool $nuevo Si es true, se fuerza a guardar el servicio como nuevo. * * @return PEAR_Error * @access public */ - function guardar($db) // ~X2C + function guardar($db, $nuevo = false) // ~X2C { - $sistema = intval($this->sistema); - $where = ''; - $datos = array( + $datos = array( 'icono' => $this->icono, 'link' => $this->link, 'link_ayuda' => $this->link_ayuda, 'habilitado' => $this->habilitado ? 1 : 0, + 'tipo' => $this->tipo, ); - // FIXME - buscar otra forma de distinguir entre INSERT y UPDATE. - if ($sistema) { - $accion = DB_AUTOQUERY_UPDATE; - $where = "sistema = $sistema"; - } else { - $accion = DB_AUTOQUERY_INSERT; - $sistema = $db->nextId('sistema'); - if (DB::isError($sistema)) { - return $sistema; - } - // Asigno el nuevo id de sistema. - $this->sistema = $sistema; - $datos['sistema'] = $sistema; - } - $res = $db->autoExecute('sistema', $datos, $accion, $where); - if (DB::isError($res)) { - return $res; + $err = parent::guardar($db, $datos, $nuevo); + if (PEAR::isError($err)) { + return $err; } - return true; } // -X2C - // +X2C Operation 461 + // +X2C Operation 528 /** - * @param DB $db DB de donde borrar. + * Obtiene un array con los identificadores de los sistemas cargados. * - * @return PEAR_Error + * @param DB $db Base de datos de la cual obtener los sistemas. + * @param string $where Clausula WHERE para filtrar la búsqueda. + * + * @return array * @access public + * @static */ - function borrar($db) // ~X2C + function getSistemasArray($db, $where = '') // ~X2C { - $sistema = intval($this->sistema); - if ($sistema) { - $res = $db->query( - "DELETE FROM sistema WHERE sistema = $sistema"); - if (DB::isError($res)) { - return $res; - } - return true; + static $conf; + if (!$conf) { + $conf = parse_ini_file(AI_SISTEMA_CONFFILE, true); } - return PEAR::raiseError("No hay un sistema válido para borrar"); + extract($conf); + $query = " + SELECT SA.id_sistema, SA.nombre_sistema + FROM samurai.sistema as SA + LEFT JOIN $base.$tabla as AI + ON AI.sistema = SA.id_sistema + WHERE AI.sistema IS NULL AND SA.estado = 1"; + if ($where) { + $query .= " AND $where"; + } + $query .= " ORDER BY SA.nombre_sistema ASC"; + return $db->getAssoc($query); } // -X2C - // +X2C Operation 502 + // +X2C Operation 531 /** - * @return Sistema + * @param DB $db Base de datos de donde obtener los sistemas. + * @param bool $soloHabilitados Clausula WHERE para filtrar la búsqueda. + * @param string $where Clausula WHERE para filtrar la búsqueda. + * + * @return array * @access public + * @static */ - function __clone() // ~X2C + function getSistemas($db, $soloHabilitados = true, $where = '') // ~X2C { - return $this; + static $conf; + if (!$conf) { + $conf = parse_ini_file(AI_SISTEMA_CONFFILE, true); + } + $id_field = $conf['id']; + $tabla = $conf['base'].'.'.$conf['tabla']; + $query = " + SELECT AI.*, SA.nombre_sistema as nombre, SA.desc_sistema as descripcion + FROM $tabla as AI, samurai.sistema as SA + WHERE SA.id_sistema = AI.sistema AND SA.estado = 1"; + if ($soloHabilitados) { + $query .= ' AND AI.habilitado = 1'; + } + if ($where) { + $query .= " AND $where"; + } + $query .= ' ORDER BY nombre ASC'; + $result = $db->query($query); + if (DB::isError($result)) { + return $result; + } + $sistemas = array(); + $sistema = new AI_Sistema; + $err = $sistema->cargar($result); + while (!PEAR::isError($err)) { + $sistemas[] = $sistema->__clone(); + $err = $sistema->cargar($result); + } + // Si no hay mas resultados (terminó bien) devuelve el array de + // sistemas. + if (AI_Error::isError($err) + and $err->getCode() == AI_ERROR_NO_RESULTADOS) { + return $sistemas; + } + // Si no, se devuelve el error. + return $err; } // -X2C } // -X2C Class :AI_Sistema -?> +?> \ No newline at end of file