]> git.llucax.com Git - mecon/ai.git/blob - lib/AI/DBTreeObject.php
71689bc85f7018b4f363dcbb335c3366e40193ad
[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 // +X2C includes
31 require_once 'AI/DBObject.php';
32 // ~X2C
33
34 // +X2C Class 524 :AI_DBTreeObject
35 /**
36  * @package AI
37  * @access public
38  * @abstract
39  */
40 class AI_DBTreeObject extends AI_DBObject {
41     /**
42      * Grupos de secciones que tiene este grupo.
43      *
44      * @var    array $hijos
45      * @access protected
46      */
47     var $_hijos = array();
48
49     /**
50      * Gets Hijos.
51      *
52      * @return array
53      * @access public
54      */
55     function getHijos()
56     {
57         return $this->_hijos;
58     }
59
60     // ~X2C
61
62     // +X2C Operation 526
63     /**
64      * @param  int $id Identificador del objecto.
65      * @param  string $confFile Configuracin del objeto.
66      *
67      * @return void
68      * @access public
69      */
70     function AI_DBTreeObject($id = 0, $confFile = '') // ~X2C
71     {
72         parent::AI_DBObject($id, $confFile);
73     }
74     // -X2C
75
76     // +X2C Operation 527
77     /**
78      * @param  mixed $db Base de datos o resultado de donde cargar los hijos.
79      *
80      * @return PEAR_Error
81      * @access public
82      */
83     function cargarHijos($db) // ~X2C
84     {
85         $id_field = $this->conf['id'];
86         $id_padre = $this->conf['padre'];
87         $tabla    = $this->conf['base'].'.'.$this->conf['tabla'];
88         $id       = intval($this->$id_field);
89         if (is_a($db, 'db_result')) {
90             $result = $db;
91             $db     = $result->dbh;
92         // Si no es un resultado, hago el query.
93         } else {
94             $result   = $db->query("SELECT * FROM $tabla WHERE $id_padre = $id");
95             if (DB::isError($result)) {
96                 return $result;
97             }
98         }
99         $this->_hijos = array();
100         $clase = get_class($this);
101         $hijo  = new $clase;
102         $err   = $hijo->cargar($result);
103         while (!PEAR::isError($err)) {
104             $this->_hijos[] = $hijo->__clone();
105             $err = $hijo->cargar($result);
106         }
107         // Si no hay mas resultados, entonces terminó bien.
108         if (AI_Error::isError($err)
109                 and $err->getCode() == AI_ERROR_NO_RESULTADOS) {
110             return true;
111         }
112         // Si no, se devuelve el error.
113         return $err;
114     }
115     // -X2C
116
117     // +X2C Operation 529
118     /**
119      * Borra el objeto de la base de datos verificando que no tenga hijos.
120      *
121      * @param  DB $db Base de datos de la cual borrar el objeto.
122      *
123      * @return PEAR_Error
124      * @access public
125      */
126     function borrar($db) // ~X2C
127     {
128                 $id_field = $this->conf['id'];
129                 $id_padre = $this->conf['padre'];
130         $tabla = $this->conf['base'].'.'.$this->conf['tabla'];
131         $id = intval($this->$id_field);
132         if ($id) {
133             // Verifico si tiene hijos.
134             $hijos = $db->getOne("
135                 SELECT $id_field
136                 FROM   $tabla
137                 WHERE  $id_padre = $id");
138             if (DB::isError($hijos)) {
139                 return $hijos;
140             } elseif ($hijos) {
141                 // Si tiene hijos, da error.
142                 return new AI_Error(AI_ERROR_TIENE_HIJOS,
143                     "El elemento de identificador $id todavía tiene hijos.");
144             } else {
145                 // Si no tiene hijos, lo borro.
146                 return parent::borrar($db);
147             }
148         }
149         return PEAR::raiseError('No hay un identificador válido para borrar');
150     }
151     // -X2C
152
153 } // -X2C Class :AI_DBTreeObject
154
155 ?>