]> git.llucax.com Git - mecon/ai.git/blobdiff - sistema/local_lib/GrupoSecciones.php
Se completa la primera alfa. Ahora se hace todo desde el index.php.
[mecon/ai.git] / sistema / local_lib / GrupoSecciones.php
index 1e8e63cab7fc0bab455d97cbbb62c9300bcd1d6a..136ebfd800bea94c706164aed52e1714a49a55ce 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
+// vim: set expandtab tabstop=4 shiftwidth=4:
 // +--------------------------------------------------------------------+
 // |                      Ministerio de Economía                        |
 // |                  AI (Administrador de Intranet)                    |
@@ -27,7 +27,9 @@
 // $Id$
 //
 
-// +X2C Class 414 :GrupoSecciones
+require_once 'AIError.php';
+
+// +X2C Class 486 :GrupoSecciones
 /**
  * Grupo de secciones.
  *
@@ -37,10 +39,10 @@ class GrupoSecciones {
     /**
      * ID del grupo de secciones.
      *
-     * @var    int $groupo
+     * @var    int $grupo
      * @access public
      */
-    var $groupo = 0;
+    var $grupo = 0;
 
     /**
      * Nombre.
@@ -51,10 +53,10 @@ class GrupoSecciones {
     var $nombre = '';
 
     /**
-     * @var    int $padre
+     * @var    int $grupo_padre
      * @access public
      */
-    var $padre = 0;
+    var $grupo_padre = 0;
 
     /**
      * Grupos de secciones que tiene este grupo.
@@ -83,10 +85,10 @@ class GrupoSecciones {
     /**
      * True si hay que mostrar los grupos hijos (?? FIXME).
      *
-     * @var    bool $mostrarHijos
+     * @var    bool $mostrar_hijos
      * @access public
      */
-    var $mostrarHijos = false;
+    var $mostrar_hijos = false;
 
     /**
      * Indica si esta habilitado.
@@ -109,66 +111,87 @@ class GrupoSecciones {
 
     // ~X2C
 
+    // +X2C Operation 495
+    /**
+     * @param  int $grupo ID del grupo.
+     *
+     * @return void
+     * @access public
+     */
+    function GrupoSecciones($grupo = 0) // ~X2C
+    {
+        $this->grupo = $grupo;
+    }
+    // -X2C
 
-    // +X2C Operation 453
+    // +X2C Operation 496
     /**
-     * @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
     {
-        $data = $db->getRow(
-            "SELECT *
-                FROM grupo_secciones
-                WHERE grupo = {$this->grupo}",
-            array(),
-            DB_FETCHMODE_ASSOC
-        );
-        if (DB::isError($data)) {
-            return $data;
-        } elseif (!$data) {
-            return PEAR::raiseError("No existe el grupo {$this->grupo} en la DB");
+        $grupo = intval($this->grupo);
+        if (is_a($db, 'db_result')) {
+            $result = $db;
+            $db     = $result->dbh;
+        // Si no es un resultado, hago el query.
         } else {
-            extract($data);
-            $this->grupo        = $grupo;
-            $this->nombre       = $nombre;
-            $this->padre        = $grupo_padre;
-            $this->antiguedad   = $antiguedad;
-            $this->mostrarHijos = $mostrar_hijos;
-            $data = $db->getCol(
-                "SELECT seccion
-                    FROM grupo_secciones_seccion
-                    WHERE grupo = {$this->grupo}"
+            $result = $db->query(
+                "SELECT *
+                    FROM grupo_secciones
+                    WHERE grupo = $grupo"
             );
-            if (DB::isError($data)) {
-                return $data;
-            } else {
-                if ($data) {
-                    $this->secciones = $data;
-                } else {
-                    $this->secciones = array();
-                }
+            if (DB::isError($result)) {
+                return $result;
             }
-            return true;
         }
+        // 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 [grupo=$grupo]");
+        }
+        // Asigno valores al objeto.
+        extract($row);
+        $this->grupo        = $grupo;
+        $this->nombre       = $nombre;
+        $this->grupo_padre  = $grupo_padre;
+        $this->antiguedad   = $antiguedad;
+        $this->mostrar_hijos= $mostrar_hijos;
+        // Obtengo secciones.
+        $secciones = $db->getCol(
+            "SELECT seccion
+                FROM grupo_secciones_seccion
+                WHERE grupo = $grupo"
+        );
+        if (DB::isError($secciones)) {
+            return $secciones;
+        }
+        if ($secciones) {
+            $this->secciones = $secciones;
+        } else {
+            $this->secciones = array();
+        }
+        return true;
     }
     // -X2C
 
-    // +X2C Operation 454
+    // +X2C Operation 497
     /**
-     * @param  DB &$db DB donde guardar.
+     * @param  DB $db DB donde guardar.
      *
-     * @return bool
+     * @return PEAR_Error
      * @access public
      */
-    function guardar(&$db)// ~X2C
+    function guardar($db) // ~X2C
     {
         $grupo = intval($this->grupo);
         $where = '';
         $datos = array(
-            'grupo_padre'   => intval($this->padre),
+            'grupo_padre'   => intval($this->grupo_padre),
             'nombre'        => $this->nombre,
             'habilitado'    => $this->habilitado ? 1 : 0,
             'antiguedad'    => intval($this->antiguedad),
@@ -179,15 +202,18 @@ class GrupoSecciones {
             $where  = "grupo = $grupo";
         } else {
             $accion = DB_AUTOQUERY_INSERT;
-            $grupo = $db->nextId('grupo_secciones');
+            $grupo  = $db->nextId('grupo_secciones');
+            if (DB::isError($grupo)) {
+                return $grupo;
+            }
+            // Asigno el nuevo id de grupo.
+            $this->grupo = $grupo;
             $datos['grupo'] = $grupo;
-            echo "$group\n";
         }
         $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where);
         if (DB::isError($res)) {
             return $res;
         }
-        // Falta actualización de secciones.
         $res = $db->query("DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo");
         if (DB::isError($res)) {
             return $res;
@@ -205,29 +231,72 @@ class GrupoSecciones {
     }
     // -X2C
 
-    // +X2C Operation 455
+    // +X2C Operation 498
     /**
-     * @param  int $db DB de donde borrar.
+     * @param  DB $db DB de donde borrar.
      *
-     * @return bool
+     * @return PEAR_Error
      * @access public
      */
-    function borrar($db)// ~X2C
+    function borrar($db) // ~X2C
     {
-        trigger_error('Not implemented!', E_USER_WARNING);
+        $grupo = intval($this->grupo);
+        if ($grupo) {
+            $res = $db->query(
+                "DELETE FROM grupo_secciones WHERE grupo = $grupo");
+            if (DB::isError($res)) {
+                return $res;
+            }
+            $res = $db->query(
+                "DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo");
+            if (DB::isError($res)) {
+                return $res;
+            }
+            return true;
+        }
+        return PEAR::raiseError("No hay un grupo válido para borrar");
     }
     // -X2C
 
-    // +X2C Operation 462
+    // +X2C Operation 499
     /**
-     * @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
+    {
+        $grupo  = intval($this->grupo);
+        $result = $db->query("SELECT * FROM grupo_secciones WHERE grupo_padre = $grupo");
+        if (DB::isError($result)) {
+            return $result;
+        }
+        $this->_hijos = array();
+        $hijo = new GrupoSecciones;
+        $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 500
+    /**
+     * @return GrupoSecciones
      * @access public
      */
-    function cargarHijos(&$db)// ~X2C
+    function __clone() // ~X2C
     {
-        trigger_error('Not implemented!', E_USER_WARNING);
+        return $this;
     }
     // -X2C