2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4 foldmethod=marker textwidth=80:
3 // +----------------------------------------------------------------------+
5 // +----------------------------------------------------------------------+
6 // | Copyright (c) 1997-2003 The PHP Group |
7 // +----------------------------------------------------------------------+
8 // | This source file is subject to version 2.02 of the PHP license, |
9 // | that is bundled with this package in the file LICENSE, and is |
10 // | available at through the world-wide-web at |
11 // | http://www.php.net/license/2_02.txt. |
12 // | If you did not receive a copy of the PHP license and are unable to |
13 // | obtain it through the world-wide-web, please send a note to |
14 // | license@php.net so we can mail you a copy immediately. |
15 // +----------------------------------------------------------------------+
16 // | Created: mar ago 26 13:18:26 ART 2003
17 // | Author: Martin Marrese <mmarre@mecon.gov.ar>
18 // +----------------------------------------------------------------------+
25 /** \page page_samurai_html_usuario Usuario Embebido
27 \section page_samurai_html_usuario_descripcion Descripcion
28 Samurai provee de una funcion que permite embeber la funcionalidad de
29 usuarios dentro de aquellos sistemas que asi lo requieran.
30 Es completamente independiente del sistema en el cual trabaja y puede ser
31 agregado de cualquier manera (Seccion, Subseccion o Contenido) al sistema.
33 \note Es necesario para embeber los usuarios que se haya realizado un
36 \section page_samurai_html_usuario_funcionamiento Funcionamiento
37 Es una copia de la seccion Usuarios dentro de SAMURAI. Se relizan las mismas
38 verificaciones, tiene las mismas condiciones y se utilizan los mismos
41 \subsection page_samurai_html_usuario_funcionamiento_validaciones Validaciones y Condiciones
42 - Cualquier usuario que se quiera agregar debe haberse logueado al
43 menos una vez a la intranet.
44 - No puede cargarse dos veces el mismo usuario en un sistema.
45 - Cada vez que se carga un usuario es necesario asignarle al menos
46 un perfil, sino no va a permitir que se ingrese el mismo.
48 \section page_samurai_html_usuario_ejemplo Ejemplo
49 SAMURAI_HTML_Usuario agrega el contenido directamente en el marco que se
51 Para embeber los usuarios hay que hacerlo de la siguiente manera
54 include 'SAMURAI/HTML/Usuario.php';
55 SAMURAI_HTML_Usuario($MARCO, $ID_SISTEMA);
58 \note $MARCO es el objeto MECON_Marco o el objeto HTML_DietMarco de
60 $ID_SISTEMA es el identificador numerico en el cual se esta realizando la
63 \section page_samurai_html_usuario_permisos Pasos Finales
64 Para que los usuarios puedan acceder a los usuarios embebidos es necesario
65 que en el sistema en el cual se este embebiendo se agregen los permisos que
66 utiliza la seccion Usuarios (enumerados mas abajo), y que estos mediante
67 perfiles se asignen a usuarios.
68 Esto implica que por lo menos un usuario tendra que ser cargado desde
69 SAMURAI para que este tenga acceso a la zona embebida.
74 - usuario modificacion
78 require_once 'MECON/HTML/QuickForm.php';
79 require_once 'MECON/HTML/Error.php';
80 require_once 'MECON/HTML/Tabla.php';
81 require_once 'MECON/HTML/Image.php';
82 require_once 'SAMURAI/Perm.php';
83 require_once 'SAMURAI/Perfil.php';
84 require_once 'SAMURAI/Usuario.php';
85 require_once 'SAMURAI/Sistema.php';
86 require_once 'SAMURAI/constantes.php';
90 * Funcion que se encarga agregar los componentes necesarios al sistema para
91 * que se pueda realizar un abm de usuarios.
92 @see \ref page_samurai_html_usuario
94 * @param MECON_Marco &$MARCO Referencia al objeto MECON_Marco que se este
95 * utilizando en la pagina
96 * @param int $id_sistema Identificador del sistema en el cual se esta
101 //SAMURAI_HTML_Usuario {{{
102 function SAMURAI_HTML_Usuario(&$MARCO, $id_sistema) {
104 $_SESSION['samurai']['id_sistema'] = $id_sistema;
105 $_SESSION['samurai']['login'] = $_SESSION['usuario'];
107 //INICIALIZO OBJETOS GENERALES {{{
109 $tmp = new SAMURAI_DB();
110 $DB =& $tmp->connect();
111 //CREAR EL OBJETO SAMURAI_Perm
112 $SAMURAI_PERM = new SAMURAI_Perm ($_SESSION['usuario'], $id_sistema, $DB);
114 //VERIFICO SI SE TIENE ACCESO A LA PAGINA{{{
115 $SAMURAI_PERM->chequear(SAMURAI_PERM_USUARIO_ALTA, SAMURAI_PERM_USUARIO_BAJA, SAMURAI_PERM_USUARIO_MODIF);
118 if (@$_POST['samurai_accion'] == 'abm' || @$_GET['samurai_usuarios'] == 'abm') {
126 // listado -> Listado de los usuarios ya creados en el sistema.
127 // abm -> Formulario para la carga de la info del usuario.
129 if ($OPCION == 'listado') {
131 $aHref = '<a href="'.$_SERVER['PHP_SELF'].'?samurai_usuarios=abm&accion=##ACCION##&login=##NUEVO##">';
132 $aHrefModif = $aHref.'<img src="/MECON/images/general_modificar.gif" border="0" alt="Modificar Usuario"></a>';
133 $aHrefElim = $aHref.'<img src="/MECON/images/general_eliminar.gif" border="0" alt="Eliminar Usuario" ></a>';
135 //CREO LOS OBJETOS NECESARIOS {{{
136 $TABLA2 = new MECON_HTML_Tabla ('cellspacing=0');
137 $TABLA = new MECON_HTML_Tabla ('cellpadding=2');
138 $TABLA3 = new MECON_HTML_Tabla ('cellspacing=0');
139 $SISTEMA = new SAMURAI_Sistema($DB, $id_sistema);
141 //OBTENGO LA INFORMACION DE LA BASE {{{
142 $usuarios = SAMURAI_Usuario::getUsuarios($DB, $id_sistema);
144 //AGREGO LOS DATOS A LAS TABLAS {{{
145 $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif');
146 $row = array ($imagen->toHtml().' <b>SISTEMA: '.$SISTEMA->getNombre().'</b>');
147 $TABLA3->addRow($row,'align=left');
149 //Agrego el link a nuevo
150 if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_ALTA)) {
151 $row = array ($aHref.'<img src="/MECON/images/general_nuevo.gif" border="0">Agregar Nuevo Usuario</a>');
152 $TABLA2->addRow($row,'align=right');
154 //Genero la cabecera de la tabla
155 $row = array ('Login','Nombre');
156 if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_MODIF)) {
159 if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_BAJA)) {
162 $TABLA->addRow($row,'cabecera');
163 foreach ($usuarios as $usuario) {
164 $Modif = ereg_replace('##NUEVO##' , $usuario->getLogin(), $aHrefModif);
165 $Elim = ereg_replace('##NUEVO##' , $usuario->getLogin(), $aHrefElim );
166 $Modif = ereg_replace('##ACCION##', 'm' , $Modif );
167 $Elim = ereg_replace('##ACCION##', 'e' , $Elim );
168 $row = array ($usuario->getLogin(), $usuario->getNombre());
169 if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_MODIF)) {
172 if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_BAJA)) {
176 $TABLA->addRow($row);
179 //DIBUJO LA PAGINA {{{
180 $MARCO->addBodyContent($TABLA3);
181 $MARCO->addBodyContent($TABLA2->toHtml(1));
182 $MARCO->addBodyContent($TABLA);
187 elseif ($OPCION == 'abm') {
188 //CREO LOS OBJETOS NECESARIOS {{{
189 if (@$_GET['login']) {
190 $login = $_GET['login'];
197 //XXX OBTENGO LA ACCION {{{
198 switch (@$_REQUEST['accion']) {
200 $b_accion = 'Modificar';
204 $b_accion = 'Eliminar';
208 $b_accion = 'Grabar';
213 $TABLA = new MECON_HTML_Tabla ('cellspacing=0');
214 $FORM = new MECON_HTML_QuickForm ('samurai_usuarios','post', $_SERVER['PHP_SELF']);
215 $SISTEMA = new SAMURAI_Sistema($DB, $id_sistema);
216 $USUARIO = new SAMURAI_Usuario($DB, $login, $id_sistema);
218 //OBTENGO LOS DATOS DE LA BASE {{{
219 $tmps = SAMURAI_Perfil::getPerfiles($DB, null, $id_sistema);
220 foreach ($tmps as $tmp) {
221 $PERFILES[$tmp->getId()] = $tmp->getDescripcion();
224 //AGREGO LOS DATOS A LAS TABLAS {{{
225 $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif');
226 $row = array ($imagen->toHtml().' <b>SISTEMA: '.$SISTEMA->getNombre().'</b>');
227 $TABLA->addRow($row,'align=left');
229 //AGREGO LOS ELEMENTOS DEL FORM {{{
231 $FORM->addElement ('hidden', 'samurai_accion', 'abm');
232 $FORM->addElement ('header', 'cabecera' , 'ABM Usuarios');
233 if ($login) { //Si esta el login solo permito modificar los perfiles asociados
234 $FORM->addElement ('static', 'login2', 'Login@Organismo' , $login );
235 $FORM->addElement ('hidden', 'login' , $login );
236 $FORM->addElement ('static', 'nombre', 'Nombre', $USUARIO->getNombre());
239 $FORM->addElement ('text' , 'login' , 'Login@Organismo' , array( 'value' => $login , 'size' => '20'));
241 $FORM->addElement ('select', 'perfiles' , 'Perfiles', $PERFILES, array('size' => '5', 'multiple' => 'true'));
242 $FORM->addElement ('hidden', 'responsable', $_SESSION['samurai']['login']);
243 $FORM->addElement ('hidden', 'accion', $accion);
244 $group[] = HTML_QuickForm::createElement('submit', 'aceptar', $b_accion);
245 $group[] = HTML_QuickForm::createElement('submit', 'cancelar', 'Cancelar', array ('onClick' => 'javascript:window.location = \''.$_SERVER['PHP_SELF'].'\';return false;'));
246 $FORM->addGroup($group,'botones');
249 $ERROR = new MECON_HTML_Error('El sistema no posee perfiles.');
252 //AGREO LAS REGLAS DE VALIDACION {{{
255 $FORM->addRule ('login', 'Se debe ingresar el login del usuario', 'required');
257 $FORM->addRule ('perfiles', 'Se debe seleccionar al menos un perfil', 'required');
260 //SETEO LOS PERFILES SELECCIONADOS {{{
261 if (isset($_GET['accion']) && $_GET['accion'] != '') {
262 $perfiles =& $FORM->getElement ('perfiles');
263 $group =& $FORM->getElement ('botones' );
264 $group =& $group->getElements('aceptar' );
265 $aceptar =& $group[0];
267 $perfiles->setSelected($USUARIO->getPerfiles());
269 //Modifico el valor del boton
270 $aceptar->setValue('Modificar');
272 //ELIMINACION -> modifico el valor del boton
273 if ($_GET['accion'] == 'e') {
274 $aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
275 $aceptar->setValue('Eliminar');
280 //VALIDO EL FORMULARIO {{{
281 if ($FORM->validate()) {
282 // VEO SI SE CANCELO {{{
283 $botones = $FORM->getSubmitValue('botones');
284 if (@$botones['cancelar']) {
285 header('Location: '.$_SERVER['PHP_SELF'].'/');
289 $login2 =& $FORM->getElement ('login' );
290 $perfiles =& $FORM->getElement ('perfiles');
291 $group =& $FORM->getElement ('botones' );
292 $group =& $group->getElements('aceptar' );
293 $aceptar =& $group[0];
297 $login3 = $login2->_text;
298 $nombre =& $FORM->getElement ('nombre' );
301 $login3 = $login2->getValue();
303 $USUARIO->setLogin($login3);
304 $res = $USUARIO->verificarLogin();
305 if ($aceptar->getValue() == 'Grabar') {
306 $res2 = $USUARIO->verificarAsociacionExistente();
308 if (@PEAR::isError($res)) {
309 $ERROR = new MECON_HTML_Error($res->getMessage());
311 elseif (@PEAR::isError($res2)) {
312 $ERROR =new MECON_HTML_Error($res2->getMessage());
315 $USUARIO->setPerfiles($perfiles->getSelected());
317 $res = $USUARIO->guardarDatos($aceptar->getValue());
319 if (PEAR::isError($res)) {
320 $ERROR = new MECON_HTML_Error($res->getMessage());
321 if ($aceptar->getValue() == 'Eliminar') {
326 // $FORM->removeElement();
328 header('Location: '.$_SERVER['PHP_SELF'].'/');
334 //DIBUJO LA PAGINA {{{
335 $MARCO->addBodyContent($TABLA);
337 $MARCO->addBodyContent($ERROR);
339 $MARCO->addBodyContent($FORM);