2 // vim: set binary expandtab tabstop=4 shiftwidth=4:
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 16:05:22 2003 |
24 // | Autor: Leandro Lucarella <llucar@mecon.gov.ar> |
25 // +--------------------------------------------------------------------+
30 // +X2C Class 516 :AI_DBObject
32 * Objecto con capacidad de guardarse, cargarse y borrarse de una base de datos.
49 * @param int $id Identificador del objeto a cargar.
50 * @param string $confFile Archivo de configuracin del objeto.
55 function AI_DBObject($id = 0, $confFile = '') // ~X2C
58 $this->conf = parse_ini_file($confFile, true);
60 $this->conf = parse_ini_file(dirname(__FILE__) . get_class($this)
63 $id_field = $this->conf['id'];
64 $this->$id_field = $id;
70 * @param mixed $db Base de datos o resultado a usar para cargar el objeto.
75 function cargar($db) // ~X2C
77 $id_field = $this->conf['id'];
78 $id = intval($this->$id_field);
79 if (is_a($db, 'db_result')) {
82 // Si no es un resultado, hago el query.
86 FROM {$this->conf['base']}.{$this->conf['tabla']}
87 WHERE $id_field = $id"
89 if (DB::isError($result)) {
94 $row = $result->fetchRow(DB_FETCHMODE_ASSOC);
96 return new AI_Error(AI_ERROR_NO_RESULTADOS,
97 "No hay más resultados en la DB [id=$id]");
99 // Asigno valores al objeto.
100 foreach ($row as $key => $val) {
107 // +X2C Operation 521
109 * @param DB $db Base de datos a usar para guardar el objeto.
110 * @param array $datos Array con los datos a guardar en la DB (donde la clave es el campo y el valor el contenido a guardar).
111 * @param bool $nuevo Si es true, se fuerza a cargar el objeto en la base como si fuera nuevo.
117 function guardar($db, $datos, $nuevo = false) // ~X2C
119 $id_field = $this->conf['id'];
120 $tabla = $this->conf['tabla'];
121 $base = $this->conf['base'];
122 $id = intval($this->$id_field);
124 if ($id and !$nuevo) {
125 $accion = DB_AUTOQUERY_UPDATE;
126 $where = "$id_field = $id";
128 $accion = DB_AUTOQUERY_INSERT;
129 // Si no tiene ID, le asigno uno nuevo.
131 $id = $db->nextId($tabla);
132 if (DB::isError($id)) {
135 $this->$id_field = $id;
137 $datos[$id_field] = $id;
139 $res = $db->autoExecute("$base.$tabla", $datos, $accion, $where);
140 if (DB::isError($res)) {
147 // +X2C Operation 522
149 * @param DB $db Base de datos a usar para borrar el objeto.
154 function borrar($db) // ~X2C
156 $id_field = $this->conf['id'];
157 $tabla = $this->conf['base'].'.'.$this->conf['tabla'];
158 $id = intval($this->$id_field);
161 "DELETE FROM $tabla WHERE $id_field = $id");
162 if (DB::isError($res)) {
167 return PEAR::raiseError('No hay un identificador válido para borrar');
171 // +X2C Operation 523
173 * @return AI_DBObject
176 function __clone() // ~X2C
182 } // -X2C Class :AI_DBObject