// +----------------------------------------------------------------------+ // // $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); //}}} } //}}} } ?>