<?php
-// vim: set expandtab tabstop=4 shiftwidth=4:
+// 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.
* @package AI
* @access public
*/
-class AI_GrupoSecciones {
+class AI_GrupoSecciones extends AI_DBTreeObject {
/**
* ID del grupo de secciones.
*
*/
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.
*
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
*/
var $habilitado = true;
- /**
- * Gets Hijos.
- *
- * @return array
- * @access public
- */
- function getHijos()
- {
- return $this->_hijos;
- }
-
// ~X2C
// +X2C Operation 495
*/
function AI_GrupoSecciones($grupo = 0) // ~X2C
{
- $this->grupo = $grupo;
+ parent::AI_DBTreeObject($grupo, AI_GRUPOSECCIONES_CONFFILE);
}
// -X2C
*/
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;
// +X2C Operation 497
/**
* @param DB $db DB donde guardar.
+ * @param bool $nuevo Si es true, se fuerza a guardar el Grupo de Secciones como nuevo.
*
* @return PEAR_Error
* @access public
*/
- function guardar($db) // ~X2C
+ 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,
'antiguedad' => intval($this->antiguedad),
'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0,
);
- if ($grupo) {
- $accion = DB_AUTOQUERY_UPDATE;
- $where = "grupo = $grupo";
- } else {
- $accion = DB_AUTOQUERY_INSERT;
- $grupo = $db->nextId('grupo_secciones');
- if (DB::isError($grupo)) {
- return $grupo;
- }
- // Asigno el nuevo id de grupo.
- $this->grupo = $grupo;
- $datos['grupo'] = $grupo;
+ $err = parent::guardar($db, $datos, $nuevo);
+ if (PEAR::isError($err)) {
+ return $err;
}
- $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where);
+ // 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;
}
- $res = $db->query("DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo");
- 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;
}
*/
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;
+ // Obtengo campos comunes.
+ $err = parent::borrar($db);
+ if (PEAR::isError($err)) {
+ return $err;
}
- return PEAR::raiseError("No hay un grupo válido para borrar");
+ // 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;
+ }
+ return true;
}
// -X2C
- // +X2C Operation 499
+ // +X2C Operation 512
/**
- * @param DB $db DB de donde cargar los hijos.
+ * 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.
*
- * @return PEAR_Error
+ * @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 cargarHijos($db) // ~X2C
+ function getSeccionesArray($db = null, $grupo = 0) // ~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);
+ 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'];
}
- // Si no hay mas resultados, entonces terminó bien.
- if (AI_Error::isError($err)
- and $err->getCode() == AI_ERROR_NO_RESULTADOS) {
- return true;
- }
- // Si no, se devuelve el error.
- return $err;
+ 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