From df9d0deaca85d998cd966a75db730202e0f7c993 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Fri, 18 Jul 2003 21:57:27 +0000 Subject: [PATCH] =?utf8?q?-=20Se=20agrega=20un=20TODO=20list.=20-=20Se=20a?= =?utf8?q?ctualiza=20la=20template=20del=20xmi2code.=20-=20Se=20ordenan=20?= =?utf8?q?bastante=20los=20objetos=20principales,=20dando=20lugar=20a=20nu?= =?utf8?q?evos=20objetos=20=20=20m=C3=A1s=20abstractos.=20-=20Nuevo=20obje?= =?utf8?q?to=20AI=5FDBObject=20que=20implementa=20m=C3=A9todos=20generales?= =?utf8?q?=20de=20ABM.=20-=20AI=5FDBObject=20(y=20sus=20subclases)=20usan?= =?utf8?q?=20archivos=20de=20configuraci=C3=B3n=20.ini=20para=20=20=20guar?= =?utf8?q?dar=20los=20datos=20sobre=20la=20base=20de=20datos.=20-=20Nuevo?= =?utf8?q?=20objeto=20AI=5FDBTreeObject=20que=20hereda=20de=20AI=5FDBObjec?= =?utf8?q?t.=20Implementa=20m=C3=A9todos=20=20=20para=20obtener=20hijos.?= =?utf8?q?=20-=20AI=5FSistema=20ahora=20hereda=20de=20AI=5FDBObject.=20-?= =?utf8?q?=20AI=5FGrupoSecciones=20y=20AI=5FServicio=20ahora=20heredan=20d?= =?utf8?q?e=20AI=5FDBTreeObject.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- TODO | 14 +++ doc/uml.xmi | 143 +++++++++++++++++------------ doc/xmi2code.tpl.php | 2 +- lib/AI/DBObject.php | 184 ++++++++++++++++++++++++++++++++++++++ lib/AI/DBTreeObject.php | 119 ++++++++++++++++++++++++ lib/AI/GrupoSecciones.ini | 13 +++ lib/AI/GrupoSecciones.php | 171 +++++++++-------------------------- lib/AI/Servicio.ini | 6 ++ lib/AI/Servicio.php | 165 +++------------------------------- lib/AI/Sistema.ini | 5 ++ lib/AI/Sistema.php | 118 +++--------------------- 11 files changed, 497 insertions(+), 443 deletions(-) create mode 100644 TODO create mode 100644 lib/AI/DBObject.php create mode 100644 lib/AI/DBTreeObject.php create mode 100644 lib/AI/GrupoSecciones.ini create mode 100644 lib/AI/Servicio.ini create mode 100644 lib/AI/Sistema.ini diff --git a/TODO b/TODO new file mode 100644 index 0000000..6468e1f --- /dev/null +++ b/TODO @@ -0,0 +1,14 @@ +$Id$ + +- Mover listarImagenes() y arbol2array() de Form.php a un lugar más apropiado y + con un nombre más apropiado. +- Ordenar todo mejor (index.php no da más). +- Mejorar obtención de lista de sistemas (que no cree una DB on-the-fly en + Form.php). +- Filtrar sistemas ya agregados en el select para agregar un sistema nuevo + (SAMURAI_Sistema no sirve para esto). +- Ver que se hace con los hijos cuando se borra un elemento. Opciones: + * Borrar todos los hijos. + * Mover los hijos al padre del elemento a borrar (recomendado). +- Agregar links para agregar un elemento nuevo sin tener que tocar en el + ícono de la sección que es poco intuitivo. diff --git a/doc/uml.xmi b/doc/uml.xmi index 7e5ad51..d5e692f 100644 --- a/doc/uml.xmi +++ b/doc/uml.xmi @@ -9,33 +9,21 @@ - + - - - - - - - - - - - - + @@ -45,23 +33,16 @@ x2c:get" name="hijos" static="0" scope="202" /> - - - - - - - - + @@ -88,18 +69,12 @@ x2c:include: PEAR.php" name="PEAR_Error" static="0" scope="200" /> - - - - - @@ -124,38 +99,94 @@ x2c:get" name="hijos" static="0" scope="202" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - + + + + + + + + + + + - - + + - - + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + @@ -169,6 +200,19 @@ x2c:get" name="hijos" static="0" scope="202" /> + + + + + + + + + + + + + @@ -181,28 +225,20 @@ x2c:get" name="hijos" static="0" scope="202" /> - - - - - - - - @@ -213,9 +249,6 @@ x2c:get" name="hijos" static="0" scope="202" /> - - - diff --git a/doc/xmi2code.tpl.php b/doc/xmi2code.tpl.php index eea3564..fa94d9a 100644 --- a/doc/xmi2code.tpl.php +++ b/doc/xmi2code.tpl.php @@ -1,5 +1,5 @@ | +// +--------------------------------------------------------------------+ +// +// $Id$ +// + +// +X2C Class 516 :AI_DBObject +/** + * Objecto con capacidad de guardarse, cargarse y borrarse de una base de datos. + * + * @package AI + * @access public + * @abstract + */ +class AI_DBObject { + /** + * @var array $conf + * @access public + */ + var $conf = array(); + + // ~X2C + + // +X2C Operation 519 + /** + * @param int $id Identificador del objeto a cargar. + * @param string $confFile Archivo de configuracin del objeto. + * + * @return void + * @access public + */ + function AI_DBObject($id = 0, $confFile = '') // ~X2C + { + if ($confFile) { + $this->conf = parse_ini_file($confFile, true); + } else { + $this->conf = parse_ini_file(dirname(__FILE__) . get_class($this) + . '.ini', true); + } + $id_field = $this->conf['id']; + $this->$id_field = $id; + } + // -X2C + + // +X2C Operation 520 + /** + * @param mixed $db Base de datos o resultado a usar para cargar el objeto. + * + * @return PEAR_Error + * @access public + */ + function cargar($db) // ~X2C + { + $id_field = $this->conf['id']; + $id = intval($this->$id_field); + if (is_a($db, 'db_result')) { + $result = $db; + $db = $result->dbh; + // Si no es un resultado, hago el query. + } else { + $result = $db->query( + "SELECT * + FROM {$this->conf['base']}.{$this->conf['tabla']} + WHERE $id_field = $id" + ); + if (DB::isError($result)) { + return $result; + } + } + // Obtengo la fila. + $row = $result->fetchRow(DB_FETCHMODE_ASSOC); + if (!$row) { + return new AI_Error(AI_ERROR_NO_RESULTADOS, + "No hay más resultados en la DB [id=$id]"); + } + // Asigno valores al objeto. + foreach ($row as $key => $val) { + $this->$key = $val; + } + return true; + } + // -X2C + + // +X2C Operation 521 + /** + * @param DB $db Base de datos a usar para guardar el objeto. + * @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). + * @param bool $nuevo Si es true, se fuerza a cargar el objeto en la base como si fuera nuevo. + * + * @return PEAR_Error + * @access public + * @static + */ + function guardar($db, $datos, $nuevo = false) // ~X2C + { + $id_field = $this->conf['id']; + $tabla = $this->conf['tabla']; + $base = $this->conf['base']; + $id = intval($this->$id_field); + $where = ''; + if ($id and !$nuevo) { + $accion = DB_AUTOQUERY_UPDATE; + $where = "$id_field = $id"; + } else { + $accion = DB_AUTOQUERY_INSERT; + // Si no tiene ID, le asigno uno nuevo. + if (!$id) { + $id = $db->nextId($tabla); + if (DB::isError($id)) { + return $id; + } + $this->$id_field = $id; + } + $datos[$id_field] = $id; + } + $res = $db->autoExecute("$base.$tabla", $datos, $accion, $where); + if (DB::isError($res)) { + return $res; + } + return true; + } + // -X2C + + // +X2C Operation 522 + /** + * @param DB $db Base de datos a usar para borrar el objeto. + * + * @return PEAR_Error + * @access public + */ + function borrar($db) // ~X2C + { + $id_field = $this->conf['id']; + $tabla = $this->conf['base'].'.'.$this->conf['tabla']; + $id = intval($this->$id_field); + if ($id) { + $res = $db->query( + "DELETE FROM $tabla WHERE $id_field = $id"); + if (DB::isError($res)) { + return $res; + } + return true; + } + return PEAR::raiseError('No hay un identificador válido para borrar'); + } + // -X2C + + // +X2C Operation 523 + /** + * @return AI_DBObject + * @access public + */ + function __clone() // ~X2C + { + return $this; + } + // -X2C + +} // -X2C Class :AI_DBObject + +?> \ No newline at end of file diff --git a/lib/AI/DBTreeObject.php b/lib/AI/DBTreeObject.php new file mode 100644 index 0000000..5d86cba --- /dev/null +++ b/lib/AI/DBTreeObject.php @@ -0,0 +1,119 @@ + | +// +--------------------------------------------------------------------+ +// +// $Id$ +// + +// +X2C includes +require_once 'AI/DBObject.php'; +// ~X2C + +// +X2C Class 524 :AI_DBTreeObject +/** + * @package AI + * @access public + * @abstract + */ +class AI_DBTreeObject extends AI_DBObject { + /** + * Grupos de secciones que tiene este grupo. + * + * @var array $hijos + * @access protected + */ + var $_hijos = array(); + + /** + * Gets Hijos. + * + * @return array + * @access public + */ + function getHijos() + { + return $this->_hijos; + } + + // ~X2C + + // +X2C Operation 526 + /** + * @param int $id Identificador del objecto. + * @param string $confFile Configuracin del objeto. + * + * @return void + * @access public + */ + function AI_DBTreeObject($id = 0, $confFile = '') // ~X2C + { + parent::AI_DBObject($id, $confFile); + } + // -X2C + + // +X2C Operation 527 + /** + * @param mixed $db Base de datos o resultado de donde cargar los hijos. + * + * @return PEAR_Error + * @access public + */ + function cargarHijos($db) // ~X2C + { + $id_field = $this->conf['id']; + $id_padre = $this->conf['padre']; + $tabla = $this->conf['base'].'.'.$this->conf['tabla']; + $id = intval($this->$id_field); + if (is_a($db, 'db_result')) { + $result = $db; + $db = $result->dbh; + // Si no es un resultado, hago el query. + } else { + $result = $db->query("SELECT * FROM $tabla WHERE $id_padre = $id"); + if (DB::isError($result)) { + return $result; + } + } + $this->_hijos = array(); + $clase = get_class($this); + $hijo = new $clase; + $err = $hijo->cargar($result); + while (!PEAR::isError($err)) { + $this->_hijos[] = $hijo->__clone(); + $err = $hijo->cargar($result); + } + // Si no hay mas resultados, entonces terminó bien. + if (AI_Error::isError($err) + and $err->getCode() == AIERROR_NO_RESULTADOS) { + return true; + } + // Si no, se devuelve el error. + return $err; + } + // -X2C + +} // -X2C Class :AI_DBTreeObject + +?> \ No newline at end of file diff --git a/lib/AI/GrupoSecciones.ini b/lib/AI/GrupoSecciones.ini new file mode 100644 index 0000000..0d162df --- /dev/null +++ b/lib/AI/GrupoSecciones.ini @@ -0,0 +1,13 @@ +; $Id$ + +base = intranet +tabla = grupo_secciones +id = grupo +padre = grupo_padre + +; Vinculación con secciones de noticias. +[secciones] +base = intranet +tabla = grupo_secciones_seccion +id = grupo +campo = seccion diff --git a/lib/AI/GrupoSecciones.php b/lib/AI/GrupoSecciones.php index c7d54d9..b842671 100644 --- a/lib/AI/GrupoSecciones.php +++ b/lib/AI/GrupoSecciones.php @@ -1,5 +1,5 @@ _hijos; - } - // ~X2C // +X2C Operation 495 @@ -121,7 +106,7 @@ class AI_GrupoSecciones { */ function AI_GrupoSecciones($grupo = 0) // ~X2C { - $this->grupo = $grupo; + parent::AI_DBTreeObject($grupo, dirname(__FILE__) . '/GrupoSecciones.ini'); } // -X2C @@ -134,40 +119,18 @@ class AI_GrupoSecciones { */ function cargar($db) // ~X2C { - $grupo = intval($this->grupo); - if (is_a($db, 'db_result')) { - $result = $db; - $db = $result->dbh; - // Si no es un resultado, hago el query. - } else { - $result = $db->query( - "SELECT * - FROM grupo_secciones - WHERE grupo = $grupo" - ); - if (DB::isError($result)) { - return $result; - } + // Obtengo campos comunes. + $err = parent::cargar($db); + if (PEAR::isError($err)) { + return $err; } - // Obtengo la fila. - $row = $result->fetchRow(DB_FETCHMODE_ASSOC); - if (!$row) { - return new AI_Error(AI_ERROR_NO_RESULTADOS, - "No hay más resultados en la DB [grupo=$grupo]"); - } - // Asigno valores al objeto. - extract($row); - $this->grupo = $grupo; - $this->nombre = $nombre; - $this->grupo_padre = $grupo_padre; - $this->habilitado = $habilitado; - $this->antiguedad = $antiguedad; - $this->mostrar_hijos= $mostrar_hijos; // Obtengo secciones. + $id = intval($this->grupo); + extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf'); $secciones = $db->getCol( - "SELECT seccion - FROM grupo_secciones_seccion - WHERE grupo = $grupo" + "SELECT $cnf_campo + FROM $cnf_base.$cnf_tabla + WHERE $cnf_id = $id" ); if (DB::isError($secciones)) { return $secciones; @@ -191,8 +154,7 @@ class AI_GrupoSecciones { */ function guardar($db, $nuevo = false) // ~X2C { - $grupo = intval($this->grupo); - $where = ''; + // Guardo datos generales. $datos = array( 'grupo_padre' => intval($this->grupo_padre), 'nombre' => $this->nombre, @@ -200,31 +162,20 @@ class AI_GrupoSecciones { 'antiguedad' => intval($this->antiguedad), 'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0, ); - if ($grupo and !$nuevo) { - $accion = DB_AUTOQUERY_UPDATE; - $where = "grupo = $grupo"; - } else { - $accion = DB_AUTOQUERY_INSERT; - // Si no tiene ID, le asigno uno nuevo. - if (!$grupo) { - $grupo = $db->nextId('grupo_secciones'); - if (DB::isError($grupo)) { - return $grupo; - } - $this->grupo = $grupo; - } - $datos['grupo'] = $grupo; + $err = parent::guardar($db, $datos, $nuevo); + if (PEAR::isError($err)) { + return $err; } - $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where); + // Guardo datos de secciones. + $id_field = $this->conf['id']; + $id = intval($this->$id_field); + extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf'); + $res = $db->query("DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id"); if (DB::isError($res)) { return $res; } - $res = $db->query("DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo"); - if (DB::isError($res)) { - return $res; - } - $prepare = $db->prepare("INSERT INTO grupo_secciones_seccion - (grupo, seccion) VALUES ($grupo, ?)"); + $prepare = $db->prepare("INSERT INTO $cnf_base.$cnf_tabla + ($cnf_id, $cnf_campo) VALUES ($id, ?)"); if (DB::isError($prepare)) { return $prepare; } @@ -245,55 +196,24 @@ class AI_GrupoSecciones { */ function borrar($db) // ~X2C { - $grupo = intval($this->grupo); - if ($grupo) { - $res = $db->query( - "DELETE FROM grupo_secciones WHERE grupo = $grupo"); - if (DB::isError($res)) { - return $res; - } - $res = $db->query( - "DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo"); - if (DB::isError($res)) { - return $res; - } - return true; - } - return PEAR::raiseError("No hay un grupo válido para borrar"); - } - // -X2C - - // +X2C Operation 499 - /** - * @param DB $db DB de donde cargar los hijos. - * - * @return PEAR_Error - * @access public - */ - function cargarHijos($db) // ~X2C - { - $grupo = intval($this->grupo); - $result = $db->query("SELECT * FROM grupo_secciones WHERE grupo_padre = $grupo"); - if (DB::isError($result)) { - return $result; - } - $this->_hijos = array(); - $hijo = new GrupoSecciones; - $err = $hijo->cargar($result); - while (!PEAR::isError($err)) { - $this->_hijos[] = $hijo->__clone(); - $err = $hijo->cargar($result); + // Obtengo campos comunes. + $err = parent::borrar($db); + if (PEAR::isError($err)) { + return $err; } - // Si no hay mas resultados, entonces terminó bien. - if (AI_Error::isError($err) - and $err->getCode() == AI_ERROR_NO_RESULTADOS) { - return true; + // Obtengo secciones. + $id = intval($this->grupo); + extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf'); + $res = $db->query( + "DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id"); + if (DB::isError($res)) { + return $res; } - // Si no, se devuelve el error. - return $err; + return true; } // -X2C + // +X2C Operation 512 /** * Obtiene un array con una lista de secciones. @@ -320,17 +240,6 @@ class AI_GrupoSecciones { } // -X2C - // +X2C Operation 500 - /** - * @return GrupoSecciones - * @access public - */ - function __clone() // ~X2C - { - return $this; - } - // -X2C - } // -X2C Class :AI_GrupoSecciones ?> \ No newline at end of file diff --git a/lib/AI/Servicio.ini b/lib/AI/Servicio.ini new file mode 100644 index 0000000..05eae1e --- /dev/null +++ b/lib/AI/Servicio.ini @@ -0,0 +1,6 @@ +; $Id$ + +base = intranet +tabla = servicio +id = servicio +padre = servicio_padre diff --git a/lib/AI/Servicio.php b/lib/AI/Servicio.php index e83bfd1..a6b4fec 100644 --- a/lib/AI/Servicio.php +++ b/lib/AI/Servicio.php @@ -1,5 +1,5 @@ _hijos; - } - // ~X2C // +X2C Operation 465 @@ -137,51 +122,7 @@ class AI_Servicio { */ function AI_Servicio($servicio = 0) // ~X2C { - $this->servicio = $servicio; - } - // -X2C - - // +X2C Operation 457 - /** - * @param mixed $db Base de datos o Resultado a utilizar. - * - * @return PEAR_Error - * @access public - */ - function cargar($db) // ~X2C - { - $servicio = intval($this->servicio); - if (is_a($db, 'db_result')) { - $result = $db; - // Si no es un resultado, hago el query. - } else { - $result = $db->query( - "SELECT * - FROM servicio - WHERE servicio = $servicio" - ); - if (DB::isError($result)) { - return $result; - } - } - // Obtengo la fila. - $row = $result->fetchRow(DB_FETCHMODE_ASSOC); - if (!$row) { - return new AI_Error(AI_ERROR_NO_RESULTADOS, - "No hay más resultados en la DB [servicio=$servicio]"); - } - // Asigno valores al objeto. - extract($row); - $this->servicio = $servicio; - $this->servicio_padre = $servicio_padre; - $this->nombre = $nombre; - $this->descripcion = $descripcion; - $this->icono = $icono; # FIXME - new HTML_Icono (o no?) - $this->link = $link; - $this->link_ayuda = $link_ayuda; - $this->necesita_logueo = $necesita_logueo; - $this->habilitado = $habilitado; - return true; + parent::AI_DBTreeObject($servicio, dirname(__FILE__) . '/Servicio.ini'); } // -X2C @@ -195,9 +136,7 @@ class AI_Servicio { */ function guardar($db, $nuevo = false) // ~X2C { - $servicio = intval($this->servicio); - $where = ''; - $datos = array( + $datos = array( 'servicio_padre' => intval($this->servicio_padre), 'nombre' => $this->nombre, 'descripcion' => $this->descripcion, @@ -207,92 +146,14 @@ class AI_Servicio { 'necesita_logueo' => $this->necesita_logueo ? 1 : 0, 'habilitado' => $this->habilitado ? 1 : 0, ); - if ($servicio and !$nuevo) { - $accion = DB_AUTOQUERY_UPDATE; - $where = "servicio = $servicio"; - } else { - $accion = DB_AUTOQUERY_INSERT; - // Si no tiene ID, le asigno uno nuevo. - if (!$servicio) { - $servicio = $db->nextId('servicio'); - if (DB::isError($servicio)) { - return $servicio; - } - $this->servicio = $servicio; - } - $datos['servicio'] = $servicio; + $err = parent::guardar($db, $datos, $nuevo); + if (PEAR::isError($err)) { + return $err; } - $res = $db->autoExecute('servicio', $datos, $accion, $where); - if (DB::isError($res)) { - return $res; - } - return true; } // -X2C - // +X2C Operation 456 - /** - * @param DB $db DB de donde borrar. - * - * @return PEAR_Error - * @access public - */ - function borrar($db) // ~X2C - { - $servicio = intval($this->servicio); - if ($servicio) { - $res = $db->query( - "DELETE FROM servicio WHERE servicio = $servicio"); - if (DB::isError($res)) { - return $res; - } - return true; - } - return PEAR::raiseError("No hay un servicio válido para borrar"); - } - // -X2C - // +X2C Operation 463 - /** - * @param DB $db DB de donde cargar los hijos. - * - * @return PEAR_Error - * @access public - */ - function cargarHijos($db) // ~X2C - { - $servicio = intval($this->servicio); - $result = $db->query("SELECT * FROM servicio WHERE servicio_padre = $servicio"); - if (DB::isError($result)) { - return $result; - } - $this->_hijos = array(); - $hijo = new Servicio; - $err = $hijo->cargar($result); - while (!PEAR::isError($err)) { - $this->_hijos[] = $hijo->__clone(); - $err = $hijo->cargar($result); - } - // Si no hay mas resultados, entonces terminó bien. - if (AI_Error::isError($err) - and $err->getCode() == AIERROR_NO_RESULTADOS) { - return true; - } - // Si no, se devuelve el error. - return $err; - } - // -X2C - - // +X2C Operation 501 - /** - * @return Servicio - * @access public - */ - function __clone() // ~X2C - { - return $this; - } - // -X2C } // -X2C Class :AI_Servicio diff --git a/lib/AI/Sistema.ini b/lib/AI/Sistema.ini new file mode 100644 index 0000000..c9ec62f --- /dev/null +++ b/lib/AI/Sistema.ini @@ -0,0 +1,5 @@ +; $Id$ + +base = intranet +tabla = sistema +id = sistema diff --git a/lib/AI/Sistema.php b/lib/AI/Sistema.php index 84a074e..05f2559 100644 --- a/lib/AI/Sistema.php +++ b/lib/AI/Sistema.php @@ -27,6 +27,10 @@ // $Id$ // +// +X2C includes +require_once 'AI/DBObject.php'; +// ~X2C +// require_once 'AI/Error.php'; // TODO - preguntar a gmeray si le sirve, yo no lo uso... require_once 'SAMURAI/Sistema.php'; @@ -38,9 +42,10 @@ require_once 'SAMURAI/Sistema.php'; * @package AI * @access public */ -class AI_Sistema { +class AI_Sistema extends AI_DBObject { /** * ID del sistema (ID en SAMURAI). +FIXME - preguntar a gonzalo si le sirve. * * @var int $sistema * @access public @@ -49,6 +54,7 @@ class AI_Sistema { /** * Nombre del sistema (slo de lectura, extra?o de SAMURAI). +FIXME - preguntar a gonzalo si le sirve. * * @var string $nombre * @access public @@ -66,10 +72,10 @@ class AI_Sistema { /** * ?ono del sistema. * - * @var HTML_Imagen $icono + * @var string $icono * @access public */ - var $icono = null; + var $icono = ''; /** * Enlace a donde se encuentra el sistema. @@ -106,52 +112,7 @@ class AI_Sistema { */ function AI_Sistema($sistema = 0) // ~X2C { - $this->sistema = $sistema; - } - // -X2C - - // +X2C Operation 460 - /** - * @param mixed $db Base de datos o Resultado a utilizar. - * - * @return PEAR_Error - * @access public - */ - function cargar($db) // ~X2C - { - $sistema = intval($this->sistema); - if (is_a($db, 'db_result')) { - $result = $db; - // Si no es un resultado, hago el query. - } else { - $result = $db->query( - "SELECT * - FROM sistema - WHERE sistema = $sistema" - ); - if (DB::isError($result)) { - return $result; - } - } - // Obtengo la fila. - $row = $result->fetchRow(DB_FETCHMODE_ASSOC); - if (!$row) { - return new AI_Error(AI_ERROR_NO_RESULTADOS, - "No hay más resultados en la DB [sistema=$sistema]"); - } - // Asigno valores al objeto. - extract($row); - $this->sistema = $sistema; - $this->icono = $icono; - $this->link = $link; - $this->link_ayuda = $link_ayuda; - $this->habilitado = $habilitado; - // Obtengo datos de SAMURAI. FIXME - preguntar a marrese por manejo de errores. - // TODO - preguntar a gmeray si le sirve, yo no lo uso... - #$sist = new SAMURAI_Sistema($db, $sistema); - #$this->nombre = $sist->getNombre(); - #$this->descripcion = $sist->getDescripcion(); - return true; + parent::AI_DBObject($sistema, dirname(__FILE__) . '/Sistema.ini'); } // -X2C @@ -165,67 +126,16 @@ class AI_Sistema { */ function guardar($db, $nuevo = false) // ~X2C { - $sistema = intval($this->sistema); - $where = ''; - $datos = array( + $datos = array( 'icono' => $this->icono, 'link' => $this->link, 'link_ayuda' => $this->link_ayuda, 'habilitado' => $this->habilitado ? 1 : 0, ); - if ($sistema and !$nuevo) { - $accion = DB_AUTOQUERY_UPDATE; - $where = "sistema = $sistema"; - } else { - $accion = DB_AUTOQUERY_INSERT; - // Si no tiene ID, le asigno uno nuevo. - if (!$sistema) { - $sistema = $db->nextId('sistema'); - if (DB::isError($sistema)) { - return $sistema; - } - $this->sistema = $sistema; - } - $datos['sistema'] = $sistema; - } - $res = $db->autoExecute('sistema', $datos, $accion, $where); - if (DB::isError($res)) { - return $res; - } - return true; - } - // -X2C - - // +X2C Operation 461 - /** - * @param DB $db DB de donde borrar. - * - * @return PEAR_Error - * @access public - */ - function borrar($db) // ~X2C - { - $sistema = intval($this->sistema); - if ($sistema) { - $res = $db->query( - "DELETE FROM sistema WHERE sistema = $sistema"); - if (DB::isError($res)) { - return $res; - } - return true; + $err = parent::guardar($db, $datos, $nuevo); + if (PEAR::isError($err)) { + return $err; } - return PEAR::raiseError("No hay un sistema válido para borrar"); - } - // -X2C - - // +X2C Operation 502 - /** - * @return Sistema - * @access public - */ - function __clone() // ~X2C - { - return $this; } // -X2C -- 2.43.0