]> git.llucax.com Git - mecon/ai.git/blob - lib/AI/DBTreeObject.php
Se agrega el checkbox para abrir en ventana nueva.
[mecon/ai.git] / lib / AI / DBTreeObject.php
1 <?php
2 // vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
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: Fri Jul 18 18:19:35 2003                                   |
24 // | Autor:  Leandro Lucarella <llucar@mecon.gov.ar>                    |
25 // +--------------------------------------------------------------------+
26 //
27 // $Id$
28 //
29
30 require_once 'AI/DBObject.php';
31
32 /**
33  * @package AI
34  * @access public
35  * @abstract
36  */
37 class AI_DBTreeObject extends AI_DBObject {
38     /**
39      * Grupos de secciones que tiene este grupo.
40      *
41      * @var    array $hijos
42      * @access protected
43      */
44     var $_hijos = array();
45
46     /**
47      * Gets Hijos.
48      *
49      * @return array
50      * @access public
51      */
52     function getHijos()
53     {
54         return $this->_hijos;
55     }
56
57     /**
58      * @param  int $id Identificador del objecto.
59      * @param  string $confFile Configuración del objeto.
60      *
61      * @return void
62      * @access public
63      */
64     function AI_DBTreeObject($id = 0, $confFile = '')
65     {
66         parent::AI_DBObject($id, $confFile);
67     }
68
69     /**
70      * Carga hijos de un objeto.
71      * Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un
72      * array de objetos (los hijos).
73      *
74      * @param  mixed $db Base de datos o resultado de donde cargar los hijos.
75      * @param  bool $soloHabilitados Si es true, se cargan solo los hijos con
76      *                               el flag habilitado.
77      * @param  string $orden Indica cómo ordenar los hijos cargados.
78      *
79      * @return mixed
80      * @access public
81      */
82     function cargarHijos($db, $soloHabilitados = true, $orden = 'nombre')
83     {
84         $id_field = $this->conf['id'];
85         $id_padre = $this->conf['padre'];
86         $tabla    = $this->conf['base'].'.'.$this->conf['tabla'];
87         $id       = intval($this->$id_field);
88         if (is_a($db, 'db_result')) {
89             $result = $db;
90             $db     = $result->dbh;
91         // Si no es un resultado, hago el query.
92         } else {
93             $query = "SELECT * FROM $tabla WHERE $id_padre = $id";
94             if ($soloHabilitados) {
95                 $query .= ' AND ' . $this->conf['habilitado'] . ' = 1';
96             }
97             if ($orden) {
98                 $query .= ' ORDER BY ' . $orden;
99             }
100             $result = $db->query($query);
101             if (DB::isError($result)) {
102                 return $result;
103             }
104         }
105         $this->_hijos = array();
106         $clase = get_class($this);
107         $hijo  = new $clase;
108         $err   = $hijo->cargar($result);
109         while (!PEAR::isError($err)) {
110             $this->_hijos[] = $hijo->__clone();
111             $err = $hijo->cargar($result);
112         }
113         // Si no hay mas resultados, entonces terminó bien.
114         if (AI_Error::isError($err)
115                 and $err->getCode() == AI_ERROR_NO_RESULTADOS) {
116             return $this->_hijos;
117         }
118         // Si no, se devuelve el error.
119         return $err;
120     }
121
122     /**
123      * Borra el objeto de la base de datos verificando que no tenga hijos.
124      *
125      * @param  DB $db Base de datos de la cual borrar el objeto.
126      *
127      * @return PEAR_Error
128      * @access public
129      */
130     function borrar($db)
131     {
132                 $id_field = $this->conf['id'];
133                 $id_padre = $this->conf['padre'];
134         $tabla = $this->conf['base'].'.'.$this->conf['tabla'];
135         $id = intval($this->$id_field);
136         if ($id) {
137             // Verifico si tiene hijos.
138             $hijos = $db->getOne("
139                 SELECT $id_field
140                 FROM   $tabla
141                 WHERE  $id_padre = $id");
142             if (DB::isError($hijos)) {
143                 return $hijos;
144             } elseif ($hijos) {
145                 // Si tiene hijos, da error.
146                 return new AI_Error(AI_ERROR_TIENE_HIJOS,
147                     "El elemento de identificador $id todavía tiene hijos.");
148             } else {
149                 // Si no tiene hijos, lo borro.
150                 return parent::borrar($db);
151             }
152         }
153         return PEAR::raiseError('No hay un identificador válido para borrar');
154     }
155
156 }
157
158 ?>