]> git.llucax.com Git - mecon/ai.git/blob - lib/AI/GrupoSecciones.php
Cambios cortesía de gmeray:
[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 // +X2C includes
31 require_once 'AI/DBTreeObject.php';
32 // ~X2C
33
34 require_once 'AI/Error.php';
35
36 /**
37  * Archivo de configuración.
38  */
39 define('AI_GRUPOSECCIONES_CONFFILE', dirname(__FILE__).'/GrupoSecciones.ini');
40
41 // +X2C Class 486 :AI_GrupoSecciones
42 /**
43  * Grupo de secciones.
44  *
45  * @package AI
46  * @access public
47  */
48 class AI_GrupoSecciones extends AI_DBTreeObject {
49     /**
50      * ID del grupo de secciones.
51      *
52      * @var    int $grupo
53      * @access public
54      */
55     var $grupo = 0;
56
57     /**
58      * Nombre.
59      *
60      * @var    string $nombre
61      * @access public
62      */
63     var $nombre = '';
64
65     /**
66      * @var    int $grupo_padre
67      * @access public
68      */
69     var $grupo_padre = 0;
70
71     /**
72      * Secciones que pertenecen a este grupo.
73      *
74      * @var    array $secciones
75      * @access public
76      */
77     var $secciones = array();
78
79     /**
80      * Antigüedad (en días) de las noticias a mostrar.
81      *
82      * @var    int $antiguedad
83      * @access public
84      */
85     var $antiguedad = 0;
86
87     /**
88      * True si hay que mostrar los grupos hijos (?? FIXME).
89      *
90      * @var    bool $mostrar_hijos
91      * @access public
92      */
93     var $mostrar_hijos = false;
94
95     /**
96      * Indica si esta habilitado.
97      *
98      * @var    bool $habilitado
99      * @access public
100      */
101     var $habilitado = true;
102
103     // ~X2C
104
105     // +X2C Operation 495
106     /**
107      * @param  int $grupo ID del grupo.
108      *
109      * @return void
110      * @access public
111      */
112     function AI_GrupoSecciones($grupo = 0) // ~X2C
113     {
114         parent::AI_DBTreeObject($grupo, AI_GRUPOSECCIONES_CONFFILE);
115     }
116     // -X2C
117
118     // +X2C Operation 496
119     /**
120      * @param  mixed $db Base de datos o Resultado a utilizar.
121      *
122      * @return PEAR_Error
123      * @access public
124      */
125     function cargar($db) // ~X2C
126     {
127         // Obtengo campos comunes.
128         $err = parent::cargar($db);
129         if (PEAR::isError($err)) {
130             return $err;
131         }
132         // Obtengo secciones.
133         $id = intval($this->grupo);
134         extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
135         $secciones = $db->getCol(
136            "SELECT $cnf_campo
137                 FROM  $cnf_base.$cnf_tabla
138                 WHERE $cnf_id = $id"
139         );
140         //Busco los hijos si corresponde
141         //Agregado por gmeray
142         if($this->mostrar_hijos)
143         {
144             //hijos
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
149                             WHERE   GSS.$cnf_id = GS.grupo
150                                 AND GS.grupo_padre = $id"
151                     )
152             );
153             //nietos
154             $secciones = array_merge($secciones,
155                     $db->getCol(
156                         "SELECT GSS.$cnf_campo
157                             FROM    $cnf_base.$cnf_tabla GSS, $cnf_base.grupo_secciones GS, $cnf_base.grupo_secciones GS2
158                             WHERE   GSS.$cnf_id = GS.grupo
159                                 AND GS.grupo_padre = GS2.grupo
160                                 AND GS2.grupo_padre = $id"
161                     )
162             );
163             //Si hace falta agreguen los bisnietos.
164         }
165         //Fin Agregado
166         
167         if (DB::isError($secciones)) {
168             return $secciones;
169         }
170         if ($secciones) {
171             $this->secciones = $secciones;
172         } else {
173             $this->secciones = array();
174         }
175         return true;
176     }
177     // -X2C
178
179     // +X2C Operation 497
180     /**
181      * @param  DB $db DB donde guardar.
182      * @param  bool $nuevo Si es true, se fuerza a guardar el Grupo de Secciones como nuevo.
183      *
184      * @return PEAR_Error
185      * @access public
186      */
187     function guardar($db, $nuevo = false) // ~X2C
188     {
189         // Guardo datos generales.
190         $datos = array(
191             'grupo_padre'   => intval($this->grupo_padre),
192             'nombre'        => $this->nombre,
193             'habilitado'    => $this->habilitado ? 1 : 0,
194             'antiguedad'    => intval($this->antiguedad),
195             'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0,
196         );
197         $err = parent::guardar($db, $datos, $nuevo);
198         if (PEAR::isError($err)) {
199             return $err;
200         }
201         // Guardo datos de secciones.
202                 $id_field = $this->conf['id'];
203         $id = intval($this->$id_field);
204         extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
205         $res = $db->query("DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
206         if (DB::isError($res)) {
207             return $res;
208         }
209         $prepare = $db->prepare("INSERT INTO $cnf_base.$cnf_tabla
210             ($cnf_id, $cnf_campo) VALUES ($id, ?)");
211         if (DB::isError($prepare)) {
212             return $prepare;
213         }
214         $res = $db->executeMultiple($prepare, $this->secciones);
215         if (DB::isError($res)) {
216             return $res;
217         }
218         return true;
219     }
220     // -X2C
221
222     // +X2C Operation 498
223     /**
224      * @param  DB $db DB de donde borrar.
225      *
226      * @return PEAR_Error
227      * @access public
228      */
229     function borrar($db) // ~X2C
230     {
231         // Obtengo campos comunes.
232         $err = parent::borrar($db);
233         if (PEAR::isError($err)) {
234             return $err;
235         }
236         // Obtengo secciones.
237         $id = intval($this->grupo);
238         extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
239         $res = $db->query(
240             "DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
241         if (DB::isError($res)) {
242             return $res;
243         }
244         return true;
245     }
246     // -X2C
247
248     // +X2C Operation 512
249     /**
250      * Obtiene un array con una lista de secciones.
251 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.
252      *
253      * @param  DB $db Base de datos a usar para obtener los datos.
254      * @param  int $grupo Grupo del cual obtener las secciones.
255      *
256      * @return array
257      * @access public
258      * @static
259      */
260     function getSeccionesArray($db = null, $grupo = 0) // ~X2C
261     {
262         static $conf_dav, $conf_sec;
263         if (!$conf_dav or !$conf_sec) {
264             $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
265             $conf_dav = $conf['mecondav'];
266             $conf_sec = $conf['secciones'];
267         }
268         extract($conf_dav, EXTR_PREFIX_ALL, 'dav');
269         extract($conf_sec, EXTR_PREFIX_ALL, 'sec');
270                 return $db->getAssoc(
271             "SELECT d.$dav_id, d.$dav_campo 
272                 FROM      $dav_base.$dav_tabla as d
273                 LEFT JOIN $sec_base.$sec_tabla AS s
274                 ON        s.$sec_campo = d.$dav_id
275                 WHERE     s.$sec_campo IS NULL
276                     OR    s.$sec_id = $grupo
277                 ORDER BY  d.$dav_campo ASC");
278     }
279     // -X2C
280
281     // +X2C Operation 537
282     /**
283      * Obtiene el grupo al que pertenece una sección.
284      *
285      * @param  int $seccion Sección a buscar.
286      * @param  DB $db DB a usar.
287      *
288      * @return AI_GrupoSecciones
289      * @access public
290      * @static
291      */
292     function getGrupo($seccion, $db = null) // ~X2C
293     {
294         static $conf;
295         if (!$conf) {
296             $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true);
297             $conf = $conf['secciones'];
298         }
299         extract($conf);
300                 return $db->getOne(
301             "SELECT  $id
302                 FROM  $base.$tabla
303                 WHERE $campo = " . $db->quote($seccion));
304     }
305     // -X2C
306
307 } // -X2C Class :AI_GrupoSecciones
308
309 ?>