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. |
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. |
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. |
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 // +--------------------------------------------------------------------+
31 require_once 'AI/DBObject.php';
34 // +X2C Class 524 :AI_DBTreeObject
40 class AI_DBTreeObject extends AI_DBObject {
42 * Grupos de secciones que tiene este grupo.
47 var $_hijos = array();
64 * @param int $id Identificador del objecto.
65 * @param string $confFile Configuración del objeto.
70 function AI_DBTreeObject($id = 0, $confFile = '') // ~X2C
72 parent::AI_DBObject($id, $confFile);
78 * Carga hijos de un objeto. Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un array de objetos (los hijos).
80 * @param mixed $db Base de datos o resultado de donde cargar los hijos.
81 * @param bool $soloHabilitados Si es true, se cargan solo los hijos con el flag habilitado.
82 * @param string $orden Indica cómo ordenar los hijos cargados.
87 function cargarHijos($db, $soloHabilitados = true, $orden = 'nombre') // ~X2C
89 $id_field = $this->conf['id'];
90 $id_padre = $this->conf['padre'];
91 $tabla = $this->conf['base'].'.'.$this->conf['tabla'];
92 $id = intval($this->$id_field);
93 if (is_a($db, 'db_result')) {
96 // Si no es un resultado, hago el query.
98 $query = "SELECT * FROM $tabla WHERE $id_padre = $id";
99 if ($soloHabilitados) {
100 $query .= ' AND ' . $this->conf['habilitado'] . ' = 1';
103 $query .= ' ORDER BY ' . $orden;
105 $result = $db->query($query);
106 if (DB::isError($result)) {
110 $this->_hijos = array();
111 $clase = get_class($this);
113 $err = $hijo->cargar($result);
114 while (!PEAR::isError($err)) {
115 $this->_hijos[] = $hijo->__clone();
116 $err = $hijo->cargar($result);
118 // Si no hay mas resultados, entonces terminó bien.
119 if (AI_Error::isError($err)
120 and $err->getCode() == AI_ERROR_NO_RESULTADOS) {
121 return $this->_hijos;
123 // Si no, se devuelve el error.
128 // +X2C Operation 529
130 * Borra el objeto de la base de datos verificando que no tenga hijos.
132 * @param DB $db Base de datos de la cual borrar el objeto.
137 function borrar($db) // ~X2C
139 $id_field = $this->conf['id'];
140 $id_padre = $this->conf['padre'];
141 $tabla = $this->conf['base'].'.'.$this->conf['tabla'];
142 $id = intval($this->$id_field);
144 // Verifico si tiene hijos.
145 $hijos = $db->getOne("
148 WHERE $id_padre = $id");
149 if (DB::isError($hijos)) {
152 // Si tiene hijos, da error.
153 return new AI_Error(AI_ERROR_TIENE_HIJOS,
154 "El elemento de identificador $id todavía tiene hijos.");
156 // Si no tiene hijos, lo borro.
157 return parent::borrar($db);
160 return PEAR::raiseError('No hay un identificador válido para borrar');
164 } // -X2C Class :AI_DBTreeObject