From d734a389cf0d4b80a22887fd27c8a88379b01527 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Mon, 21 Jul 2003 19:25:02 +0000 Subject: [PATCH] =?utf8?q?-=20Se=20agrega=20un=20m=C3=A9todo=20est=C3=A1ti?= =?utf8?q?co=20AI=5FError::isError()=20para=20saber=20si=20algo=20es=20un?= =?utf8?q?=20=20=20error.=20-=20Se=20verifica=20si=20un=20objeto=20tiene?= =?utf8?q?=20hijos=20antes=20de=20borrarlo=20e=20impidiendo=20que=20=20=20?= =?utf8?q?se=20lo=20borre=20con=20un=20mensaje=20de=20error=20en=20ese=20c?= =?utf8?q?aso.=20-=20Se=20actualiza=20la=20TODO=20list.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- TODO | 3 -- doc/uml.xmi | 62 +++++++++++++++++++++++------------------ lib/AI/DBTreeObject.php | 36 ++++++++++++++++++++++++ lib/AI/Error.php | 25 ++++++++++++++++- lib/AI/Sistema.php | 2 +- sistema/www/index.php | 20 +++++++++---- 6 files changed, 111 insertions(+), 37 deletions(-) diff --git a/TODO b/TODO index 9fc3e85..5527c3f 100644 --- a/TODO +++ b/TODO @@ -4,9 +4,6 @@ $Id$ con un nombre más apropiado. - Ordenar todo mejor (index.php no da más). - No crear una DB on-the-fly en Form.php. -- 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. - Ver que se hace con sistemas borrados de SAMURAI con baja lógica. diff --git a/doc/uml.xmi b/doc/uml.xmi index 6597776..ee2eb86 100644 --- a/doc/uml.xmi +++ b/doc/uml.xmi @@ -9,7 +9,7 @@ - + @@ -56,6 +56,9 @@ FIXME - preguntar a gonzalo si le sirve." name="nombre" static="0" scope="200" / + + + @@ -130,6 +133,9 @@ x2c:include: PEAR.php" name="PEAR_Error" static="0" scope="200" /> + + + @@ -137,60 +143,60 @@ x2c:get" name="hijos" static="0" scope="202" /> - - - - - - - - - - - + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -214,11 +220,13 @@ x2c:get" name="hijos" static="0" scope="202" /> + - + + diff --git a/lib/AI/DBTreeObject.php b/lib/AI/DBTreeObject.php index 5d86cba..c8752c8 100644 --- a/lib/AI/DBTreeObject.php +++ b/lib/AI/DBTreeObject.php @@ -114,6 +114,42 @@ class AI_DBTreeObject extends AI_DBObject { } // -X2C + // +X2C Operation 529 + /** + * Borra el objeto de la base de datos verificando que no tenga hijos. + * + * @param DB $db Base de datos de la cual borrar el objeto. + * + * @return PEAR_Error + * @access public + */ + function borrar($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 ($id) { + // Verifico si tiene hijos. + $hijos = $db->getOne(" + SELECT $id_field + FROM $tabla + WHERE $id_padre = $id"); + if (DB::isError($hijos)) { + return $hijos; + } elseif ($hijos) { + // Si tiene hijos, da error. + return new AI_Error(AI_ERROR_TIENE_HIJOS, + "El elemento de identificador $id todavía tiene hijos."); + } else { + // Si no tiene hijos, lo borro. + return parent::borrar($db); + } + } + return PEAR::raiseError('No hay un identificador válido para borrar'); + } + // -X2C + } // -X2C Class :AI_DBTreeObject ?> \ No newline at end of file diff --git a/lib/AI/Error.php b/lib/AI/Error.php index b4a221a..f73cd22 100644 --- a/lib/AI/Error.php +++ b/lib/AI/Error.php @@ -39,6 +39,15 @@ require_once 'PEAR.php'; */ define('AI_ERROR_NO_RESULTADOS', 1); +/** + * Error que indica que un padre no se puede borrar porque aún tiene + * hijos. + * + * Es un error esperado y poco grave que sucede cuando se intenta borrar + * un elemento del tipo AI_DBTreeObject que aún tiene hijos. + */ +define('AI_ERROR_TIENE_HIJOS', 2); + // +X2C Class 469 :AI_Error /** * @access public @@ -60,6 +69,20 @@ class AI_Error extends PEAR_Error { } // -X2C + // +X2C Operation 530 + /** + * @param mixed $error Variable a evaluar si es un error. + * + * @return bool + * @access public + * @static + */ + function isError($error) // ~X2C + { + return is_a($error, 'ai_error'); + } + // -X2C + } // -X2C Class :AI_Error -?> \ No newline at end of file +?> diff --git a/lib/AI/Sistema.php b/lib/AI/Sistema.php index c7d40da..e149668 100644 --- a/lib/AI/Sistema.php +++ b/lib/AI/Sistema.php @@ -174,4 +174,4 @@ FIXME - preguntar a gonzalo si le sirve. } // -X2C Class :AI_Sistema -?> +?> \ No newline at end of file diff --git a/sistema/www/index.php b/sistema/www/index.php index 5021868..a497965 100644 --- a/sistema/www/index.php +++ b/sistema/www/index.php @@ -156,11 +156,14 @@ if ($tipo) { $form->llenarObjeto($obj); $err =& $obj->guardar($db, true); if (PEAR::isError($err)) { - if (DB::isError($err) and $err->getCode() == DB_ERROR_ALREADY_EXISTS) { - $error = new MECON_HTML_Error("Ya existe un $nombre con el identificador " + if (DB::isError($err) + and $err->getCode() == DB_ERROR_ALREADY_EXISTS) { + $error = new MECON_HTML_Error( + "Ya existe un $nombre con el identificador " . $obj->$tipo); } else { - $error = new MECON_HTML_Error('Error no esperado: ' . $err->getMessage()); + $error = new MECON_HTML_Error('Error no esperado: ' + . $err->getMessage()); } $marco->addBody($error); } else { @@ -174,8 +177,15 @@ if ($tipo) { if (!@$a_confirmar) { $form->llenarObjeto($obj); $err =& $obj->borrar($db); - if (PEAR::isError($err)) { - $error = new MECON_HTML_Error('Error no esperado: ' . $err->getMessage()); + if (AI_Error::isError($err) + and $err->getCode() == AI_ERROR_TIENE_HIJOS) { + $error = new MECON_HTML_Error('No se puede borrar el ' + . $nombre . 'porque todavía tiene "hijos".' + . ' Elimine todos los "hijos" y pruebe otra vez.'); + $marco->addBody($error); + } elseif (PEAR::isError($err)) { + $error = new MECON_HTML_Error('Error no esperado: ' + . $err->getMessage()); $marco->addBody($error); } else { header("Location: $tipo"); -- 2.43.0