From: Leandro Lucarella Date: Thu, 3 Jul 2003 23:10:02 +0000 (+0000) Subject: - Se crea una subclase de MECON_HTML_QuickForm que maneja todos los X-Git-Tag: svn_import~64 X-Git-Url: https://git.llucax.com/mecon/ai.git/commitdiff_plain/7836b684fe87f2693757f1e16652dc16444a9682 - Se crea una subclase de MECON_HTML_QuickForm que maneja todos los formularios necesarios para AI. - Se cambian las propiedades de los objetos del modelo para que sean igual que en la DB. - Casi se termina el formulario de servicios. --- diff --git a/doc/uml.xmi b/doc/uml.xmi index 2cd6aff..d93cc46 100644 --- a/doc/uml.xmi +++ b/doc/uml.xmi @@ -9,9 +9,9 @@ - + - + @@ -29,18 +29,18 @@ - + - - + + - + @@ -57,7 +57,7 @@ x2c:get" name="hijos" static="0" scope="202" /> - + @@ -87,18 +87,26 @@ x2c:include: PEAR.php" name="PEAR_Error" static="0" scope="200" /> - + - + + + + + + + + + @@ -108,8 +116,10 @@ x2c:get" name="hijos" static="0" scope="202" /> - - + + + + @@ -121,8 +131,14 @@ x2c:get" name="hijos" static="0" scope="202" /> - - + + + + + + + + @@ -132,9 +148,15 @@ x2c:get" name="hijos" static="0" scope="202" /> + + + + + + @@ -142,13 +164,13 @@ x2c:get" name="hijos" static="0" scope="202" /> + - + - @@ -162,12 +184,12 @@ x2c:get" name="hijos" static="0" scope="202" /> - - + + - + @@ -177,18 +199,16 @@ x2c:get" name="hijos" static="0" scope="202" /> - + - - - - + + diff --git a/sistema/local_lib/AIForm.php b/sistema/local_lib/AIForm.php new file mode 100644 index 0000000..b84837f --- /dev/null +++ b/sistema/local_lib/AIForm.php @@ -0,0 +1,162 @@ + | +// +--------------------------------------------------------------------+ +// +// $Id$ +// + +// +X2C includes +require_once 'MECON/HTML/QuickForm.php'; +// ~X2C + +// Tipo de elementos a manipular. +define('GRUPO', 1); +define('SERVICIO', 2); +define('SISTEMA', 4); + +// Acciones. +define('ALTA', 1); +define('BAJA', 2); +define('MODIFICACION', 4); + +// +X2C Class 507 :AIForm +/** + * Formularios para el Administrador de Intranet. + * + * @access public + */ +class AIForm extends MECON_HTML_QuickForm { + // ~X2C + + // +X2C Operation 509 + /** + * Construye un formulario para el objecto especificado. + * + * @param int $tipo Tipo de formulario a crear. Puede ser GRUPO, SERVICIO o SISTEMA. + * @param int $accion Accion que realizar?el formulario a crear. Puede ser ALTA, BAJA o MODIFICACION. + * @param object &$obj Objeto con el cual rellenar el formulario. Puede ser GrupoSecciones, Servicio o Sistema. + * + * @return void + * @access public + */ + function iniciar($tipo, $accion, &$obj) // ~X2C + { + switch ($tipo) { + case GRUPO: + $s_tipo = 'grupo'; + break; + case SERVICIO: + $s_tipo = 'servicio'; + break; + case SISTEMA: + $s_tipo = 'sistema'; + break; + } + $s_padre = $s_tipo.'_padre'; + switch ($accion) { + case BAJA: + $s_accion = 'Borrar'; + break; + case MODIFICACION: + $s_accion = 'Modificar'; + break; + default: + $accion = ALTA; + $s_accion = 'Agregar'; + } + // Construyo con el padre y seteos generales. + $this->setRendererOpts(array('width' => '400')); + $this->addElement('header','cabecera', "$s_accion Servicio"); + // Elementos. + if ($accion & (BAJA | MODIFICACION)) { + $fId =& $this->addElement('text', $s_tipo, 'Identificador'); + $fId->setValue($obj->servicio); + $fId->freeze(); + } + if ($tipo & (GRUPO | SERVICIO)) { + $fPadre =& $this->addElement('text', $s_padre, 'Servicio padre'); + $fNombre =& $this->addElement('text', 'nombre', 'Nombre'); + // Validación. + $this->addRule('nombre','Debe ingresar un nombre.', 'required'); + $this->addRule($s_padre, 'Debe ingresar un servicio padre.', 'required'); + $this->addRule($s_padre, 'El servicio padre debe ser un número natural.', + 'regex', '/^\d*$/'); + // Carga datos. + if ($accion & (BAJA | MODIFICACION)) { + $fPadre->setValue($obj->$s_padre); + $fNombre->setValue($obj->nombre); + } + } + if ($tipo & SERVICIO) { + $fDescripcion =& $this->addElement('text', 'descripcion', 'Descripción'); + $fLogueo =& $this->addElement('checkbox','logueo', 'Necesita login'); + // Validación + $this->addRule('descripcion', 'Debe ingresar una descripción.', 'required'); + // Carga datos. + if ($accion & (BAJA | MODIFICACION)) { + $fDescripcion->setValue($obj->descripcion); + $fLogueo->setValue($obj->necesita_logueo); + } + } + if ($tipo & (SERVICIO | SISTEMA)) { + $fLink =& $this->addElement('text', 'link', 'Enlace'); + $fLinkAyuda =& $this->addElement('text', 'link_ayuda', 'Enlace de la ayuda'); + $fIcono =& $this->addElement('text', 'icono', 'Ícono'); + // Carga datos. + if ($accion & (BAJA | MODIFICACION)) { + $fLink->setValue($obj->link); + $fLinkAyuda->setValue($obj->link_ayuda); + $fIcono->setValue($obj->icono); + } + } + $fHabilitado =& $this->addElement('checkbox','habilitado', 'Está habilitado', + '', array('checked' => 'checked')); + // Carga datos. + if ($accion & (BAJA | MODIFICACION)) { + $fHabilitado->setValue($obj->habilitado); + } + // Botones. + $fBtnAccion =& parent::createElement('submit', 'aceptar' , $s_accion); + if ($accion & MODIFICACION) { + $fBtnCancelar =& parent::createElement('submit', 'cancelar' , 'Borrar'); + $fBtnCancelar =& parent::createElement('submit', 'cancelar' , 'Borrar'); + } + if ($accion & ALTA) { + $fBtnCancelar =& parent::createElement('reset', 'cancelar', 'Limpiar'); + } + if ($accion & BAJA) { + $fBtnCancelar =& parent::createElement('submit', 'cancelar', 'Cancelar'); + } + $grupo = array( + &$fBtnAccion, + &$fBtnCancelar, + ); + $this->addGroup($grupo, 'botones'); + } + // -X2C + +} // -X2C Class :AIForm + +?> diff --git a/sistema/local_lib/GrupoSecciones.php b/sistema/local_lib/GrupoSecciones.php index 9f6bfe1..136ebfd 100644 --- a/sistema/local_lib/GrupoSecciones.php +++ b/sistema/local_lib/GrupoSecciones.php @@ -53,10 +53,10 @@ class GrupoSecciones { var $nombre = ''; /** - * @var int $padre + * @var int $grupo_padre * @access public */ - var $padre = 0; + var $grupo_padre = 0; /** * Grupos de secciones que tiene este grupo. @@ -85,10 +85,10 @@ class GrupoSecciones { /** * True si hay que mostrar los grupos hijos (?? FIXME). * - * @var bool $mostrarHijos + * @var bool $mostrar_hijos * @access public */ - var $mostrarHijos = false; + var $mostrar_hijos = false; /** * Indica si esta habilitado. @@ -158,9 +158,9 @@ class GrupoSecciones { extract($row); $this->grupo = $grupo; $this->nombre = $nombre; - $this->padre = $grupo_padre; + $this->grupo_padre = $grupo_padre; $this->antiguedad = $antiguedad; - $this->mostrarHijos = $mostrar_hijos; + $this->mostrar_hijos= $mostrar_hijos; // Obtengo secciones. $secciones = $db->getCol( "SELECT seccion @@ -191,7 +191,7 @@ class GrupoSecciones { $grupo = intval($this->grupo); $where = ''; $datos = array( - 'grupo_padre' => intval($this->padre), + 'grupo_padre' => intval($this->grupo_padre), 'nombre' => $this->nombre, 'habilitado' => $this->habilitado ? 1 : 0, 'antiguedad' => intval($this->antiguedad), diff --git a/sistema/local_lib/Servicio.php b/sistema/local_lib/Servicio.php index 229ab23..6792359 100644 --- a/sistema/local_lib/Servicio.php +++ b/sistema/local_lib/Servicio.php @@ -31,6 +31,8 @@ require_once 'AIError.php'; // +X2C Class 413 :Servicio /** + * Servicio. + * * @access public */ class Servicio { @@ -43,10 +45,10 @@ class Servicio { var $servicio = 0; /** - * @var int $padre + * @var int $servicio_padre * @access public */ - var $padre = 0; + var $servicio_padre = 0; /** * Servicios hijos. @@ -91,18 +93,18 @@ class Servicio { /** * Enlace a donde se encuentra la ayuda del servicio. * - * @var string $linkAyuda + * @var string $link_ayuda * @access public */ - var $linkAyuda = ''; + var $link_ayuda = ''; /** * True si es necesario que el usuario se loguee para usar el servicio. * - * @var bool $necesitaLogueo + * @var bool $necesita_logueo * @access public */ - var $necesitaLogueo = false; + var $necesita_logueo = false; /** * Indica si esta habilitado. @@ -170,13 +172,13 @@ class Servicio { // Asigno valores al objeto. extract($row); $this->servicio = $servicio; - $this->padre = $servicio_padre; + $this->servicio_padre = $servicio_padre; $this->nombre = $nombre; $this->descripcion = $descripcion; $this->icono = $icono; # FIXME - new HTML_Icono (o no?) $this->link = $link; - $this->linkAyuda = $link_ayuda; - $this->necesitaLogueo = $necesita_logueo; + $this->link_ayuda = $link_ayuda; + $this->necesita_logueo = $necesita_logueo; $this->habilitado = $habilitado; return true; } @@ -194,13 +196,13 @@ class Servicio { $servicio = intval($this->servicio); $where = ''; $datos = array( - 'servicio_padre' => intval($this->padre), + 'servicio_padre' => intval($this->servicio_padre), 'nombre' => $this->nombre, 'descripcion' => $this->descripcion, 'icono' => $this->icono, 'link' => $this->link, - 'link_ayuda' => $this->linkAyuda, - 'necesita_logueo' => $this->necesitaLogueo ? 1 : 0, + 'link_ayuda' => $this->link_ayuda, + 'necesita_logueo' => $this->necesita_logueo ? 1 : 0, 'habilitado' => $this->habilitado ? 1 : 0, ); if ($servicio) { diff --git a/sistema/local_lib/Sistema.php b/sistema/local_lib/Sistema.php index 5a6f62e..2d2f63a 100644 --- a/sistema/local_lib/Sistema.php +++ b/sistema/local_lib/Sistema.php @@ -31,6 +31,8 @@ require_once 'AIError.php'; // +X2C Class 416 :Sistema /** + * Sistema. + * * @access public */ class Sistema { @@ -61,10 +63,10 @@ class Sistema { /** * Enlace a la ayuda del sistema. * - * @var string $linkAyuda + * @var string $link_ayuda * @access public */ - var $linkAyuda = ''; + var $link_ayuda = ''; /** * Indica si esta habilitado. @@ -123,7 +125,7 @@ class Sistema { $this->sistema = $sistema; $this->icono = $icono; # FIXME - new HTML_Icono (o no?) $this->link = $link; - $this->linkAyuda = $link_ayuda; + $this->link_ayuda = $link_ayuda; $this->habilitado = $habilitado; return true; } @@ -143,7 +145,7 @@ class Sistema { $datos = array( 'icono' => $this->icono, 'link' => $this->link, - 'link_ayuda' => $this->linkAyuda, + 'link_ayuda' => $this->link_ayuda, 'habilitado' => $this->habilitado ? 1 : 0, ); if ($sistema) { diff --git a/sistema/local_lib/prepend.php b/sistema/local_lib/prepend.php index 5afcf70..2f859d5 100644 --- a/sistema/local_lib/prepend.php +++ b/sistema/local_lib/prepend.php @@ -27,6 +27,10 @@ // $Id$ // +// Debug. +require_once 'PEAR.php'; +PEAR::setErrorHandling(PEAR_ERROR_TRIGGER); + // Directorio raíz real del sistema. $ROOTDIR = '/var/www/sistemas/ai'; @@ -37,7 +41,6 @@ prepend_include_path("$ROOTDIR/local_lib"); // Uso siempre a Marco. require_once 'MECON/Marco.php'; $MARCO = new Marco("$ROOTDIR/conf/Marco.php"); -#$MARCO->setEspacios(false); // Siempre le agrego una barra al costado. require_once 'HTML/Table.php'; @@ -58,6 +61,6 @@ $LAYOUT->setCellContents(0, 1, ' '); // Siempre uso mi base de datos. require_once 'AIDB.php'; -$db =& AIDB::connect(); +$DB =& AIDB::connect(); ?> diff --git a/sistema/www/servicios.php b/sistema/www/servicios.php index 7ff6a8e..d4087eb 100644 --- a/sistema/www/servicios.php +++ b/sistema/www/servicios.php @@ -28,73 +28,126 @@ // require_once 'MECON/HTML/Arbol/ArbolDB.php'; -require_once 'MECON/HTML/QuickForm.php'; +require_once 'AIForm.php'; require_once 'Servicio.php'; // Dibujo el menu de arbol. $dbdata = array( - 'db' => &$db, + 'db' => &$DB, 'tabla' => 'servicio', 'id' => 'servicio', 'nombre' => 'nombre', 'id_padre' => 'servicio_padre', - 'prepend_link' => 'servicios?id=' + 'prepend_link' => 'servicios?accion='.MODIFICACION.'&id=' ); $arbol = new HTML_ArbolDB($dbdata, '/MECON/images/arbol_noticias.gif'); -// Creo el formulario. -$form =& new MECON_HTML_QuickForm(); -$form->setRendererOpts(array('width' => '400')); -$form->addElement('header','cabecera', 'Agregar Servicio'); -$fServicio =& $form->addElement('static' ,'servicio' , 'Identificador' ); -$fPadre =& $form->addElement('text' ,'padre' , 'Servicio padre' ); -$fNombre =& $form->addElement('text' ,'nombre' , 'Nombre' ); -$fDescripcion =& $form->addElement('text' ,'descripcion' , 'Descripción' ); -$fLink =& $form->addElement('text' ,'link' , 'Enlace' ); -$fLinkAyuda =& $form->addElement('text' ,'linkayuda' , 'Enlace de la ayuda' ); -$fIcono =& $form->addElement('text' ,'icono' , 'Ícono' ); -$fLogueo =& $form->addElement('checkbox' ,'logueo' , 'Necesita login' ); -$fHabilitado =& $form->addElement('checkbox' ,'habilitado' , 'Está habilitado', '', array('checked' => 'checked')); -$fBtnAceptar =& HTML_QuickForm::createElement('submit' , 'aceptar' , 'Aceptar' ); -$fBtnDeshacer =& HTML_QuickForm::createElement('reset' , 'deshacer', 'Deshacer'); -$fBtnCancelar =& HTML_QuickForm::createElement('submit' , 'cancelar', 'Cancelar'); -$grupo = array( - &$fBtnAceptar, - &$fBtnDeshacer, - &$fBtnCancelar, -); -$form->addGroup($grupo, 'botones'); -// Agrego reglas de validación. -$form->addRule('padre' , 'Debe ingresar un servicio padre.' , 'required'); -$form->addRule('nombre' , 'Debe ingresar un nombre.' , 'required'); -$form->addRule('descripcion', 'Debe ingresar una descripción.' , 'required'); -#$form->addRule('link' , 'Debe ingresar un enlace.' , 'required'); -$form->addRule('padre' , 'El servicio padre debe ser un número natural.' , 'regex' , '/^\d*$/'); - -// Creo un servicio. +// Creo un servicio y seteo su id. $servicio = new Servicio; +$servicio->servicio = @$_REQUEST['id']; + +// Verifico que la accion sea válida. +switch(@$_REQUEST['accion']) { + case BAJA: + case MODIFICACION: + $accion = $_REQUEST['accion']; + break; + default: + $accion = ALTA; +} + +// Creo formulario. +$form =& new AIForm; + +// Verifico si ya se envio el formulario. +$freeze = false; +switch (@strtolower(join('', ($form->getSubmitValue('botones'))))) { + case 'agregar': + $accion = ALTA; + break; + case 'borrar': + $accion = BAJA; + $servicio->servicio = $form->getSubmitValue('servicio'); + // Es la primera "llamada" a borrar asi que indico que hay que + // freezarlo primero para confirmar. + $freeze = true; + break; + case 'modificar': + case 'cancelar': + $accion = MODIFICACION; + $servicio->servicio = $form->getSubmitValue('servicio'); + break; +} -// Si viene un servicio por REQUEST, lo cargo. -if (@$_REQUEST['id']) { - $servicio->servicio = $_REQUEST['id']; - $err =& $servicio->cargar($db); +// Cargo datos de ser necesario. +if ($accion & (BAJA | MODIFICACION)) { + $err =& $servicio->cargar($DB); if (PEAR::isError($err)) { die($err->getMessage()); } - $fServicio->setValue($servicio->servicio); - $fPadre->setValue($servicio->padre); - $fNombre->setValue($servicio->nombre); - $fDescripcion->setValue($servicio->descripcion); - $fLink->setValue($servicio->link); - $fLinkAyuda->setValue($servicio->linkAyuda); - $fIcono->setValue($servicio->icono); - $fLogueo->setValue($servicio->necesitaLogueo); - $fHabilitado->setValue($servicio->habilitado); + $form->iniciar(SERVICIO, $accion, $servicio); +} else { + $accion = ALTA; + $form->iniciar(SERVICIO, ALTA, $servicio); +} + +// Freezo de ser necesario. +if ($freeze) { + $form->freeze(); +} + +// Me fijo si se cargo un formulalrio y si es válido. +if ($form->validate()) { +/* $botones =& $form->getElement('botones'); + $botones =& $botones->getElements(); + $btnAceptar =& $botones[0]; + $btnCancelar =& $botones[1]; + $body = $btnAceptar->getValue() . '
' . $btnCancelar->getValue() . '
'; + switch (strtolower($btnAceptar->getValue())) { + case 'agregar': + $body .= 'Tengo que agregar!!!'; + break; + case 'modificar': + if (strtolower($btnCancelar->getValue()) == 'borrar') { + $body .= 'Tengo que poner confirmación para borrar!!!'; + } else { + $body .= 'Tengo que modificar!!!'; + } + break; + case 'borrar': + if (strtolower($btnCancelar->getValue()) == 'cancelar') { + $body .= 'Tengo que poner para modificar de nuevo!!!'; + } else { + $body .= 'Tengo que borrar!!!'; + } + break; + }*/ + switch ($accion) { + case ALTA: + $form->freeze(); + $body = 'Tengo que agregar!!!' . $form->toHtml(); + break; + case BAJA: + if ($form->isFrozen()) { + $form->freeze(); + $body = 'Tengo que borrar!!!' . $form->toHtml(); + } else { + $form->freeze(); + $body =& $form; + } + break; + case MODIFICACION: + $form->freeze(); + $body = 'Tengo que modificar!!!' . $form->toHtml(); + break; + } +} else { + $body =& $form; } // Dibujo. $LAYOUT->setCellContents(0, 0, $arbol); -$LAYOUT->setCellContents(0, 2, $form->toHtml()); +$LAYOUT->setCellContents(0, 2, $body); $MARCO->addBody($LAYOUT); $MARCO->display();