| // +--------------------------------------------------------------------+ // // $Id$ // require_once 'AI/DBTreeObject.php'; require_once 'AI/Error.php'; /** * Archivo de configuración. */ define('AI_GRUPOSECCIONES_CONFFILE', dirname(__FILE__).'/GrupoSecciones.ini'); /** * Grupo de secciones. * * @package AI * @access public */ class AI_GrupoSecciones extends AI_DBTreeObject { /** * ID del grupo de secciones. * * @var int $grupo * @access public */ var $grupo = 0; /** * Nombre. * * @var string $nombre * @access public */ var $nombre = ''; /** * @var int $grupo_padre * @access public */ var $grupo_padre = 0; /** * Secciones que pertenecen a este grupo. * * @var array $secciones * @access public */ var $secciones = array(); /** * Antigüedad (en días) de las noticias a mostrar. * * @var int $antiguedad * @access public */ var $antiguedad = 0; /** * True si hay que mostrar los grupos hijos. * * @var bool $mostrar_hijos * @access public */ var $mostrar_hijos = false; /** * Indica si esta habilitado. * * @var bool $habilitado * @access public */ var $habilitado = true; /** * @param int $grupo ID del grupo. * * @return void * @access public */ function AI_GrupoSecciones($grupo = 0) { parent::AI_DBTreeObject($grupo, AI_GRUPOSECCIONES_CONFFILE); } /** * @param mixed $db Base de datos o Resultado a utilizar. * * @return PEAR_Error * @access public */ function cargar($db) { // Obtengo campos comunes. $err = parent::cargar($db); if (PEAR::isError($err)) { return $err; } // Obtengo secciones. $id = intval($this->grupo); extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf'); $secciones = $db->getCol( "SELECT $cnf_campo FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id" ); //Busco los hijos si corresponde //Agregado por gmeray if($this->mostrar_hijos) { //hijos $secciones = array_merge($secciones, $db->getCol( "SELECT GSS.$cnf_campo FROM $cnf_base.$cnf_tabla GSS, $cnf_base.grupo_secciones GS WHERE GSS.$cnf_id = GS.grupo AND GS.grupo_padre = $id" ) ); //nietos $secciones = array_merge($secciones, $db->getCol( "SELECT GSS.$cnf_campo FROM $cnf_base.$cnf_tabla GSS, $cnf_base.grupo_secciones GS, $cnf_base.grupo_secciones GS2 WHERE GSS.$cnf_id = GS.grupo AND GS.grupo_padre = GS2.grupo AND GS2.grupo_padre = $id" ) ); //Si hace falta agreguen los bisnietos. } //Fin Agregado if (DB::isError($secciones)) { return $secciones; } if ($secciones) { $this->secciones = $secciones; } else { $this->secciones = array(); } return true; } /** * @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, $nuevo = false) { // Guardo datos generales. $datos = array( 'grupo_padre' => intval($this->grupo_padre), 'nombre' => $this->nombre, 'habilitado' => $this->habilitado ? 1 : 0, 'antiguedad' => intval($this->antiguedad), 'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0, ); $err = parent::guardar($db, $datos, $nuevo); if (PEAR::isError($err)) { return $err; } // 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 $cnf_base.$cnf_tabla ($cnf_id, $cnf_campo) VALUES ($id, ?)"); if (DB::isError($prepare)) { return $prepare; } $res = $db->executeMultiple($prepare, $this->secciones); if (DB::isError($res)) { return $res; } return true; } /** * @param DB $db DB de donde borrar. * * @return PEAR_Error * @access public */ function borrar($db) { // Obtengo campos comunes. $err = parent::borrar($db); if (PEAR::isError($err)) { return $err; } // 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; } /** * 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 array 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, $grupo = 0) { 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"); } /** * Obtiene un array con una lista de todas las secciones. * * @param DB $db Base de datos a usar para obtener los datos. * * @return array * @access public * @static */ function getAllSeccionesArray($db = null) { static $conf; if (!$conf) { $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true); $conf = $conf['mecondav']; } extract($conf, EXTR_PREFIX_ALL, 'dav'); return $db->getAssoc( "SELECT d.$dav_id, d.$dav_campo FROM $dav_base.$dav_tabla as d ORDER BY d.$dav_campo ASC"); } /** * Obtiene un array con una lista de las secciones ocultas. * * @param DB $db Base de datos a usar para obtener los datos. * * @return array * @access public * @static */ function getSeccionesOcultasArray($db = null) { static $conf; if (!$conf) { $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true); $conf = $conf['ocultas']; } extract($conf, EXTR_PREFIX_ALL, 'ocu'); return $db->getCol("SELECT d.$ocu_id FROM $ocu_base.$ocu_tabla as d"); } /** * Establece las secciones ocultas. * * @param DB $db Base de datos a usar para grabar los datos. * * @return Cantidad de secciones insertadas o PEAR_Error. * @access public * @static */ function setSeccionesOcultas($db = null, $secciones) { static $conf; if (!$conf) { $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true); $conf = $conf['ocultas']; } extract($conf, EXTR_PREFIX_ALL, 'ocu'); $res = $db->query("DELETE FROM $ocu_base.$ocu_tabla"); if (DB::isError($res)) { return $res; } foreach ($secciones as $seccion) { $res = $db->query( "INSERT INTO $ocu_base.$ocu_tabla VALUES (" . $db->quote($seccion) . ")"); if (DB::isError($res)) { return $res; } } return count($secciones); } /** * 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 getGrupo($seccion, $db = null) { 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)); } } ?>