// +----------------------------------------------------------------------+
//
// $Id$
//
//
//
/** \page page_samurai_html_usuario Usuario Embebido
\section page_samurai_html_usuario_descripcion Descripcion
Funcion que sirve para embeber la funcionalidad de los usuario dentro de
los sistemas que asi lo requieran (Es una copia de la funcionalidad de la
seccion).
Necesita para funcionar que se le pase como parametro la referencia al
objeto MECON_Marco que se este utilizando, ademas del identificador del
sistema del sistema en el cual se esta trabajando.
El funcionamiento es completamente independiente del sistema en el cual se
trabaje, no es necesario que se ingrese como seccion o subseccion. De hecho
como se ve en el ejemplo solo se embebe una tabla o formulario pero se
pueden agregar cosas particulares antes y despues de el.
\note Trabaja con variables de sesion asi que es necesario que antes de llamar a
esta funcion se haya realizado un session_start() (Por ejemplo en el prepend).
\section page_samurai_html_usuario_funcionamiento Funcionamiento
Al ser una copia de la seccion de Samurai, los permisos y validaciones que
se realizan en esta funcion son las mismas que se realizan en Samurai.
\subsection page_samurai_html_usuario_funcionamiento_validaciones Validaciones
Se realizan las siguientes validaciones:
- 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. Solo
se modifican sus datos.
- Cada vez que se carga un usuario es necesario asignarle al menos
un permiso, sino no va a permitir que se ingrese el mismo.
\section page_samurai_html_usuario_ejemplo Ejemplo
La utilizacion de usuario embebido no genera condiciones, queda a criterio
del desarrollador incluir esta funcionalidad en el lugar que quiera.
De esta manera se agrega la funcionalidad:
\code
include 'SAMURAI/HTML/Usuario.php';
SAMURAI_HTML_Usuario($MARCO, $ID_SISTEMA);
\endcode
En donde $MARCO es el objeto MECON_Marco que utiliza el sistema y
$ID_SISTEMA es el identificador numerico del sistema en el cual se esta
trabajando.
Antes o despues de esto se pueden agregar componentes pertenecientes al
sistema.
\note Es necesario para ver el contenido de la pagina hacer
$MARCO->display() al final de la misma.
*/
//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.
*
* @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_ALTA_USUARIO, SAMURAI_BAJA_USUARIO, SAMURAI_MODI_USUARIO);
//}}}
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_ALTA_USUARIO)) {
$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_MODI_USUARIO)) {
$row[] = 'Modif.';
}
if ($SAMURAI_PERM->tiene(SAMURAI_BAJA_USUARIO)) {
$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_MODI_USUARIO)) {
$row[] = $Modif;
}
if ($SAMURAI_PERM->tiene(SAMURAI_BAJA_USUARIO)) {
$row[] = $Elim;
}
$TABLA->addRow($row);
}
// }}}
//DIBUJO LA PAGINA {{{
$MARCO->addBody($TABLA3);
$MARCO->addBody($TABLA2->toHtml(1));
$MARCO->addBody($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);
// }}}
//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' );
$nombre =& $FORM->getElement ('nombre' );
$perfiles =& $FORM->getElement ('perfiles');
$group =& $FORM->getElement ('botones' );
$group =& $group->getElements('aceptar' );
$aceptar =& $group[0];
$res = '';
if ($login) {
$login3 = $login2->_text;
}
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->addBody($TABLA);
if (isset($ERROR)) {
$MARCO->addBody($ERROR);
}
$MARCO->addBody($FORM);
// }}}
}
//}}}
}
//}}}
?>