]> git.llucax.com Git - mecon/ai.git/blobdiff - lib/AI/GrupoSecciones.php
Se agrega un campo para indicar si el sistema está hecho en EmbPerl.
[mecon/ai.git] / lib / AI / GrupoSecciones.php
index c7d54d93d712844906c5b00e8356edce29fa2471..df21dc6857b66213c1ffee75f55782ff43b00677 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// vim: set expandtab tabstop=4 shiftwidth=4 binary:
+// vim: set binary expandtab tabstop=4 shiftwidth=4:
 // +--------------------------------------------------------------------+
 // |                      Ministerio de Economía                        |
 // |                  AI (Administrador de Intranet)                    |
 // $Id$
 //
 
+// +X2C includes
+require_once 'AI/DBTreeObject.php';
+// ~X2C
+
 require_once 'AI/Error.php';
 
+/**
+ * Archivo de configuración.
+ */
+define('AI_GRUPOSECCIONES_CONFFILE', dirname(__FILE__).'/GrupoSecciones.ini');
+
 // +X2C Class 486 :AI_GrupoSecciones
 /**
  * Grupo de secciones.
@@ -36,7 +45,7 @@ require_once 'AI/Error.php';
  * @package AI
  * @access public
  */
-class AI_GrupoSecciones {
+class AI_GrupoSecciones extends AI_DBTreeObject {
     /**
      * ID del grupo de secciones.
      *
@@ -59,14 +68,6 @@ class AI_GrupoSecciones {
      */
     var $grupo_padre = 0;
 
-    /**
-     * Grupos de secciones que tiene este grupo.
-     *
-     * @var    array $hijos
-     * @access protected
-     */
-    var $_hijos = array();
-
     /**
      * Secciones que pertenecen a este grupo.
      *
@@ -76,7 +77,7 @@ class AI_GrupoSecciones {
     var $secciones = array();
 
     /**
-     * Antigedad (en d?s) de las noticias a mostrar.
+     * Antigüedad (en días) de las noticias a mostrar.
      *
      * @var    int $antiguedad
      * @access public
@@ -99,17 +100,6 @@ class AI_GrupoSecciones {
      */
     var $habilitado = true;
 
-    /**
-     * Gets Hijos.
-     *
-     * @return array
-     * @access public
-     */
-    function getHijos()
-    {
-        return $this->_hijos;
-    }
-
     // ~X2C
 
     // +X2C Operation 495
@@ -121,7 +111,7 @@ class AI_GrupoSecciones {
      */
     function AI_GrupoSecciones($grupo = 0) // ~X2C
     {
-        $this->grupo = $grupo;
+        parent::AI_DBTreeObject($grupo, AI_GRUPOSECCIONES_CONFFILE);
     }
     // -X2C
 
@@ -134,40 +124,18 @@ class AI_GrupoSecciones {
      */
     function cargar($db) // ~X2C
     {
-        $grupo = intval($this->grupo);
-        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 grupo_secciones
-                    WHERE grupo = $grupo"
-            );
-            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 [grupo=$grupo]");
+        // Obtengo campos comunes.
+        $err = parent::cargar($db);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        // Asigno valores al objeto.
-        extract($row);
-        $this->grupo        = $grupo;
-        $this->nombre       = $nombre;
-        $this->grupo_padre  = $grupo_padre;
-        $this->habilitado   = $habilitado;
-        $this->antiguedad   = $antiguedad;
-        $this->mostrar_hijos= $mostrar_hijos;
         // Obtengo secciones.
+        $id = intval($this->grupo);
+        extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
         $secciones = $db->getCol(
-            "SELECT seccion
-                FROM grupo_secciones_seccion
-                WHERE grupo = $grupo"
+            "SELECT $cnf_campo
+                FROM $cnf_base.$cnf_tabla
+                WHERE $cnf_id = $id"
         );
         if (DB::isError($secciones)) {
             return $secciones;
@@ -191,8 +159,7 @@ class AI_GrupoSecciones {
      */
     function guardar($db, $nuevo = false) // ~X2C
     {
-        $grupo = intval($this->grupo);
-        $where = '';
+        // Guardo datos generales.
         $datos = array(
             'grupo_padre'   => intval($this->grupo_padre),
             'nombre'        => $this->nombre,
@@ -200,31 +167,20 @@ class AI_GrupoSecciones {
             'antiguedad'    => intval($this->antiguedad),
             'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0,
         );
-        if ($grupo and !$nuevo) {
-            $accion = DB_AUTOQUERY_UPDATE;
-            $where  = "grupo = $grupo";
-        } else {
-            $accion = DB_AUTOQUERY_INSERT;
-            // Si no tiene ID, le asigno uno nuevo.
-            if (!$grupo) {
-                $grupo = $db->nextId('grupo_secciones');
-                if (DB::isError($grupo)) {
-                    return $grupo;
-                }
-                $this->grupo = $grupo;
-            }
-            $datos['grupo'] = $grupo;
-        }
-        $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where);
-        if (DB::isError($res)) {
-            return $res;
+        $err = parent::guardar($db, $datos, $nuevo);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        $res = $db->query("DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo");
+        // Guardo datos de secciones.
+               $id_field = $this->conf['id'];
+        $id = intval($this->$id_field);
+        extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
+        $res = $db->query("DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
         if (DB::isError($res)) {
             return $res;
         }
-        $prepare = $db->prepare("INSERT INTO grupo_secciones_seccion
-            (grupo, seccion) VALUES ($grupo, ?)");
+        $prepare = $db->prepare("INSERT INTO $cnf_base.$cnf_tabla
+            ($cnf_id, $cnf_campo) VALUES ($id, ?)");
         if (DB::isError($prepare)) {
             return $prepare;
         }
@@ -245,89 +201,78 @@ class AI_GrupoSecciones {
      */
     function borrar($db) // ~X2C
     {
-        $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 499
-    /**
-     * @param  DB $db DB de donde cargar los hijos.
-     *
-     * @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;
+        // Obtengo campos comunes.
+        $err = parent::borrar($db);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        $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 (AI_Error::isError($err)
-                and $err->getCode() == AI_ERROR_NO_RESULTADOS) {
-            return true;
+        // Obtengo secciones.
+        $id = intval($this->grupo);
+        extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
+        $res = $db->query(
+            "DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
+        if (DB::isError($res)) {
+            return $res;
         }
-        // Si no, se devuelve el error.
-        return $err;
+        return true;
     }
     // -X2C
 
     // +X2C Operation 512
     /**
      * Obtiene un array con una lista de secciones.
+Sólo se obtienen las secciones que todavía no pertenecen a ningún grupo. Si se especifica un grupo, se agregan las secciones de ese grupo al <em>array</em> resultante.
      *
      * @param  DB $db Base de datos a usar para obtener los datos.
+     * @param  int $grupo Grupo del cual obtener las secciones.
      *
      * @return array
      * @access public
      * @static
      */
-    function getSeccionesArray($db = null) // ~X2C
+    function getSeccionesArray($db = null, $grupo = 0) // ~X2C
     {
-               if ($db === null) {
-                       $db =& DB::connect('mysql://mark:mark@intranet-db.mecon.ar/MEconDAV',
-                               array('persistent' => true));
-               }
-               if (DB::isError($db)) {
-                       return $db;
-               }
-               return $db->getAssoc('
-            SELECT   S.section_id, S.description
-            FROM     MEconDAV.Sections as S
-            ORDER BY description');
+        static $conf_dav, $conf_sec;
+        if (!$conf_dav or !$conf_sec) {
+            $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
+            $conf_dav = $conf['mecondav'];
+            $conf_sec = $conf['secciones'];
+        }
+        extract($conf_dav, EXTR_PREFIX_ALL, 'dav');
+        extract($conf_sec, EXTR_PREFIX_ALL, 'sec');
+               return $db->getAssoc("
+            SELECT d.$dav_id, d.$dav_campo 
+            FROM $dav_base.$dav_tabla as d
+            LEFT JOIN $sec_base.$sec_tabla AS s
+            ON s.$sec_campo = d.$dav_id
+            WHERE s.$sec_campo IS NULL OR s.$sec_id = $grupo
+            ORDER BY d.$dav_campo ASC");
     }
     // -X2C
 
-    // +X2C Operation 500
+    // +X2C Operation 537
     /**
-     * @return GrupoSecciones
+     * Obtiene el grupo al que pertenece una sección.
+     *
+     * @param  int $seccion Sección a buscar.
+     * @param  DB $db DB a usar.
+     *
+     * @return AI_GrupoSecciones
      * @access public
+     * @static
      */
-    function __clone() // ~X2C
+    function getGrupo($seccion, $db = null) // ~X2C
     {
-        return $this;
+        static $conf;
+        if (!$conf) {
+            $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
+            $conf = $conf['secciones'];
+        }
+        extract($conf);
+               return $db->getOne("
+            SELECT  $id
+            FROM    $base.$tabla
+            WHERE   $campo = " . $db->quote($seccion));
     }
     // -X2C