// +----------------------------------------------------------------------+
//
// $Id$
//
//
//
/** \page page_samurai_html_usuario Usuario Embebido
\section page_samurai_html_usuario_descripcion Descripcion
Samurai provee de una funcion que permite embeber la funcionalidad de
usuarios dentro de aquellos sistemas que asi lo requieran.
Es completamente independiente del sistema en el cual trabaja y puede ser
agregado de cualquier manera (Seccion, Subseccion o Contenido) al sistema.
\note Es necesario para embeber los usuarios que se haya realizado un
session_start().
\section page_samurai_html_usuario_funcionamiento Funcionamiento
Es una copia de la seccion Usuarios dentro de SAMURAI. Se relizan las mismas
verificaciones, tiene las mismas condiciones y se utilizan los mismos
permisos que en este.
\subsection page_samurai_html_usuario_funcionamiento_validaciones Validaciones y Condiciones
- Cualquier usuario que se quiera agregar debe haberse logueado al
menos una vez a la intranet.
- No puede cargarse dos veces el mismo usuario en un sistema.
- Cada vez que se carga un usuario es necesario asignarle al menos
un perfil, sino no va a permitir que se ingrese el mismo.
\section page_samurai_html_usuario_ejemplo Ejemplo
SAMURAI_HTML_Usuario agrega el contenido directamente en el marco que se
este utilizando.
Para embeber los usuarios hay que hacerlo de la siguiente manera
\code
include 'SAMURAI/HTML/Usuario.php';
SAMURAI_HTML_Usuario($MARCO, $ID_SISTEMA);
\endcode
\note $MARCO es el objeto MECON_Marco o el objeto HTML_DietMarco de
intranet.
$ID_SISTEMA es el identificador numerico en el cual se esta realizando la
accion de embeber.
\section page_samurai_html_usuario_permisos Pasos Finales
Para que los usuarios puedan acceder a los usuarios embebidos es necesario
que en el sistema en el cual se este embebiendo se agregen los permisos que
utiliza la seccion Usuarios (enumerados mas abajo), y que estos mediante
perfiles se asignen a usuarios.
Esto implica que por lo menos un usuario tendra que ser cargado desde
SAMURAI para que este tenga acceso a la zona embebida.
Permisos
- usuario alta
- usuario baja
- usuario modificacion
*/
//REQUIRE ONCE {{{
require_once 'MECON/HTML/QuickForm.php';
require_once 'MECON/HTML/Error.php';
require_once 'MECON/HTML/Tabla.php';
require_once 'MECON/HTML/Image.php';
require_once 'SAMURAI/Perm.php';
require_once 'SAMURAI/Perfil.php';
require_once 'SAMURAI/Usuario.php';
require_once 'SAMURAI/Sistema.php';
require_once 'SAMURAI/constantes.php';
//}}}
/**
* Funcion que se encarga agregar los componentes necesarios al sistema para
* que se pueda realizar un abm de usuarios.
@see \ref page_samurai_html_usuario
*
* @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_HTML_Usuario {{{
function SAMURAI_HTML_Usuario(&$MARCO, $id_sistema) {
$_SESSION['samurai']['id_sistema'] = $id_sistema;
$_SESSION['samurai']['login'] = $_SESSION['usuario'];
//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);
//}}}
//VERIFICO SI SE TIENE ACCESO A LA PAGINA{{{
$SAMURAI_PERM->chequear(SAMURAI_PERM_USUARIO_ALTA, SAMURAI_PERM_USUARIO_BAJA, SAMURAI_PERM_USUARIO_MODIF);
//}}}
if (@$_POST['samurai_accion'] == 'abm' || @$_GET['samurai_usuarios'] == 'abm') {
$OPCION = 'abm';
}
else {
$OPCION = 'listado';
}
//POSIBLES ACCIONES
// listado -> Listado de los usuarios ya creados en el sistema.
// abm -> Formulario para la carga de la info del usuario.
//LISTADO {{{
if ($OPCION == 'listado') {
//LINKS {{{
$aHref = '';
$aHrefModif = $aHref.'';
$aHrefElim = $aHref.'';
// }}}
//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 {{{
$usuarios = SAMURAI_Usuario::getUsuarios($DB, $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_PERM_USUARIO_ALTA)) {
$row = array ($aHref.'Agregar Nuevo Usuario');
$TABLA2->addRow($row,'align=right');
}
//Genero la cabecera de la tabla
$row = array ('Login','Nombre');
if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_MODIF)) {
$row[] = 'Modif.';
}
if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_BAJA)) {
$row[] = 'Elim.';
}
$TABLA->addRow($row,'cabecera');
foreach ($usuarios as $usuario) {
$Modif = ereg_replace('##NUEVO##' , $usuario->getLogin(), $aHrefModif);
$Elim = ereg_replace('##NUEVO##' , $usuario->getLogin(), $aHrefElim );
$Modif = ereg_replace('##ACCION##', 'm' , $Modif );
$Elim = ereg_replace('##ACCION##', 'e' , $Elim );
$row = array ($usuario->getLogin(), $usuario->getNombre());
if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_MODIF)) {
$row[] = $Modif;
}
if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_BAJA)) {
$row[] = $Elim;
}
$TABLA->addRow($row);
}
// }}}
//DIBUJO LA PAGINA {{{
$MARCO->addBodyContent($TABLA3);
$MARCO->addBodyContent($TABLA2->toHtml(1));
$MARCO->addBodyContent($TABLA);
// }}}
}
//}}}
//ABM {{{
elseif ($OPCION == 'abm') {
//CREO LOS OBJETOS NECESARIOS {{{
if (@$_GET['login']) {
$login = $_GET['login'];
$validar = 0;
}
else {
$validar = 1;
$login = null;
}
$TABLA = new MECON_HTML_Tabla ('cellspacing=0');
$FORM = new MECON_HTML_QuickForm ('samurai_usuarios','post', $_SERVER['PHP_SELF']);
$SISTEMA = new SAMURAI_Sistema($DB, $id_sistema);
$USUARIO = new SAMURAI_Usuario($DB, $login, $id_sistema);
// }}}
//OBTENGO LOS DATOS DE LA BASE {{{
$tmps = SAMURAI_Perfil::getPerfiles($DB, null, $id_sistema);
foreach ($tmps as $tmp) {
$PERFILES[$tmp->getId()] = $tmp->getDescripcion();
}
//}}}
//AGREGO LOS DATOS A LAS TABLAS {{{
$imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif');
$row = array ($imagen->toHtml().' SISTEMA: '.$SISTEMA->getNombre().'');
$TABLA->addRow($row,'align=left');
//}}}
//AGREGO LOS ELEMENTOS DEL FORM {{{
if (@$PERFILES) {
$FORM->addElement ('hidden', 'samurai_accion', 'abm');
$FORM->addElement ('header', 'cabecera' , 'ABM Usuarios');
if ($login) { //Si esta el login solo permito modificar los perfiles asociados
$FORM->addElement ('static', 'login2', 'Login@Organismo' , $login );
$FORM->addElement ('hidden', 'login' , $login );
$FORM->addElement ('static', 'nombre', 'Nombre', $USUARIO->getNombre());
}
else {
$FORM->addElement ('text' , 'login' , 'Login@Organismo' , array( 'value' => $login , 'size' => '20'));
}
$FORM->addElement ('select', 'perfiles' , 'Perfiles', $PERFILES, array('size' => '5', 'multiple' => 'true'));
$FORM->addElement ('hidden', 'responsable', $_SESSION['samurai']['login']);
$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 perfiles.');
}
// }}}
//AGREO LAS REGLAS DE VALIDACION {{{
if (@$PERFILES) {
if (@$validar) {
$FORM->addRule ('login', 'Se debe ingresar el login del usuario', 'required');
}
$FORM->addRule ('perfiles', 'Se debe seleccionar al menos un perfil', 'required');
}
// }}}
//SETEO LOS PERFILES SELECCIONADOS {{{
if (isset($_GET['accion']) && $_GET['accion'] != '') {
$perfiles =& $FORM->getElement ('perfiles');
$group =& $FORM->getElement ('botones' );
$group =& $group->getElements('aceptar' );
$aceptar =& $group[0];
$perfiles->setSelected($USUARIO->getPerfiles());
//Modifico el valor del boton
$aceptar->setValue('Modificar');
//ELIMINACION -> modifico el valor del boton
if ($_GET['accion'] == 'e') {
$aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'żEsta Seguro?\')) return true;return false;'));
$aceptar->setValue('Eliminar');
$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 {
$login2 =& $FORM->getElement ('login' );
$perfiles =& $FORM->getElement ('perfiles');
$group =& $FORM->getElement ('botones' );
$group =& $group->getElements('aceptar' );
$aceptar =& $group[0];
$res = '';
if ($login) {
$login3 = $login2->_text;
$nombre =& $FORM->getElement ('nombre' );
}
else {
$login3 = $login2->getValue();
}
$USUARIO->setLogin($login3);
$res = $USUARIO->verificarLogin();
if ($aceptar->getValue() == 'Grabar') {
$res2 = $USUARIO->verificarAsociacionExistente();
}
if (@PEAR::isError($res)) {
$ERROR = new MECON_HTML_Error($res->getMessage());
}
elseif (@PEAR::isError($res2)) {
$ERROR =new MECON_HTML_Error($res2->getMessage());
}
else {
$USUARIO->setPerfiles($perfiles->getSelected());
$res = $USUARIO->guardarDatos($aceptar->getValue());
if (PEAR::isError($res)) {
$ERROR = new MECON_HTML_Error($res->getMessage());
if ($aceptar->getValue() == 'Eliminar') {
$FORM->freeze();
}
}
else {
// $FORM->removeElement();
$FORM->freeze();
header('Location: '.$_SERVER['PHP_SELF'].'/');
}
}
}
}
// }}}
//DIBUJO LA PAGINA {{{
$MARCO->addBodyContent($TABLA);
if (isset($ERROR)) {
$MARCO->addBodyContent($ERROR);
}
$MARCO->addBodyContent($FORM);
// }}}
}
//}}}
}
//}}}
?>