]> git.llucax.com Git - mecon/ai.git/blobdiff - lib/AI/Sistema.php
Grupo de noticias:
[mecon/ai.git] / lib / AI / Sistema.php
index 7a547765feb1c2d5629e0548bea6cf23ebe6c733..19eac36702b94df7529781ed0ccdef1afb3f7a6c 100644 (file)
 // $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    HTML_Imagen $icono
+     * @var    string $nombre
      * @access public
      */
-    var $icono = null;
+    var $nombre = '';
+
+    /**
+     * Descripción del sistema (sólo de lectura, extraído de SAMURAI).
+     *
+     * @var    string $descripcion
+     * @access public
+     */
+    var $descripcion = '';
+
+    /**
+     * Ícono del sistema.
+     *
+     * @var    string $icono
+     * @access public
+     */
+    var $icono = '';
 
     /**
      * Enlace a donde se encuentra el sistema.
@@ -88,28 +113,31 @@ 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 {
+            // FIXME - ver como manejar JOINs - Ver de hacer el JOIN tambien en cargar.
             $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 +147,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 +160,111 @@ 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,
         );
-        // 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;
+        $err = parent::guardar($db, $datos, $nuevo);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        $res = $db->autoExecute('sistema', $datos, $accion, $where);
-        if (DB::isError($res)) {
-            return $res;
-        }
-        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);
+        }
+        extract($conf);
+        // FIXME - ver como manejar JOINs - Ver de hacer el JOIN tambien en cargar.
+        $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";
         }
-        return PEAR::raiseError("No hay un sistema válido para borrar");
+        $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'];
+        // 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 ($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