]> git.llucax.com Git - mecon/ai.git/blobdiff - sistema/local_lib/Servicio.php
Se actualiza el diagrama UML.
[mecon/ai.git] / sistema / local_lib / Servicio.php
index 8df6c9e2875be2ccb77502ae9f3c459b95a1b40f..229ab237fb0c759f8ecec9e74c25e6fa727f7261 100644 (file)
@@ -27,8 +27,7 @@
 // $Id$
 //
 
-
-
+require_once 'AIError.php';
 
 // +X2C Class 413 :Servicio
 /**
@@ -49,6 +48,14 @@ class Servicio {
      */
     var $padre = 0;
 
+    /**
+     * Servicios hijos.
+     *
+     * @var    array $hijos
+     * @access protected
+     */
+    var $_hijos = array();
+
     /**
      * Nombre del servicio.
      *
@@ -105,60 +112,182 @@ class Servicio {
      */
     var $habilitado = true;
 
-    // ~X2C
+    /**
+     * Gets Hijos.
+     *
+     * @return array
+     * @access public
+     */
+    function getHijos()
+    {
+        return $this->_hijos;
+    }
 
+    // ~X2C
 
-    // +X2C Operation 456
+    // +X2C Operation 465
     /**
-     * @param  int $db DB de donde borrar.
+     * @param  int $servicio ID del servicio.
      *
-     * @return bool
+     * @return void
      * @access public
      */
-    function borrar($db)// ~X2C
+    function Servicio($servicio = 0) // ~X2C
     {
-        trigger_error('Not implemented!', E_USER_WARNING);
+        $this->servicio = $servicio;
     }
     // -X2C
 
     // +X2C Operation 457
     /**
-     * @param  DB &$db Base de datos a utilizar.
+     * @param  mixed $db Base de datos o Resultado a utilizar.
      *
-     * @return bool
+     * @return PEAR_Error
      * @access public
      */
-    function cargar(&$db)// ~X2C
+    function cargar($db) // ~X2C
     {
-        trigger_error('Not implemented!', E_USER_WARNING);
+        $servicio = intval($this->servicio);
+        if (is_a($db, 'db_result')) {
+            $result = $db;
+        // Si no es un resultado, hago el query.
+        } else {
+            $result = $db->query(
+                "SELECT *
+                    FROM servicio
+                    WHERE servicio = $servicio"
+            );
+            if (DB::isError($result)) {
+                return $result;
+            }
+        }
+        // Obtengo la fila.
+        $row = $result->fetchRow(DB_FETCHMODE_ASSOC);
+        if (!$row) {
+            return new AIError(AIERROR_NO_RESULTADOS,
+                "No hay más resultados en la DB [servicio=$servicio]");
+        }
+        // Asigno valores al objeto.
+        extract($row);
+        $this->servicio         = $servicio;
+        $this->padre            = $servicio_padre;
+        $this->nombre           = $nombre;
+        $this->descripcion      = $descripcion;
+        $this->icono            = $icono; # FIXME - new HTML_Icono (o no?)
+        $this->link             = $link;
+        $this->linkAyuda        = $link_ayuda;
+        $this->necesitaLogueo   = $necesita_logueo;
+        $this->habilitado       = $habilitado;
+        return true;
     }
     // -X2C
 
     // +X2C Operation 458
     /**
-     * @param  DB &$db DB donde guardar.
+     * @param  DB $db DB donde guardar.
+     *
+     * @return PEAR_Error
+     * @access public
+     */
+    function guardar($db) // ~X2C
+    {
+        $servicio = intval($this->servicio);
+        $where    = '';
+        $datos    = array(
+            'servicio_padre'    => intval($this->padre),
+            'nombre'            => $this->nombre,
+            'descripcion'       => $this->descripcion,
+            'icono'             => $this->icono,
+            'link'              => $this->link,
+            'link_ayuda'        => $this->linkAyuda,
+            'necesita_logueo'   => $this->necesitaLogueo ? 1 : 0,
+            'habilitado'        => $this->habilitado ? 1 : 0,
+        );
+        if ($servicio) {
+            $accion = DB_AUTOQUERY_UPDATE;
+            $where  = "servicio = $servicio";
+        } else {
+            $accion   = DB_AUTOQUERY_INSERT;
+            $servicio = $db->nextId('servicio');
+            if (DB::isError($servicio)) {
+                return $servicio;
+            }
+            // Asigno el nuevo id de servicio.
+            $this->servicio    = $servicio;
+            $datos['servicio'] = $servicio;
+        }
+        $res = $db->autoExecute('servicio', $datos, $accion, $where);
+        if (DB::isError($res)) {
+            return $res;
+        }
+        return true;
+    }
+    // -X2C
+
+    // +X2C Operation 456
+    /**
+     * @param  DB $db DB de donde borrar.
      *
-     * @return bool
+     * @return PEAR_Error
      * @access public
      */
-    function guardar(&$db)// ~X2C
+    function borrar($db) // ~X2C
     {
-        trigger_error('Not implemented!', E_USER_WARNING);
+        $servicio = intval($this->servicio);
+        if ($servicio) {
+            $res = $db->query(
+                "DELETE FROM servicio WHERE servicio = $servicio");
+            if (DB::isError($res)) {
+                return $res;
+            }
+            return true;
+        }
+        return PEAR::raiseError("No hay un servicio válido para borrar");
     }
     // -X2C
 
     // +X2C Operation 463
     /**
-     * @param  DB &$db DB de donde cargar los hijos.
+     * @param  DB $db DB de donde cargar los hijos.
      *
-     * @return bool
+     * @return PEAR_Error
      * @access public
      */
-    function cargarHijos(&$db)// ~X2C
+    function cargarHijos($db) // ~X2C
     {
-        trigger_error('Not implemented!', E_USER_WARNING);
+        $servicio = intval($this->servicio);
+        $result   = $db->query("SELECT * FROM servicio WHERE servicio_padre = $servicio");
+        if (DB::isError($result)) {
+            return $result;
+        }
+        $this->_hijos = array();
+        $hijo = new Servicio;
+        $err  = $hijo->cargar($result);
+        while (!PEAR::isError($err)) {
+            $this->_hijos[] = $hijo->__clone();
+            $err = $hijo->cargar($result);
+        }
+        // Si no hay mas resultados, entonces terminó bien.
+        if (is_a($err, 'aierror')
+                and $err->getCode() == AIERROR_NO_RESULTADOS) {
+            return true;
+        }
+        // Si no, se devuelve el error.
+        return $err;
+    }
+    // -X2C
+
+    // +X2C Operation 501
+    /**
+     * @return Servicio
+     * @access public
+     */
+    function __clone() // ~X2C
+    {
+        return $this;
     }
     // -X2C
 
 } // -X2C Class :Servicio
+
 ?>
\ No newline at end of file