From 61fdd4f7e9019fdd5c4e3b5d9c43ab5d3506a11c Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Tue, 8 Jul 2003 21:51:30 +0000 Subject: [PATCH 1/1] =?utf8?q?-=20Se=20usa=20el=20nuevo=20metodo=20addMenu?= =?utf8?q?Vertical()=20de=20Marco.=20-=20Se=20crea=20una=20nueva=20clase?= =?utf8?q?=20HTML=5FError=20(hay=20que=20moverla=20a=20MECONlib).=20-=20Se?= =?utf8?q?=20arregla=20el=20alta=20de=20sistemas.=20-=20Se=20hace=20m?= =?utf8?q?=C3=A1s=20amigable=20para=20el=20usuario=20el=20manejo=20de=20er?= =?utf8?q?rores.=20-=20Se=20implementa=20un=20primer=20intento=20de=20list?= =?utf8?q?a=20de=20=C3=ADconos=20en=20AI=5FForm.=20-=20Se=20actualiza=20el?= =?utf8?q?=20diagrama=20UML.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- doc/uml.xmi | 43 ++++++++------- lib/AI/DB.php | 2 +- lib/AI/Form.php | 18 ++++++- lib/AI/GrupoSecciones.php | 19 ++++--- lib/AI/Servicio.php | 19 ++++--- lib/AI/Sistema.php | 20 +++---- sistema/www/index.php | 108 +++++++++++++++++++++----------------- 7 files changed, 133 insertions(+), 96 deletions(-) diff --git a/doc/uml.xmi b/doc/uml.xmi index 01bdac0..264131f 100644 --- a/doc/uml.xmi +++ b/doc/uml.xmi @@ -20,6 +20,7 @@ + @@ -49,6 +50,7 @@ x2c:get" name="hijos" static="0" scope="202" /> + @@ -77,6 +79,7 @@ x2c:include: PEAR.php" name="PEAR_Error" static="0" scope="200" /> + @@ -107,7 +110,7 @@ x2c:get" name="hijos" static="0" scope="202" /> - + @@ -118,34 +121,34 @@ x2c:get" name="hijos" static="0" scope="202" /> - - - - - - - - - + + + + + + + + + - - + + - - + + - - + + @@ -167,6 +170,7 @@ x2c:get" name="hijos" static="0" scope="202" /> + @@ -174,7 +178,6 @@ x2c:get" name="hijos" static="0" scope="202" /> - @@ -183,6 +186,7 @@ x2c:get" name="hijos" static="0" scope="202" /> + @@ -197,10 +201,10 @@ x2c:get" name="hijos" static="0" scope="202" /> - + @@ -210,14 +214,13 @@ x2c:get" name="hijos" static="0" scope="202" /> - - + diff --git a/lib/AI/DB.php b/lib/AI/DB.php index cd66f1d..4c40826 100644 --- a/lib/AI/DB.php +++ b/lib/AI/DB.php @@ -71,4 +71,4 @@ class AI_DB extends DB { } // -X2C Class :AI_DB -?> +?> \ No newline at end of file diff --git a/lib/AI/Form.php b/lib/AI/Form.php index 5cc482e..38e9262 100644 --- a/lib/AI/Form.php +++ b/lib/AI/Form.php @@ -50,7 +50,7 @@ class AI_Form extends MECON_HTML_QuickForm { * Construye un formulario para el objecto especificado. * * @param object &$obj Objeto con el cual rellenar el formulario. Puede ser GrupoSecciones, Servicio o Sistema. - * @param int $accion Accion que realizar?el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIF. + * @param int $accion Accion que realizar?el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIFICACION. * * @return void * @access public @@ -137,7 +137,9 @@ class AI_Form extends MECON_HTML_QuickForm { if ($tipo == 'servicio' or $tipo == 'sistema') { $fLink =& $this->addElement('text', 'link', 'Enlace'); $fLinkAyuda =& $this->addElement('text', 'link_ayuda', 'Enlace de la ayuda'); - $fIcono =& $this->addElement('text', 'icono', 'Ícono'); + //$fIcono =& $this->addElement('text', 'icono', 'Ícono'); + $fIcono =& $this->addElement('select', 'icono', 'Ícono', + listaImagenes('/var/www/sistemas/ai/sistema/www/images', $tipo . '_', '\.gif')); // Carga datos. if ($accion & (AI_BAJA | AI_MODIF)) { $fLink->setValue($obj->link); @@ -215,4 +217,16 @@ class AI_Form extends MECON_HTML_QuickForm { } // -X2C Class :AI_Form +function listaImagenes($dir = '.', $prepend = '', $append = '') { + $lista = array('' => '--'); + $d = dir($dir); + while (($file = $d->read()) !== false) { + if (preg_match("/$prepend(.*)$append/", $file, $m)) { + $nombre = ucwords(join(' ', preg_split('/_/', $m[1]))); + $lista[$file] = $nombre; + } + } + return $lista; +} + ?> diff --git a/lib/AI/GrupoSecciones.php b/lib/AI/GrupoSecciones.php index 5914549..23fa14a 100644 --- a/lib/AI/GrupoSecciones.php +++ b/lib/AI/GrupoSecciones.php @@ -184,11 +184,12 @@ class AI_GrupoSecciones { // +X2C Operation 497 /** * @param DB $db DB donde guardar. + * @param bool $nuevo Si es true, se fuerza a guardar el Grupo de Secciones como nuevo. * * @return PEAR_Error * @access public */ - function guardar($db) // ~X2C + function guardar($db, $nuevo = false) // ~X2C { $grupo = intval($this->grupo); $where = ''; @@ -199,17 +200,19 @@ class AI_GrupoSecciones { 'antiguedad' => intval($this->antiguedad), 'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0, ); - if ($grupo) { + if ($grupo and !$nuevo) { $accion = DB_AUTOQUERY_UPDATE; $where = "grupo = $grupo"; } else { $accion = DB_AUTOQUERY_INSERT; - $grupo = $db->nextId('grupo_secciones'); - if (DB::isError($grupo)) { - return $grupo; + // Si no tiene ID, le asigno uno nuevo. + if (!$grupo) { + $grupo = $db->nextId('grupo_secciones'); + if (DB::isError($grupo)) { + return $grupo; + } + $this->grupo = $grupo; } - // Asigno el nuevo id de grupo. - $this->grupo = $grupo; $datos['grupo'] = $grupo; } $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where); @@ -304,4 +307,4 @@ class AI_GrupoSecciones { } // -X2C Class :AI_GrupoSecciones -?> \ No newline at end of file +?> diff --git a/lib/AI/Servicio.php b/lib/AI/Servicio.php index d4bcf0a..b03c5a2 100644 --- a/lib/AI/Servicio.php +++ b/lib/AI/Servicio.php @@ -188,11 +188,12 @@ class AI_Servicio { // +X2C Operation 458 /** * @param DB $db DB donde guardar. + * @param bool $nuevo Si es true, se fuerza a guardar el Servicio como nuevo. * * @return PEAR_Error * @access public */ - function guardar($db) // ~X2C + function guardar($db, $nuevo = false) // ~X2C { $servicio = intval($this->servicio); $where = ''; @@ -206,17 +207,19 @@ class AI_Servicio { 'necesita_logueo' => $this->necesita_logueo ? 1 : 0, 'habilitado' => $this->habilitado ? 1 : 0, ); - if ($servicio) { + if ($servicio and !$nuevo) { $accion = DB_AUTOQUERY_UPDATE; $where = "servicio = $servicio"; } else { - $accion = DB_AUTOQUERY_INSERT; - $servicio = $db->nextId('servicio'); - if (DB::isError($servicio)) { - return $servicio; + $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; } - // Asigno el nuevo id de servicio. - $this->servicio = $servicio; $datos['servicio'] = $servicio; } $res = $db->autoExecute('servicio', $datos, $accion, $where); diff --git a/lib/AI/Sistema.php b/lib/AI/Sistema.php index 7a54776..db06701 100644 --- a/lib/AI/Sistema.php +++ b/lib/AI/Sistema.php @@ -135,11 +135,12 @@ class AI_Sistema { // +X2C Operation 459 /** * @param DB $db DB donde guardar. + * @param bool $nuevo Si es true, se fuerza a guardar el servicio como nuevo. * * @return PEAR_Error * @access public */ - function guardar($db) // ~X2C + function guardar($db, $nuevo = false) // ~X2C { $sistema = intval($this->sistema); $where = ''; @@ -149,18 +150,19 @@ class AI_Sistema { 'link_ayuda' => $this->link_ayuda, 'habilitado' => $this->habilitado ? 1 : 0, ); - // FIXME - buscar otra forma de distinguir entre INSERT y UPDATE. - if ($sistema) { + if ($sistema and !$nuevo) { $accion = DB_AUTOQUERY_UPDATE; $where = "sistema = $sistema"; } else { - $accion = DB_AUTOQUERY_INSERT; - $sistema = $db->nextId('sistema'); - if (DB::isError($sistema)) { - return $sistema; + $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; } - // Asigno el nuevo id de sistema. - $this->sistema = $sistema; $datos['sistema'] = $sistema; } $res = $db->autoExecute('sistema', $datos, $accion, $where); diff --git a/sistema/www/index.php b/sistema/www/index.php index 5b5c97e..4e88fab 100644 --- a/sistema/www/index.php +++ b/sistema/www/index.php @@ -29,7 +29,20 @@ // Debug. {{{ require_once 'PEAR.php'; -PEAR::setErrorHandling(PEAR_ERROR_TRIGGER); +#PEAR::setErrorHandling(PEAR_ERROR_TRIGGER); +PEAR::setErrorHandling(PEAR_ERROR_RETURN); +// }}} + +// Clase de error HTML (para mostrar errores) TODO - ver si se pasa a meconlib {{{ +class HTML_Error { + var $msg = ''; + function HTML_Error($msg) { + $this->msg = $msg; + } + function toHtml() { + return '
' . $this->msg . '
'; + } +} // }}} // Creo el Marco. {{{ @@ -37,25 +50,7 @@ require_once 'MECON/Marco.php'; $marco = new Marco('../conf/Marco.php'); // }}} -// Agrego una barra al costado con el listado de objetos (XXX - va a ir en Marco). {{{ -require_once 'HTML/Table.php'; -$layout = new HTML_Table( - array( - 'width' => '100%', - 'align' => 'center', - 'valign' => 'top', - 'border' => 0, - 'cellspacing' => 0, - 'cellpadding' => 0, - ) -); -$layout->setAutoGrow(true); -$layout->setCellAttributes(0, 0, array('width' => '1')); -$layout->setCellAttributes(0, 1, array('width' => '10')); -$layout->setCellContents(0, 1, ' '); -// }}} - -// Averiguo si estoy administrando algún tipo de objeto. {{{ +// Averiguo si estoy administrando algún tipo de objeto. XXX - desafear {{{ $tipo = null; if (@$_SERVER['PATH_INFO']) { $tmp = ltrim($_SERVER['PATH_INFO'], '/'); @@ -64,23 +59,26 @@ if (@$_SERVER['PATH_INFO']) { $clase = "AI_GrupoSecciones"; $require = 'AI/GrupoSecciones.php'; $tabla = 'grupo_secciones'; + $nombre = "grupo de secciones"; } elseif ($tmp == 'servicio') { $tipo = $tmp; $clase = 'AI_Servicio'; $require = 'AI/Servicio.php'; $tabla = $tipo; + $nombre = $tipo; } elseif ($tmp == 'sistema') { $tipo = $tmp; $clase = 'AI_Sistema'; $require = 'AI/Sistema.php'; $tabla = $tipo; + $nombre = $tipo; } else { // No hay un objeto válido para administrar. header('Location: '.$_SERVER['SCRIPT_NAME']); } } // }}} -// Si tiene un tipo, estamos editando algo. {{{ +// Si tiene un tipo, estamos administrando algun objeto. {{{ if ($tipo) { // Creo formulario. {{{ @@ -94,7 +92,7 @@ if ($tipo) { $obj->$tipo = @$_REQUEST['id']; // }}} - // Verifico que la acción sea válida. {{{ + // Verifico que la acción sea válida y si no lo es hago que sea un alta. {{{ switch(@$_REQUEST['accion']) { case AI_BAJA: case AI_MODIF: @@ -105,7 +103,7 @@ if ($tipo) { } // }}} - // Verifico si ya se envio el formulario. {{{ + // Modifico la acción si ya se envió el formulario. {{{ $botones = $form->getSubmitValue('botones'); if ($boton = @join('', array_keys($botones))) { $boton = $boton . '_' . strtolower($botones[$boton]); @@ -152,57 +150,69 @@ if ($tipo) { } // }}} - // Freezo de ser necesario. {{{ + // Freezo el formulario si se está confirmando. {{{ if (@$a_confirmar) { $form->freeze(); } // }}} - // Me fijo si se cargo un formulalrio y si es válido hago el ABM. {{{ + // Si los datos del formulario son válidos, hago el ABM. {{{ if ($form->validate()) { - switch ($accion) { case AI_ALTA: // {{{ $form->llenarObjeto($obj); - $err =& $obj->guardar($db); + $err =& $obj->guardar($db, true); if (PEAR::isError($err)) { - die($err->getMessage()); + if (DB::isError($err) and $err->getCode() == DB_ERROR_ALREADY_EXISTS) { + $error = new HTML_Error("Ya existe un $nombre con el identificador " + . $obj->$tipo); + } else { + $error = new HTML_Error('Error no esperado: ' . $err->getMessage()); + } + $marco->addBody($error); + } else { + header(sprintf('Location: %s?accion=%d&id=%d', + $tipo, AI_MODIF, $obj->$tipo)); + exit; } - header(sprintf('Location: %s?accion=%d&id=%d', - $tipo, AI_MODIF, $obj->$tipo)); - exit; break; - // }}} + // }}} case AI_BAJA: // {{{ if (!@$a_confirmar) { $form->llenarObjeto($obj); $err =& $obj->borrar($db); if (PEAR::isError($err)) { - die($err->getMessage()); + $error = new HTML_Error('Error no esperado: ' . $err->getMessage()); + $marco->addBody($error); + } else { + header("Location: $tipo"); + exit; } - header("Location: $tipo"); - exit; } break; - // }}} + // }}} case AI_MODIF: // {{{ if (!@$cancelado) { $form->llenarObjeto($obj); $err =& $obj->guardar($db); if (PEAR::isError($err)) { - die($err->getMessage()); + $error = new HTML_Error('Error no esperado: ' . $err->getMessage()); + $marco->addBody($error); + } else { + header(sprintf('Location: %s?accion=%d&id=%d', + $tipo, AI_MODIF, $obj->$tipo)); + exit; } - header(sprintf('Location: %s?accion=%d&id=%d', - $tipo, AI_MODIF, $obj->$tipo)); - exit; } break; - // }}} + // }}} } } // }}} - // Creo el árbol con el tipo de objeto que manejo. {{{ + // Agrego el menu y el formulario a la página. {{{ + + // Creo el árbol con el tipo de objeto que manejo y lo agrego a la página. {{{ require_once 'MECON/HTML/Arbol/ArbolDB.php'; $dbdata = array( 'db' => &$db, @@ -216,16 +226,18 @@ if ($tipo) { $dbdata['id_padre'] = $tipo . '_padre'; } $arbol = new HTML_ArbolDB($dbdata, '/MECON/images/arbol_noticias.gif'); + $marco->addMenuVertical($arbol); // }}} - // Agrego al cuerpo de la página las cosas que voy a dibujar. {{{ - $layout->setCellContents(0, 0, $arbol); - $layout->setCellContents(0, 2, $form); - $marco->addBody($layout); + // Agrego el formulario a la página. {{{ + $marco->addBody($form); // }}} + + // }}} + // }}} -// No se está editando nada, agrego al cuerpo de la página la pantalla de entrada {{{ +// No se está editando nada, agrego la imágen de bienvenida a la página. {{{ } else { require_once 'HTML/Image.php'; $marco->setEspacios(false); @@ -233,7 +245,7 @@ if ($tipo) { } // }}} -// Dibujo. {{{ +// Muestro la página. {{{ $marco->display(); // }}} -- 2.43.0