2 // vim: set binary expandtab tabstop=4 shiftwidth=4:
3 // +--------------------------------------------------------------------+
4 // | Ministerio de Economía |
5 // | AI (Administrador de Intranet) |
6 // +--------------------------------------------------------------------+
7 // | This file is part of AI. |
9 // | AI is free software; you can redistribute it and/or modify |
10 // | it under the terms of the GNU General Public License as published |
11 // | by the Free Software Foundation; either version 2 of the License, |
12 // | or (at your option) any later version. |
14 // | AI is distributed in the hope that it will be useful, but |
15 // | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
17 // | General Public License for more details. |
19 // | You should have received a copy of the GNU General Public License |
20 // | along with Hooks; if not, write to the Free Software Foundation, |
21 // | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22 // +--------------------------------------------------------------------+
23 // | Creado: Tue Jun 24 16:22:07 2003 |
24 // | Autor: Leandro Lucarella <llucar@mecon.gov.ar> |
25 // +--------------------------------------------------------------------+
30 require_once 'AI/DBTreeObject.php';
31 require_once 'AI/Error.php';
34 * Archivo de configuración.
36 define('AI_GRUPOSECCIONES_CONFFILE', dirname(__FILE__).'/GrupoSecciones.ini');
44 class AI_GrupoSecciones extends AI_DBTreeObject {
46 * ID del grupo de secciones.
62 * @var int $grupo_padre
68 * Secciones que pertenecen a este grupo.
70 * @var array $secciones
73 var $secciones = array();
76 * Antigüedad (en días) de las noticias a mostrar.
78 * @var int $antiguedad
84 * True si hay que mostrar los grupos hijos.
86 * @var bool $mostrar_hijos
89 var $mostrar_hijos = false;
92 * Indica si esta habilitado.
94 * @var bool $habilitado
97 var $habilitado = true;
100 * @param int $grupo ID del grupo.
105 function AI_GrupoSecciones($grupo = 0)
107 parent::AI_DBTreeObject($grupo, AI_GRUPOSECCIONES_CONFFILE);
111 * @param mixed $db Base de datos o Resultado a utilizar.
118 // Obtengo campos comunes.
119 $err = parent::cargar($db);
120 if (PEAR::isError($err)) {
123 // Obtengo secciones.
124 $id = intval($this->grupo);
125 extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
126 $secciones = $db->getCol(
128 FROM $cnf_base.$cnf_tabla
131 //Busco los hijos si corresponde
132 //Agregado por gmeray
133 if($this->mostrar_hijos)
136 $secciones = array_merge($secciones,
138 "SELECT GSS.$cnf_campo
139 FROM $cnf_base.$cnf_tabla GSS, $cnf_base.grupo_secciones GS
140 WHERE GSS.$cnf_id = GS.grupo
141 AND GS.grupo_padre = $id"
145 $secciones = array_merge($secciones,
147 "SELECT GSS.$cnf_campo
148 FROM $cnf_base.$cnf_tabla GSS, $cnf_base.grupo_secciones GS, $cnf_base.grupo_secciones GS2
149 WHERE GSS.$cnf_id = GS.grupo
150 AND GS.grupo_padre = GS2.grupo
151 AND GS2.grupo_padre = $id"
154 //Si hace falta agreguen los bisnietos.
158 if (DB::isError($secciones)) {
162 $this->secciones = $secciones;
164 $this->secciones = array();
170 * @param DB $db DB donde guardar.
171 * @param bool $nuevo Si es true, se fuerza a guardar el Grupo de
172 * Secciones como nuevo.
177 function guardar($db, $nuevo = false)
179 // Guardo datos generales.
181 'grupo_padre' => intval($this->grupo_padre),
182 'nombre' => $this->nombre,
183 'habilitado' => $this->habilitado ? 1 : 0,
184 'antiguedad' => intval($this->antiguedad),
185 'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0,
187 $err = parent::guardar($db, $datos, $nuevo);
188 if (PEAR::isError($err)) {
191 // Guardo datos de secciones.
192 $id_field = $this->conf['id'];
193 $id = intval($this->$id_field);
194 extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
195 $res = $db->query("DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
196 if (DB::isError($res)) {
199 $prepare = $db->prepare("INSERT INTO $cnf_base.$cnf_tabla
200 ($cnf_id, $cnf_campo) VALUES ($id, ?)");
201 if (DB::isError($prepare)) {
204 $res = $db->executeMultiple($prepare, $this->secciones);
205 if (DB::isError($res)) {
212 * @param DB $db DB de donde borrar.
219 // Obtengo campos comunes.
220 $err = parent::borrar($db);
221 if (PEAR::isError($err)) {
224 // Obtengo secciones.
225 $id = intval($this->grupo);
226 extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
228 "DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
229 if (DB::isError($res)) {
236 * Obtiene un array con una lista de secciones.
237 * Sólo se obtienen las secciones que todavía no pertenecen a ningún
238 * grupo. Si se especifica un grupo, se agregan las secciones de ese grupo
239 * al <em>array</em> resultante.
241 * @param DB $db Base de datos a usar para obtener los datos.
242 * @param int $grupo Grupo del cual obtener las secciones.
248 function getSeccionesArray($db = null, $grupo = 0)
250 static $conf_dav, $conf_sec;
251 if (!$conf_dav or !$conf_sec) {
252 $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
253 $conf_dav = $conf['mecondav'];
254 $conf_sec = $conf['secciones'];
256 extract($conf_dav, EXTR_PREFIX_ALL, 'dav');
257 extract($conf_sec, EXTR_PREFIX_ALL, 'sec');
258 return $db->getAssoc(
259 "SELECT d.$dav_id, d.$dav_campo
260 FROM $dav_base.$dav_tabla as d
261 LEFT JOIN $sec_base.$sec_tabla AS s
262 ON s.$sec_campo = d.$dav_id
263 WHERE s.$sec_campo IS NULL
264 OR s.$sec_id = $grupo
265 ORDER BY d.$dav_campo ASC");
269 * Obtiene un array con una lista de todas las secciones.
271 * @param DB $db Base de datos a usar para obtener los datos.
277 function getAllSeccionesArray($db = null)
281 $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
282 $conf = $conf['mecondav'];
284 extract($conf, EXTR_PREFIX_ALL, 'dav');
285 return $db->getAssoc(
286 "SELECT d.$dav_id, d.$dav_campo
287 FROM $dav_base.$dav_tabla as d
288 ORDER BY d.$dav_campo ASC");
292 * Obtiene un array con una lista de las secciones ocultas.
294 * @param DB $db Base de datos a usar para obtener los datos.
300 function getSeccionesOcultasArray($db = null)
304 $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
305 $conf = $conf['ocultas'];
307 extract($conf, EXTR_PREFIX_ALL, 'ocu');
308 return $db->getCol("SELECT d.$ocu_id FROM $ocu_base.$ocu_tabla as d");
312 * Establece las secciones ocultas.
314 * @param DB $db Base de datos a usar para grabar los datos.
316 * @return Cantidad de secciones insertadas o PEAR_Error.
320 function setSeccionesOcultas($db = null, $secciones)
324 $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
325 $conf = $conf['ocultas'];
327 extract($conf, EXTR_PREFIX_ALL, 'ocu');
328 $res = $db->query("DELETE FROM $ocu_base.$ocu_tabla");
329 if (DB::isError($res)) {
332 foreach ($secciones as $seccion) {
334 "INSERT INTO $ocu_base.$ocu_tabla VALUES ("
335 . $db->quote($seccion) . ")");
336 if (DB::isError($res)) {
340 return count($secciones);
344 * Obtiene el grupo al que pertenece una sección.
346 * @param int $seccion Sección a buscar.
347 * @param DB $db DB a usar.
349 * @return AI_GrupoSecciones
353 function getGrupo($seccion, $db = null)
357 $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
358 $conf = $conf['secciones'];
364 WHERE $campo = " . $db->quote($seccion));