// $Id$
//
+require_once 'AI/DBObject.php';
require_once 'AI/Error.php';
-// +X2C Class 416 :AI_Sistema
+/**
+ * Archivo de configuración.
+ */
+define('AI_SISTEMA_CONFFILE', dirname(__FILE__).'/Sistema.ini');
+
/**
* Sistema.
*
* @package AI
* @access public
*/
-class AI_Sistema {
+class AI_Sistema extends AI_DBObject {
/**
* ID del sistema (ID en SAMURAI).
*
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.
*/
var $habilitado = true;
- // ~X2C
+ /**
+ * @var string $tipo
+ * @access public
+ */
+ var $tipo = 'php';
- // +X2C Operation 466
/**
* @param int $sistema ID del sistema.
*
* @return void
* @access public
*/
- function AI_Sistema($sistema = 0) // ~X2C
+ function AI_Sistema($sistema = 0)
{
- $this->sistema = $sistema;
+ parent::AI_DBObject($sistema, AI_SISTEMA_CONFFILE);
}
- // -X2C
- // +X2C Operation 460
/**
- * @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
+ function cargar($db)
{
- $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;
$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
- // +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)
{
- $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
/**
- * @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 = '')
{
- $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
/**
- * @return Sistema
+ * @param $db Base de datos de donde obtener los sistemas.
+ * @param $soloHabilitados Si es true devuelve solo los sistemas marcados como habilitados.
+ * @param $where Clausula WHERE para filtrar la búsqueda.
+ *
+ * @return Un array de sistemas cuya clave es el id del sistema y el valor es un objeto AI_Sistema.
* @access public
+ * @static
*/
- function __clone() // ~X2C
+ function getSistemas($db, $soloHabilitados = true, $where = '')
{
- 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->sistema] = $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
+}
?>