From 38d0d26cbb40a662e0676e14d848ab76a976aeeb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mart=C3=ADn=20Marrese?= Date: Tue, 26 Aug 2003 19:41:18 +0000 Subject: [PATCH] Se agrego la funcionalidad para embeber el abm de perfiles en cualquier sistema externo. --- lib/SAMURAI/HTML/Perfil.php | 413 ++++++++++++++++++++++++++++++++++++ lib/SAMURAI/constantes.php | 47 ++++ 2 files changed, 460 insertions(+) create mode 100644 lib/SAMURAI/HTML/Perfil.php create mode 100644 lib/SAMURAI/constantes.php diff --git a/lib/SAMURAI/HTML/Perfil.php b/lib/SAMURAI/HTML/Perfil.php new file mode 100644 index 0000000..931d707 --- /dev/null +++ b/lib/SAMURAI/HTML/Perfil.php @@ -0,0 +1,413 @@ + +// +----------------------------------------------------------------------+ +// +// $Id$ +// + +//require_once 'MECON/general.php'; +//prepend_include_path('/home/mmarrese/public_html/meconlib/lib/'); + +//REQUIRE ONCE GENERALES {{{ +require_once 'SAMURAI/DB.php'; +require_once 'SAMURAI/Perm.php'; +require_once 'SAMURAI/constantes.php'; +require_once 'SAMURAI/Perfil.php'; +require_once 'SAMURAI/Sistema.php'; +require_once 'SAMURAI/Permiso.php'; +require_once 'MECON/HTML/Tabla.php'; +require_once 'MECON/HTML/QuickForm.php'; +require_once 'MECON/HTML/Error.php'; +require_once 'MECON/HTML/Image.php'; +require_once 'PEAR.php'; +// }}} + +// Funciones para agregar la seccion SAMURAI_Perfil en los sistemas. +// Con esto se pueden embeber el abm de perfiles como una seccion/subseccion mas +// de un sistema cualquiera. +// Es necesario para que funcione que se haya realizado un session_start() +// antes, por ejemplo en el prepend. + + /** + * Funcion que se encarga agregar los componentes necesarios al sistema para que + * se pueda realizar un abm de perfiles. + * Sin los parametros no funciona + * + * @param MECON_Marco &$MARCO Referencia al objeto MECON_Marco que se este utilizando en la pagina + * @param int $id_sistema Identificador del sistema en el cual se esta trabajando + * + * @return void + */ +//SAMURAI_Perfil_Html {{{ +function SAMURAI_Perfil_Html(&$MARCO, $id_sistema) { + + //INICIALIZO OBJETOS GENERALES {{{ + //REALIZO CONEXION + $tmp = new SAMURAI_DB(); + $DB =& $tmp->connect(); + //CREAR EL OBJETO SAMURAI_Perm + $SAMURAI_PERM = new SAMURAI_Perm ($_SESSION['usuario'], $id_sistema, $DB); + //}}} + + //POSIBLES ACCIONES + // listado -> Listado de los perfiles ya creados en el sistema. + // nuevo -> Pantalla de seleccion o de ingreso de un nuevo nombre. + // abm -> Formulario para la carga de la info del perfil. + + //LISTADO {{{ + if ((!@$_GET['samurai_perfiles'] && !@$_POST['samurai_accion'])|| @$_GET['samurai_perfiles'] == 'listado') { + //VEO SI PUEDE ACCEDER{{{ + $SAMURAI_PERM->chequear(SAMURAI_ALTA_PERFIL,SAMURAI_BAJA_PERFIL,SAMURAI_MODI_PERFIL); + //}}} + //LINKS {{{ + $aHref = ''; + $aHrefModif = $aHref.'Modificar Perfil'; + $aHrefElim = $aHref.'Eliminar Perfil'; + // }}} + //CREO LOS OBJETOS NECESARIOS {{{ + $TABLA2 =& new MECON_HTML_Tabla ('cellspacing=0'); + $TABLA =& new MECON_HTML_Tabla ('cellpadding=2'); + $TABLA3 =& new MECON_HTML_Tabla ('cellspacing=0'); + $SISTEMA =& new SAMURAI_Sistema($DB, $id_sistema); + // }}} + //OBTENGO LA INFORMACION DE LA BASE {{{ + $perfiles = SAMURAI_Perfil::getPerfiles($DB, null, $id_sistema); + // }}} + //AGREGO LOS DATOS A LAS TABLAS {{{ + $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif'); + $row = array ($imagen->toHtml().' SISTEMA: '.$SISTEMA->getNombre().''); + $TABLA3->addRow($row,'align=left'); + + //Agrego el link a nuevo + if ($SAMURAI_PERM->tiene(SAMURAI_ALTA_PERFIL)) { + $row = array ('Ingresar Nuevo Perfil'); + $TABLA2->addRow($row,'align=right'); + } + + //Genero la cabecera de la tabla + $row = array ('Id','Descripcion'); + if ($SAMURAI_PERM->tiene(SAMURAI_TIPO_PERFIL)) { + $row[] = 'Tipo'; + } + if ($SAMURAI_PERM->tiene(SAMURAI_MODI_PERFIL)) { + $row[] = 'Modif.'; + } + if ($SAMURAI_PERM->tiene(SAMURAI_BAJA_PERFIL)) { + $row[] = 'Elim.'; + } + + $TABLA->addRow($row,'cabecera'); + foreach ($perfiles as $perfil) { + $Modif = ereg_replace('##NUEVO##' , $perfil->getId(), $aHrefModif); + $Elim = ereg_replace('##NUEVO##' , $perfil->getId(), $aHrefElim ); + $Modif = ereg_replace('##ACCION##', 'm' , $Modif ); + $Elim = ereg_replace('##ACCION##', 'e' , $Elim ); + $row = array ($perfil->getId(), $perfil->getDescripcion()); + + if ($SAMURAI_PERM->tiene(SAMURAI_TIPO_PERFIL)) { + $row[] = $perfil->getTipo(); + } + if ($SAMURAI_PERM->tiene(SAMURAI_MODI_PERFIL)) { + $row[] = $Modif; + } + if ($SAMURAI_PERM->tiene(SAMURAI_BAJA_PERFIL)) { + $row[] = $Elim; + } + $TABLA->addRow($row); + } + // }}} + //AGREGO LA INFO AL MARCO {{{ + $MARCO->addBody($TABLA3); + $MARCO->addBody($TABLA2->toHtml(1)); + $MARCO->addBody($TABLA); + //}}} + } + //}}} + //NUEVO {{{ + elseif (@$_GET['samurai_perfiles'] == 'nuevo' || @$_POST['samurai_accion'] == 'nuevo') { + //VEO SI PUEDE ACCEDER{{{ + $SAMURAI_PERM->chequear(SAMURAI_ALTA_PERFIL); + //}}} + //CREO LOS OBJETO NECESARIOS {{{ + $FORM =& new MECON_HTML_QuickForm ('samurai_perfiles','post',$_SERVER['PHP_SELF']); + $SISTEMA =& new SAMURAI_Sistema ($DB, $id_sistema); + // }}} + //AGREGO LOS ELEMENTOS DEL FORM {{{ + $FORM->addElement ('hidden', 'samurai_accion', 'nuevo'); + $FORM->addElement ('header', 'cabecera' , 'Nuevo Perfil'); + $FORM->addElement ('select', 'perfiles' , 'Perfiles', '', array('size' => '1')); + $FORM->addElement ('text' , 'filtro' , 'Filtrar' , array('size' => '50')); + $FORM->addElement ('text' , 'descripcion', 'Nombre' , array('size' => '50')); + $group[] = HTML_QuickForm::createElement('submit', 'continuar', 'Continuar'); + $group[] = HTML_QuickForm::createElement('submit', 'filtrar' , 'Filtrar' ); + $group[] = HTML_QuickForm::createElement('submit', 'cancelar' , 'Cancelar', array ('onClick' => 'javascript:window.location =\''.$_SERVER['PHP_SELF'].'\';return false;') ); + $FORM->addGroup($group,'botones'); + // }}} + //RESTRINJO EL FORMATO DEL NOMBRE DEL PERFIL{{{ + $FORM->addRule ('descripcion', 'El nombre del perfil solo puede contener letras y/o numeros.', 'regex','/^[a-zA-Z0-9 ]+$/'); + // }}} + // CARGO LA INFORMACION EN EL SELECT DE PERFILES {{{ + $botones = $FORM->getSubmitValue('botones'); + $perfiles =& $FORM->getElement('perfiles'); + $descripcion =& $FORM->getElement('descripcion'); + if (@$botones['cancelar']) { + header('Location: '.$_SERVER['PHP_SELF']); + } + if (!isset($botones['filtrar'])) { + $PERFILES = SAMURAI_Perfil::getArrayPerfiles($DB); + } + elseif (@$botones['filtrar']) { + $filtro =& $FORM->getElement('filtro'); + $PERFILES = SAMURAI_Perfil::getArrayPerfiles($DB, $filtro->getValue()); + } + $perfiles->addOption('--', '--'); + $perfiles->loadArray($PERFILES); + // }}} + // VALIDO EL FORMULARIO {{{ + if ($FORM->validate()) { + if (@$botones['continuar']) { //Ya selecciono un nombre para el perfil + $res = ''; + $tmp = $perfiles->getSelected(); + if ((!@$descripcion->getvalue() && $tmp['0'] == '--') || ($descripcion->getvalue() && $tmp['0'] != '--')) { + $res = new PEAR_Error("Debe seleccionar un perfil del combo o ingresar un nombre en la casilla correspondiente.
+ Solo una de las dos opciones."); + @$descripcion->setValue(''); + } + elseif ($tmp['0'] != '--') { + //verificar que el sistema no tenga una asociacion con ese perfil + if (SAMURAI_Perfil::existeAsociacion($DB, $tmp['0'], $id_sistema)) { + $res = new PEAR_Error("El sistema ya tiene asociado el perfil seleccionado, + modifique sus permisos desde la seccion perfiles."); + } + else { + header('Location: '.$_SERVER['PHP_SELF'].'?samurai_perfiles=abm&id_perfil='.$tmp['0']); + } + } + elseif ($descripcion->getValue()) { + //Verificar que no exista un perfil con la misma descripcion + //Reduzco los blancos + $temp = $descripcion->getValue(); + $tt = split (' ', $temp); + $rta = ''; + foreach ($tt as $t) { + if ($t != '') { + $rta.= $t.' '; + } + } + $rta = rtrim($rta); + // + if (SAMURAI_Perfil::existePerfil($DB, $rta)) { + $res = new PEAR_Error("Ya existe un perfil con ese nombre, seleccionelo del combo.
+ Recuerde que varios espacios se reduciran a uno solo + (Ej: Agregar     Usuario -> Agregar Usuario)"); + } + else { + $temp = ereg_replace(' ' , '%20', $rta); //Cambio los espacios por %20 para que no chille el netscape + header('Location: '.$_SERVER['PHP_SELF'].'?samurai_perfiles=abm&desc_perfil='.$temp); + } + } + if (PEAR::isError($res)) { + $TABLA = new MECON_HTML_Tabla ('cellspacing=0'); + $row = array (''.$res->getMessage().''); + $TABLA->addRow($row,'align=left'); + } + } + } + // }}} + //AGREGO LA INFO AL MARCO {{{ + //AGREGO LOS DATOS A LAS TABLAS {{{ + $TABLA3 = new MECON_HTML_Tabla ('cellspacing=0'); + $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif'); + $row = array ($imagen->toHtml().' SISTEMA: '.$SISTEMA->getNombre().''); + $TABLA3->addRow($row,'align=left'); + //}}} + $MARCO->addBody($TABLA3); + if (isset($TABLA)) { + $MARCO->addBody($TABLA); + } + $MARCO->addBody($FORM); + //}}} + } + //}}} + //ABM {{{ + elseif (@$_GET['samurai_perfiles'] == 'abm' || @$_POST['samurai_accion'] == 'abm') { + //VEO SI PUEDE ACCEDER{{{ + $SAMURAI_PERM->chequear(SAMURAI_ALTA_PERFIL,SAMURAI_BAJA_PERFIL,SAMURAI_MODI_PERFIL); + //}}} + //CREO LOS OBJETO NECESARIOS {{{ + if (@$_GET['id_perfil']) { + $id_perfil = $_GET['id_perfil']; + } + elseif (@$_POST['id_perfil']) { + $id_perfil = $_POST['id_perfil']; + } + else { + $id_perfil = null; + } + $FORM =& new MECON_HTML_QuickForm ('samurai_perfiles','post',$_SERVER['PHP_SELF']); + $SISTEMA =& new SAMURAI_Sistema ($DB, $id_sistema); + $PERFIL =& new SAMURAI_Perfil ($DB, $id_perfil); + + if ($PERFIL->getResponsable()) { + $responsable = $PERFIL->getResponsable(); + } + else { + $responsable = $_SESSION['usuario']; + } + + if (!@$_GET['id_perfil']) { + if (@$_GET['desc_perfil']) { + $PERFIL->setDescripcion(@$_GET['desc_perfil']); + } + else { + $PERFIL->setDescripcion(@$_POST['desc_ant']); + } + } + $descripcion = $PERFIL->getDescripcion(); + // }}} + //OBTENGO LOS PERMISOS DEL SISTEMA {{{ + $ASOCIACIONES = $SISTEMA->getAsociaciones(); + $PERMISOS = array (); + foreach ($ASOCIACIONES as $as) { + $clave = $as['id'].'##'.$as['obs']; + $texto = ($as['obs'] != '') ? $as['desc'].' - '.$as['obs']: $as['desc']; + $PERMISOS[$clave] = $texto; + } + // }}} + //AGREGO LOS ELEMENTOS DEL FORM {{{ + if (@$PERMISOS) { + $FORM->addElement ('hidden', 'samurai_accion', 'abm'); + $FORM->addElement ('header', 'cabecera', 'ABM Perfiles'); + $FORM->addElement ('hidden', 'id_perfil', $id_perfil); + $FORM->addElement ('hidden', 'desc_ant' , $descripcion); + $FORM->addElement ('static', 'desc_perfil', 'Descripcion', $descripcion); + $FORM->addElement ('select', 'permisos' , 'Permisos' , $PERMISOS, array('size' => '5', 'multiple' => 'true')); + if ($SAMURAI_PERM->tiene(SAMURAI_TIPO_PERFIL)) { + $FORM->addElement ('select', 'tipo_perfil', 'Tipo Perfil', array('E' => 'Externo', 'I' => 'Interno', 'D' => 'Dios'), array ('size' => '1')); + } + $FORM->addElement ('hidden', 'responsable', $responsable); + $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar'); + $group[] = HTML_QuickForm::createElement('submit', 'cancelar', 'Cancelar', array ('onClick' => 'javascript:window.location=\''.$_SERVER['PHP_SELF'].'\';return false;')); + $FORM->addGroup($group,'botones'); + } + else { + $ERROR = new MECON_HTML_Error('El sistema no posee permisos asociados.'); + } + // }}} + //AGREGO LAS REGLAS DE VALIDACION {{{ + $FORM->addRule ('permisos', 'Se debe seleccionar al menos un permiso', 'required'); + // }}} + //CARGO LOS DATOS SI YA EXISTEN EN BASE {{{ + if (isset($_GET['accion']) && $_GET['accion'] != '') { + //MODIFICACION + $id_perfil =& $FORM->getElement ('id_perfil' ); + $desc_perfil =& $FORM->getElement ('desc_perfil'); + $permisos =& $FORM->getElement ('permisos' ); + + if ($SAMURAI_PERM->tiene(SAMURAI_TIPO_PERFIL)) { + $tipo_perfil =& $FORM->getElement ('tipo_perfil'); + } + $responsable =& $FORM->getElement ('responsable'); + $group =& $FORM->getElement ('botones' ); + $group =& $group->getElements('aceptar' ); + $aceptar =& $group[0]; + + $permisos->setSelected($PERFIL->getPermisos()); + + if ($SAMURAI_PERM->tiene(SAMURAI_TIPO_PERFIL)) { + $tipo_perfil->setSelected($PERFIL->getTipo()); + } + + if ($PERFIL->getResponsable() != '') { + $responsable->setValue($PERFIL->getResponsable()); + } + + //Modifico el valor del boton + $aceptar->setValue('Modificar'); + + //ELIMINACION -> modifico el valor del boton + if ($_GET['accion'] == 'e') { + $aceptar->setValue('Eliminar'); + $aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;')); + $FORM->freeze(); + } + } + // }}} + //VALIDO EL FORMULARIO {{{ + if ($FORM->validate()) { + // VEO SI SE CANCELO {{{ + $botones = $FORM->getSubmitValue('botones'); + if (@$botones['cancelar']) { + header('Location: '.$_SERVER['PHP_SELF']); + } + // }}} + else { + $id_perfil =& $FORM->getElement ('id_perfil' ); + $desc_perfil =& $FORM->getElement ('desc_perfil'); + $permisos =& $FORM->getElement ('permisos' ); + + if ($SAMURAI_PERM->tiene(SAMURAI_TIPO_PERFIL)) { + $tipo_perfil =& $FORM->getElement ('tipo_perfil'); + $tipo_perfil_tmp = $tipo_perfil->getSelected(); + } + $responsable =& $FORM->getElement ('responsable'); + $group =& $FORM->getElement ('botones' ); + $group =& $group->getElements('aceptar' ); + $aceptar =& $group[0]; + + $PERFIL->setDescripcion($desc_perfil->_text ); + $PERFIL->setResponsable($responsable->getValue()); + $PERFIL->setPermisos ($permisos->getSelected()); //Le asigno al perfil los permisos seleccionados + + if ($SAMURAI_PERM->tiene(SAMURAI_TIPO_PERFIL)) { + $PERFIL->setTipo ($tipo_perfil_tmp['0'] ); + } + + //Grabo y verifico si se produjo algun error + $res = $PERFIL->guardarDatos($aceptar->getValue()); + + if (PEAR::isError($res)) { + $ERROR = new MECON_HTML_Error($res->getMessage()); + if ($aceptar->getValue() == 'Eliminar') { + $FORM->freeze(); + } + } + else { + $FORM->freeze(); + header('Location: '.$_SERVER['PHP_SELF']); + } + } + } + // }}} + //DIBUJO LA PAGINA {{{ + $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif'); + $row = array ($imagen->toHtml().' SISTEMA: '.$SISTEMA->getNombre().''); + $TABLA3 = new MECON_HTML_Tabla ('cellspacing=0'); + $TABLA3->addRow($row,'align=left'); + + $MARCO->addTitle('ABM Perfil'); + $MARCO->addBody($TABLA3); + if (isset($ERROR)) { + $MARCO->addBody($ERROR); + } + $MARCO->addBody($FORM); + //}}} + } + //}}} +} +?> diff --git a/lib/SAMURAI/constantes.php b/lib/SAMURAI/constantes.php new file mode 100644 index 0000000..2ca6312 --- /dev/null +++ b/lib/SAMURAI/constantes.php @@ -0,0 +1,47 @@ + +// +----------------------------------------------------------------------+ +// +// $Id$ +// + +/** + * Defino la constante identificador del sistema + */ +define ('SAMURAI_ID', 44); + +/** + * Defino las constantes de perfiles + */ +define ('SAMURAI_ALTA_PERFIL', 58); +define ('SAMURAI_BAJA_PERFIL', 59); +define ('SAMURAI_MODI_PERFIL', 60); +define ('SAMURAI_TIPO_PERFIL', 65); + +/** + * Defino las constantes de usuarios + */ +define ('SAMURAI_ALTA_USUARIO', 61); +define ('SAMURAI_BAJA_USUARIO', 62); +define ('SAMURAI_MODI_USUARIO', 63); + +/** +* Defino las constantes de consultas, sistemas y permisos +*/ +define ('SAMURAI_DEVELOPER', 66); +?> -- 2.43.0