]> git.llucax.com Git - mecon/ai.git/blob - sistema/local_lib/GrupoSecciones.php
- Se termina de implementar GrupoSecciones (aparentemente).
[mecon/ai.git] / sistema / local_lib / GrupoSecciones.php
1 <?php
2 // vim: set expandtab tabstop=4 softtabstop=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 'AIError.php';
31
32 // +X2C Class 486 :GrupoSecciones
33 /**
34  * Grupo de secciones.
35  *
36  * @access public
37  */
38 class GrupoSecciones {
39     /**
40      * ID del grupo de secciones.
41      *
42      * @var    int $grupo
43      * @access public
44      */
45     var $grupo = 0;
46
47     /**
48      * Nombre.
49      *
50      * @var    string $nombre
51      * @access public
52      */
53     var $nombre = '';
54
55     /**
56      * @var    int $padre
57      * @access public
58      */
59     var $padre = 0;
60
61     /**
62      * Grupos de secciones que tiene este grupo.
63      *
64      * @var    array $hijos
65      * @access protected
66      */
67     var $_hijos = array();
68
69     /**
70      * Secciones que pertenecen a este grupo.
71      *
72      * @var    array $secciones
73      * @access public
74      */
75     var $secciones = array();
76
77     /**
78      * Antigedad (en d?s) de las noticias a mostrar.
79      *
80      * @var    int $antiguedad
81      * @access public
82      */
83     var $antiguedad = 0;
84
85     /**
86      * True si hay que mostrar los grupos hijos (?? FIXME).
87      *
88      * @var    bool $mostrarHijos
89      * @access public
90      */
91     var $mostrarHijos = false;
92
93     /**
94      * Indica si esta habilitado.
95      *
96      * @var    bool $habilitado
97      * @access public
98      */
99     var $habilitado = true;
100
101     /**
102      * Gets Hijos.
103      *
104      * @return array
105      * @access public
106      */
107     function getHijos()
108     {
109         return $this->_hijos;
110     }
111
112     // ~X2C
113
114     // +X2C Operation 495
115     /**
116      * @param  int $grupo ID del grupo.
117      *
118      * @return void
119      * @access public
120      */
121     function GrupoSecciones($grupo = 0)// ~X2C
122     {
123         $this->grupo = $grupo;
124     }
125     // -X2C
126
127     // +X2C Operation 496
128     /**
129      * @param  mixed $db Base de datos o Resultado a utilizar.
130      *
131      * @return PEAR_Error
132      * @access public
133      */
134     function cargar($db)// ~X2C
135     {
136         $grupo = intval($this->grupo);
137         if (is_a($db, 'db_result')) {
138             $result = $db;
139             $db     = $result->dbh;
140         // Si no es un resultado, hago el query.
141         } else {
142             $result = $db->query(
143                 "SELECT *
144                     FROM grupo_secciones
145                     WHERE grupo = $grupo"
146             );
147             if (DB::isError($result)) {
148                 return $result;
149             }
150         }
151         // Obtengo la fila.
152         $row = $result->fetchRow(DB_FETCHMODE_ASSOC);
153         if (!$row) {
154             return new AIError(AIERROR_NO_RESULTADOS,
155                 "No hay más resultados en la DB [grupo=$grupo]");
156         }
157         // Asigno valores al objeto.
158         extract($row);
159         $this->grupo        = $grupo;
160         $this->nombre       = $nombre;
161         $this->padre        = $grupo_padre;
162         $this->antiguedad   = $antiguedad;
163         $this->mostrarHijos = $mostrar_hijos;
164         // Obtengo secciones.
165         $secciones = $db->getCol(
166             "SELECT seccion
167                 FROM grupo_secciones_seccion
168                 WHERE grupo = $grupo"
169         );
170         if (DB::isError($secciones)) {
171             return $secciones;
172         }
173         if ($secciones) {
174             $this->secciones = $secciones;
175         } else {
176             $this->secciones = array();
177         }
178         return true;
179     }
180     // -X2C
181
182     // +X2C Operation 497
183     /**
184      * @param  DB $db DB donde guardar.
185      *
186      * @return PEAR_Error
187      * @access public
188      */
189     function guardar($db)// ~X2C
190     {
191         $grupo = intval($this->grupo);
192         $where = '';
193         $datos = array(
194             'grupo_padre'   => intval($this->padre),
195             'nombre'        => $this->nombre,
196             'habilitado'    => $this->habilitado ? 1 : 0,
197             'antiguedad'    => intval($this->antiguedad),
198             'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0,
199         );
200         if ($grupo) {
201             $accion = DB_AUTOQUERY_UPDATE;
202             $where  = "grupo = $grupo";
203         } else {
204             $accion = DB_AUTOQUERY_INSERT;
205             $grupo  = $db->nextId('grupo_secciones');
206             if (DB::isError($grupo)) {
207                 return $grupo;
208             }
209             // Asigno el nuevo id de grupo.
210             $this->grupo = $grupo;
211             $datos['grupo'] = $grupo;
212         }
213         $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where);
214         if (DB::isError($res)) {
215             return $res;
216         }
217         $res = $db->query("DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo");
218         if (DB::isError($res)) {
219             return $res;
220         }
221         $prepare = $db->prepare("INSERT INTO grupo_secciones_seccion
222             (grupo, seccion) VALUES ($grupo, ?)");
223         if (DB::isError($prepare)) {
224             return $prepare;
225         }
226         $res = $db->executeMultiple($prepare, $this->secciones);
227         if (DB::isError($res)) {
228             return $res;
229         }
230         return true;
231     }
232     // -X2C
233
234     // +X2C Operation 498
235     /**
236      * @param  DB $db DB de donde borrar.
237      *
238      * @return PEAR_Error
239      * @access public
240      */
241     function borrar($db)// ~X2C
242     {
243         $grupo = intval($this->grupo);
244         if ($grupo) {
245             $res = $db->query(
246                 "DELETE FROM grupo_secciones WHERE grupo = $grupo");
247             if (DB::isError($res)) {
248                 return $res;
249             }
250             $res = $db->query(
251                 "DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo");
252             if (DB::isError($res)) {
253                 return $res;
254             }
255             return true;
256         }
257         return PEAR::raiseError("No hay un grupo valido para borrar");
258     }
259     // -X2C
260
261     // +X2C Operation 499
262     /**
263      * @param  DB $db DB de donde cargar los hijos.
264      *
265      * @return PEAR_Error
266      * @access public
267      */
268     function cargarHijos($db)// ~X2C
269     {
270         $grupo  = intval($this->grupo);
271         $result = $db->query("SELECT * FROM grupo_secciones WHERE grupo_padre = $grupo");
272         if (DB::isError($result)) {
273             return $result;
274         }
275         $this->_hijos = array();
276         $hijo = new GrupoSecciones;
277         $err  = $hijo->cargar($result);
278         while (!PEAR::isError($err)) {
279             $this->_hijos[] = $hijo->__clone();
280             $err = $hijo->cargar($result);
281         }
282         // Si no hay mas resultados, entonces terminó bien.
283         if (is_a($err, 'aierror')
284                 and $err->getCode() == AIERROR_NO_RESULTADOS) {
285             return true;
286         }
287         // Si no, se devuelve el error.
288         return $err;
289     }
290     // -X2C
291
292     // +X2C Operation 500
293     /**
294      * @return GrupoSecciones
295      * @access public
296      */
297     function __clone()// ~X2C
298     {
299         return $this;
300     }
301     // -X2C
302
303 } // -X2C Class :GrupoSecciones
304
305 ?>