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