]> git.llucax.com Git - mecon/ai.git/blob - lib/AI/GrupoSecciones.php
Se agrega el checkbox para abrir en ventana nueva.
[mecon/ai.git] / lib / AI / GrupoSecciones.php
1 <?php
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.                                           |
8 // |                                                                    |
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.                             |
13 // |                                                                    |
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.                           |
18 // |                                                                    |
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 // +--------------------------------------------------------------------+
26 //
27 // $Id$
28 //
29
30 require_once 'AI/DBTreeObject.php';
31 require_once 'AI/Error.php';
32
33 /**
34  * Archivo de configuración.
35  */
36 define('AI_GRUPOSECCIONES_CONFFILE', dirname(__FILE__).'/GrupoSecciones.ini');
37
38 /**
39  * Grupo de secciones.
40  *
41  * @package AI
42  * @access public
43  */
44 class AI_GrupoSecciones extends AI_DBTreeObject {
45     /**
46      * ID del grupo de secciones.
47      *
48      * @var    int $grupo
49      * @access public
50      */
51     var $grupo = 0;
52
53     /**
54      * Nombre.
55      *
56      * @var    string $nombre
57      * @access public
58      */
59     var $nombre = '';
60
61     /**
62      * @var    int $grupo_padre
63      * @access public
64      */
65     var $grupo_padre = 0;
66
67     /**
68      * Secciones que pertenecen a este grupo.
69      *
70      * @var    array $secciones
71      * @access public
72      */
73     var $secciones = array();
74
75     /**
76      * Antigüedad (en días) de las noticias a mostrar.
77      *
78      * @var    int $antiguedad
79      * @access public
80      */
81     var $antiguedad = 0;
82
83     /**
84      * True si hay que mostrar los grupos hijos.
85      *
86      * @var    bool $mostrar_hijos
87      * @access public
88      */
89     var $mostrar_hijos = false;
90
91     /**
92      * Indica si esta habilitado.
93      *
94      * @var    bool $habilitado
95      * @access public
96      */
97     var $habilitado = true;
98
99     /**
100      * @param  int $grupo ID del grupo.
101      *
102      * @return void
103      * @access public
104      */
105     function AI_GrupoSecciones($grupo = 0)
106     {
107         parent::AI_DBTreeObject($grupo, AI_GRUPOSECCIONES_CONFFILE);
108     }
109
110     /**
111      * @param  mixed $db Base de datos o Resultado a utilizar.
112      *
113      * @return PEAR_Error
114      * @access public
115      */
116     function cargar($db)
117     {
118         // Obtengo campos comunes.
119         $err = parent::cargar($db);
120         if (PEAR::isError($err)) {
121             return $err;
122         }
123         // Obtengo secciones.
124         $id = intval($this->grupo);
125         extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
126         $secciones = $db->getCol(
127            "SELECT $cnf_campo
128                 FROM  $cnf_base.$cnf_tabla
129                 WHERE $cnf_id = $id"
130         );
131         //Busco los hijos si corresponde
132         //Agregado por gmeray
133         if($this->mostrar_hijos)
134         {
135             //hijos
136             $secciones = array_merge($secciones,
137                     $db->getCol(
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"
142                     )
143             );
144             //nietos
145             $secciones = array_merge($secciones,
146                     $db->getCol(
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"
152                     )
153             );
154             //Si hace falta agreguen los bisnietos.
155         }
156         //Fin Agregado
157         
158         if (DB::isError($secciones)) {
159             return $secciones;
160         }
161         if ($secciones) {
162             $this->secciones = $secciones;
163         } else {
164             $this->secciones = array();
165         }
166         return true;
167     }
168
169     /**
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.
173      *
174      * @return PEAR_Error
175      * @access public
176      */
177     function guardar($db, $nuevo = false)
178     {
179         // Guardo datos generales.
180         $datos = array(
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,
186         );
187         $err = parent::guardar($db, $datos, $nuevo);
188         if (PEAR::isError($err)) {
189             return $err;
190         }
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)) {
197             return $res;
198         }
199         $prepare = $db->prepare("INSERT INTO $cnf_base.$cnf_tabla
200             ($cnf_id, $cnf_campo) VALUES ($id, ?)");
201         if (DB::isError($prepare)) {
202             return $prepare;
203         }
204         $res = $db->executeMultiple($prepare, $this->secciones);
205         if (DB::isError($res)) {
206             return $res;
207         }
208         return true;
209     }
210
211     /**
212      * @param  DB $db DB de donde borrar.
213      *
214      * @return PEAR_Error
215      * @access public
216      */
217     function borrar($db)
218     {
219         // Obtengo campos comunes.
220         $err = parent::borrar($db);
221         if (PEAR::isError($err)) {
222             return $err;
223         }
224         // Obtengo secciones.
225         $id = intval($this->grupo);
226         extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
227         $res = $db->query(
228             "DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
229         if (DB::isError($res)) {
230             return $res;
231         }
232         return true;
233     }
234
235     /**
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.
240      *
241      * @param  DB $db Base de datos a usar para obtener los datos.
242      * @param  int $grupo Grupo del cual obtener las secciones.
243      *
244      * @return array
245      * @access public
246      * @static
247      */
248     function getSeccionesArray($db = null, $grupo = 0)
249     {
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'];
255         }
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");
266     }
267
268     /**
269      * Obtiene un array con una lista de todas las secciones.
270      *
271      * @param  DB $db Base de datos a usar para obtener los datos.
272      *
273      * @return array
274      * @access public
275      * @static
276      */
277     function getAllSeccionesArray($db = null)
278     {
279         static $conf;
280         if (!$conf) {
281             $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
282             $conf = $conf['mecondav'];
283         }
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");
289     }
290
291     /**
292      * Obtiene un array con una lista de las secciones ocultas.
293      *
294      * @param  DB $db Base de datos a usar para obtener los datos.
295      *
296      * @return array
297      * @access public
298      * @static
299      */
300     function getSeccionesOcultasArray($db = null)
301     {
302         static $conf;
303         if (!$conf) {
304             $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
305             $conf = $conf['ocultas'];
306         }
307         extract($conf, EXTR_PREFIX_ALL, 'ocu');
308                 return $db->getCol("SELECT d.$ocu_id FROM $ocu_base.$ocu_tabla as d");
309     }
310
311     /**
312      * Establece las secciones ocultas.
313      *
314      * @param  DB $db Base de datos a usar para grabar los datos.
315      *
316      * @return Cantidad de secciones insertadas o PEAR_Error.
317      * @access public
318      * @static
319      */
320     function setSeccionesOcultas($db = null, $secciones)
321     {
322         static $conf;
323         if (!$conf) {
324             $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
325             $conf = $conf['ocultas'];
326         }
327         extract($conf, EXTR_PREFIX_ALL, 'ocu');
328                 $res = $db->query("DELETE FROM $ocu_base.$ocu_tabla");
329         if (DB::isError($res)) {
330             return $res;
331         }
332         foreach ($secciones as $seccion) {
333                     $res = $db->query(
334                 "INSERT INTO $ocu_base.$ocu_tabla VALUES ("
335                     . $db->quote($seccion) . ")");
336             if (DB::isError($res)) {
337                 return $res;
338             }
339         }
340         return count($secciones);
341     }
342
343     /**
344      * Obtiene el grupo al que pertenece una sección.
345      *
346      * @param  int $seccion Sección a buscar.
347      * @param  DB $db DB a usar.
348      *
349      * @return AI_GrupoSecciones
350      * @access public
351      * @static
352      */
353     function getGrupo($seccion, $db = null)
354     {
355         static $conf;
356         if (!$conf) {
357             $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
358             $conf = $conf['secciones'];
359         }
360         extract($conf);
361                 return $db->getOne(
362             "SELECT  $id
363                 FROM  $base.$tabla
364                 WHERE $campo = " . $db->quote($seccion));
365     }
366
367 }
368
369 ?>