// $Id$
//
+// +X2C includes
+require_once 'AI/DBObject.php';
+// ~X2C
+
require_once 'AI/Error.php';
-// TODO - preguntar a gmeray si le sirve, yo no lo uso...
-require_once 'SAMURAI/Sistema.php';
+
+/**
+ * Archivo de configuración.
+ */
+define('AI_SISTEMA_CONFFILE', dirname(__FILE__).'/Sistema.ini');
// +X2C Class 416 :AI_Sistema
/**
* @package AI
* @access public
*/
-class AI_Sistema {
+class AI_Sistema extends AI_DBObject {
/**
* ID del sistema (ID en SAMURAI).
*
/**
* ?ono del sistema.
*
- * @var HTML_Imagen $icono
+ * @var string $icono
* @access public
*/
- var $icono = null;
+ var $icono = '';
/**
* Enlace a donde se encuentra el sistema.
*/
function AI_Sistema($sistema = 0) // ~X2C
{
- $this->sistema = $sistema;
- }
- // -X2C
-
- // +X2C Operation 460
- /**
- * @param mixed $db Base de datos o Resultado a utilizar.
- *
- * @return PEAR_Error
- * @access public
- */
- function cargar($db) // ~X2C
- {
- $sistema = intval($this->sistema);
- if (is_a($db, 'db_result')) {
- $result = $db;
- // Si no es un resultado, hago el query.
- } else {
- $result = $db->query(
- "SELECT *
- FROM sistema
- WHERE sistema = $sistema"
- );
- if (DB::isError($result)) {
- return $result;
- }
- }
- // Obtengo la fila.
- $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]");
- }
- // Asigno valores al objeto.
- extract($row);
- $this->sistema = $sistema;
- $this->icono = $icono;
- $this->link = $link;
- $this->link_ayuda = $link_ayuda;
- $this->habilitado = $habilitado;
- // Obtengo datos de SAMURAI. FIXME - preguntar a marrese por manejo de errores.
- // TODO - preguntar a gmeray si le sirve, yo no lo uso...
- #$sist = new SAMURAI_Sistema($db, $sistema);
- #$this->nombre = $sist->getNombre();
- #$this->descripcion = $sist->getDescripcion();
- return true;
+ parent::AI_DBObject($sistema, AI_SISTEMA_CONFFILE);
}
// -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,
);
- if ($sistema and !$nuevo) {
- $accion = DB_AUTOQUERY_UPDATE;
- $where = "sistema = $sistema";
- } else {
- $accion = DB_AUTOQUERY_INSERT;
- // Si no tiene ID, le asigno uno nuevo.
- if (!$sistema) {
- $sistema = $db->nextId('sistema');
- if (DB::isError($sistema)) {
- return $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 resultados.
+ *
+ * @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);
+ }
+ extract($conf);
+ $query = "
+ SELECT $id
+ FROM $base.$tabla";
+ if ($where) {
+ $query .= "WHERE $where";
}
- return PEAR::raiseError("No hay un sistema válido para borrar");
+ return $db->getCol($query);
}
// -X2C
- // +X2C Operation 502
+ // +X2C Operation 531
/**
- * @return Sistema
+ * @param DB $db Base de datos de donde obtener los sistemas.
+ * @param string $where Clausula WHERE para filtrar la bsqueda.
+ *
+ * @return array
* @access public
+ * @static
*/
- function __clone() // ~X2C
+ function getSistemas($db, $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'];
+ // FIXME - ver como manejar JOINs - Ver de hacer el JOIN tambien en cargar.
+ $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 ($where) {
+ $query .= " WHERE $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