]> git.llucax.com Git - mecon/samurai.git/blob - lib/SAMURAI/HTML/Usuario.php
Cambios. No se utiliza mas $_SESSION[samurai][id_sistema] desde dentro de las libreri...
[mecon/samurai.git] / lib / SAMURAI / HTML / Usuario.php
1 <?php
2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4 foldmethod=marker textwidth=80:
3 // +----------------------------------------------------------------------+
4 // | PHP Version 4                                                        |
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 // +----------------------------------------------------------------------+
19 //
20 // $Id$
21 //
22 //
23 //
24 /** \page page_samurai_html_usuario Usuario Embebido
25
26
27 \section page_samurai_html_usuario_descripcion Descripcion
28
29     Funcion que sirve para embeber la funcionalidad de los usuario dentro de
30     los sistemas que asi lo requieran (Es una copia de la funcionalidad de la
31     seccion).
32     Necesita para funcionar que se le pase como parametro la referencia al
33     objeto MECON_Marco que se este utilizando, ademas del identificador del
34     sistema del sistema en el cual se esta trabajando.
35     El funcionamiento es completamente independiente del sistema en el cual se
36     trabaje, no es necesario que se ingrese como seccion o subseccion. De hecho
37     como se ve en el ejemplo solo se embebe una tabla o formulario pero se
38     pueden agregar cosas particulares antes y despues de el.
39     
40     \note Trabaja con variables de sesion asi que es necesario que antes de llamar a
41     esta funcion se haya realizado un session_start() (Por ejemplo en el prepend).
42
43 \section page_samurai_html_usuario_funcionamiento Funcionamiento
44     Al ser una copia de la seccion de Samurai, los permisos y validaciones que
45     se realizan en esta funcion son las mismas que se realizan en Samurai.
46
47     \subsection page_samurai_html_usuario_funcionamiento_validaciones Validaciones
48         Se realizan las siguientes validaciones:
49             - Cualquier usuario que se quiera agregar debe haberse logueado al
50               menos una vez a la intranet.
51             - No puede cargarse dos veces el mismo usuario en un sistema. Solo
52               se modifican sus datos.
53             - Cada vez que se carga un usuario es necesario asignarle al menos
54               un permiso, sino no va a permitir que se ingrese el mismo.
55
56 \section page_samurai_html_usuario_ejemplo Ejemplo
57     La utilizacion de usuario embebido no genera condiciones, queda a criterio
58     del desarrollador incluir esta funcionalidad en el lugar que quiera.
59
60     De esta manera se agrega la funcionalidad:
61     \code
62     include 'SAMURAI/HTML/Usuario.php';
63
64     SAMURAI_HTML_Usuario($MARCO, $ID_SISTEMA);
65     \endcode
66     
67     En donde $MARCO es el objeto MECON_Marco que utiliza el sistema y
68     $ID_SISTEMA es el identificador numerico del sistema en el cual se esta
69     trabajando.
70
71     Antes o despues de esto se pueden agregar componentes pertenecientes al
72     sistema.
73
74     \note Es necesario para ver el contenido de la pagina hacer 
75     $MARCO->display() al final de la misma.
76 */
77
78 //REQUIRE ONCE {{{
79     require_once 'MECON/HTML/QuickForm.php';
80     require_once 'MECON/HTML/Error.php';
81     require_once 'MECON/HTML/Tabla.php';
82     require_once 'MECON/HTML/Image.php';
83     require_once 'SAMURAI/Perm.php';
84     require_once 'SAMURAI/Perfil.php';
85     require_once 'SAMURAI/Usuario.php';
86     require_once 'SAMURAI/Sistema.php';
87     require_once 'SAMURAI/constantes.php';
88 //}}}
89
90 /** Funcion que se encarga agregar los componentes necesarios al sistema para
91  * que se pueda realizar un abm de usuarios.
92  *
93  * @param MECON_Marco &$MARCO      Referencia al objeto MECON_Marco que se este
94  *                                 utilizando en la pagina
95  * @param int          $id_sistema Identificador del sistema en el cual se esta
96  *                                 trabajando
97  *
98  * @return void
99  */
100 //SAMURAI_HTML_Usuario {{{
101 function SAMURAI_HTML_Usuario(&$MARCO, $id_sistema) {
102
103     $_SESSION['samurai']['id_sistema'] = $id_sistema;
104     $_SESSION['samurai']['login'] = $_SESSION['usuario'];
105
106     //INICIALIZO OBJETOS GENERALES {{{
107     //REALIZO CONEXION
108     $tmp = new SAMURAI_DB();
109     $DB  =& $tmp->connect();
110     //CREAR EL OBJETO SAMURAI_Perm
111     $SAMURAI_PERM = new SAMURAI_Perm ($_SESSION['usuario'], $id_sistema, $DB);
112     //}}}
113     //VERIFICO SI SE TIENE ACCESO A LA PAGINA{{{
114     $SAMURAI_PERM->chequear(SAMURAI_ALTA_USUARIO, SAMURAI_BAJA_USUARIO, SAMURAI_MODI_USUARIO);
115     //}}}
116     
117     if (@$_POST['samurai_accion'] == 'abm' || @$_GET['samurai_usuarios'] == 'abm') {
118         $OPCION = 'abm';
119     }
120     else {
121         $OPCION = 'listado';
122     }
123
124     //POSIBLES ACCIONES
125     // listado -> Listado de los usuarios ya creados en el sistema.
126     // abm     -> Formulario para la carga de la info del usuario.
127     //LISTADO {{{
128     if ($OPCION == 'listado') {
129         //LINKS {{{
130             $aHref      = '<a href="'.$_SERVER['PHP_SELF'].'?samurai_usuarios=abm&accion=##ACCION##&login=##NUEVO##">';
131             $aHrefModif = $aHref.'<img src="/MECON/images/general_modificar.gif" border="0" alt="Modificar Usuario"></a>';
132             $aHrefElim  = $aHref.'<img src="/MECON/images/general_eliminar.gif"  border="0" alt="Eliminar Usuario" ></a>';
133         // }}}
134         //CREO LOS OBJETOS NECESARIOS {{{
135             $TABLA2 = new MECON_HTML_Tabla ('cellspacing=0');
136             $TABLA  = new MECON_HTML_Tabla ('cellpadding=2');
137             $TABLA3 = new MECON_HTML_Tabla ('cellspacing=0');
138             $SISTEMA = new SAMURAI_Sistema($DB, $id_sistema);
139         // }}}
140         //OBTENGO LA INFORMACION DE LA BASE {{{
141             $usuarios = SAMURAI_Usuario::getUsuarios($DB, $id_sistema);
142         // }}}
143         //AGREGO LOS DATOS A LAS TABLAS {{{
144             $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif');
145             $row    = array ($imagen->toHtml().'&nbsp;<b>SISTEMA: '.$SISTEMA->getNombre().'</b>');
146             $TABLA3->addRow($row,'align=left');    
147
148             //Agrego el link a nuevo
149             if ($SAMURAI_PERM->tiene(SAMURAI_ALTA_USUARIO)) {
150                 $row   = array ($aHref.'<img src="/MECON/images/general_nuevo.gif" border="0">Agregar Nuevo Usuario</a>');
151                 $TABLA2->addRow($row,'align=right');    
152             }
153             //Genero la cabecera de la tabla
154             $row  = array ('Login','Nombre');
155             if ($SAMURAI_PERM->tiene(SAMURAI_MODI_USUARIO)) {
156                 $row[] = 'Modif.';
157             }
158             if ($SAMURAI_PERM->tiene(SAMURAI_BAJA_USUARIO)) {
159                 $row[] = 'Elim.';
160             }
161             $TABLA->addRow($row,'cabecera');
162             foreach ($usuarios as $usuario) {
163                 $Modif = ereg_replace('##NUEVO##' , $usuario->getLogin(), $aHrefModif);
164                 $Elim  = ereg_replace('##NUEVO##' , $usuario->getLogin(), $aHrefElim );
165                 $Modif = ereg_replace('##ACCION##', 'm'                 , $Modif     );
166                 $Elim  = ereg_replace('##ACCION##', 'e'                 , $Elim      );
167                 $row = array ($usuario->getLogin(), $usuario->getNombre());
168                 if ($SAMURAI_PERM->tiene(SAMURAI_MODI_USUARIO)) {
169                     $row[] = $Modif;
170                 }
171                 if ($SAMURAI_PERM->tiene(SAMURAI_BAJA_USUARIO)) {
172                     $row[] = $Elim;
173                 }
174
175                 $TABLA->addRow($row);
176             }
177         // }}}
178         //DIBUJO LA PAGINA {{{
179             $MARCO->addBody($TABLA3);
180             $MARCO->addBody($TABLA2->toHtml(1));
181             $MARCO->addBody($TABLA);
182         // }}}
183     }
184     //}}}
185     //ABM {{{
186     elseif ($OPCION == 'abm') {
187         //CREO LOS OBJETOS NECESARIOS {{{
188             if (@$_GET['login']) {
189                 $login = $_GET['login'];
190                 $validar = 0;
191             }
192             else {
193                 $validar = 1;
194                 $login = null;
195             }
196             $TABLA   = new MECON_HTML_Tabla ('cellspacing=0');
197             $FORM    = new MECON_HTML_QuickForm ('samurai_usuarios','post', $_SERVER['PHP_SELF']);
198             $SISTEMA = new SAMURAI_Sistema($DB, $id_sistema);
199             $USUARIO = new SAMURAI_Usuario($DB, $login);
200         // }}}
201         //OBTENGO LOS DATOS DE LA BASE {{{
202             $tmps = SAMURAI_Perfil::getPerfiles($DB, null, $id_sistema);
203             foreach ($tmps as $tmp) {
204                 $PERFILES[$tmp->getId()] = $tmp->getDescripcion();
205             }
206         //}}}
207         //AGREGO LOS DATOS A LAS TABLAS {{{
208             $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif');
209             $row    = array ($imagen->toHtml().'&nbsp;<b>SISTEMA: '.$SISTEMA->getNombre().'</b>');
210             $TABLA->addRow($row,'align=left');    
211         //}}}
212         //AGREGO LOS ELEMENTOS DEL FORM {{{
213             if (@$PERFILES) {
214                 $FORM->addElement ('hidden', 'samurai_accion', 'abm');
215                 $FORM->addElement ('header', 'cabecera'   , 'ABM Usuarios');
216                 if ($login) { //Si esta el login solo permito modificar los perfiles asociados
217                     $FORM->addElement ('static', 'login2', 'Login@Organismo' , $login );
218                     $FORM->addElement ('hidden', 'login' , $login );
219                     $FORM->addElement ('static', 'nombre', 'Nombre', $USUARIO->getNombre());
220                 }
221                 else {
222                     $FORM->addElement ('text'  , 'login' , 'Login@Organismo' , array( 'value' => $login , 'size' => '20'));
223                 }
224                 $FORM->addElement ('select', 'perfiles'   , 'Perfiles', $PERFILES, array('size' => '5', 'multiple' => 'true'));
225                 $FORM->addElement ('hidden', 'responsable', $_SESSION['samurai']['login']);
226                 $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar');
227                 $group[] = HTML_QuickForm::createElement('submit', 'cancelar', 'Cancelar', array ('onClick' => 'javascript:window.location = \''.$_SERVER['PHP_SELF'].'\';return false;'));
228                 $FORM->addGroup($group,'botones');
229             }
230             else {
231                 $ERROR = new MECON_HTML_Error('El sistema no posee perfiles.');
232             }
233         // }}}
234         //AGREO LAS REGLAS DE VALIDACION {{{
235             if (@$PERFILES) {
236                 if (@$validar) {
237                     $FORM->addRule ('login', 'Se debe ingresar el login del usuario', 'required');
238                 }
239                 $FORM->addRule ('perfiles', 'Se debe seleccionar al menos un perfil', 'required');
240             }
241         // }}}
242         //SETEO LOS PERFILES SELECCIONADOS {{{
243             if (isset($_GET['accion']) && $_GET['accion'] != '') {
244                 $perfiles =& $FORM->getElement  ('perfiles');
245                 $group    =& $FORM->getElement  ('botones' );
246                 $group    =& $group->getElements('aceptar' );
247                 $aceptar  =& $group[0];
248                 
249                 $perfiles->setSelected($USUARIO->getPerfiles());
250                 
251                 //Modifico el valor del boton
252                 $aceptar->setValue('Modificar');
253                     
254                 //ELIMINACION -> modifico el valor del boton
255                 if ($_GET['accion'] == 'e') {
256                     $aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
257                     $aceptar->setValue('Eliminar');
258                     $FORM->freeze();
259                 }
260             }
261         // }}}
262         //VALIDO EL FORMULARIO {{{
263             if ($FORM->validate()) {
264                 // VEO SI SE CANCELO {{{
265                 $botones = $FORM->getSubmitValue('botones');
266                 if (@$botones['cancelar']) {
267                     header('Location: '.$_SERVER['PHP_SELF'].'/');
268                 }
269                 // }}}
270                 else {
271                     $login2   =& $FORM->getElement  ('login'   ); 
272                     $nombre   =& $FORM->getElement  ('nombre'  );
273                     $perfiles =& $FORM->getElement  ('perfiles');
274                     $group    =& $FORM->getElement  ('botones' );
275                     $group    =& $group->getElements('aceptar' );
276                     $aceptar  =& $group[0];
277                     $res = '';
278
279                     if ($login) {
280                         $login3 = $login2->_text;
281                     }
282                     else {
283                         $login3 = $login2->getValue();
284                     }
285                     $USUARIO->setLogin($login3);
286                     $res  = $USUARIO->verificarLogin();
287                     if ($aceptar->getValue() == 'Grabar') {
288                         $res2 = $USUARIO->verificarAsociacionExistente();
289                     }
290                     if (@PEAR::isError($res)) {
291                         $ERROR = new MECON_HTML_Error($res->getMessage());
292                     }
293                     elseif (@PEAR::isError($res2)) {
294                         $ERROR =new MECON_HTML_Error($res2->getMessage());
295                     }
296                     else {
297                         $USUARIO->setPerfiles($perfiles->getSelected());
298
299                         $res = $USUARIO->guardarDatos($aceptar->getValue());
300
301                         if (PEAR::isError($res)) {
302                             $ERROR = new MECON_HTML_Error($res->getMessage());
303                             if ($aceptar->getValue() == 'Eliminar') {
304                                 $FORM->freeze();
305                             }
306                         }
307                         else {
308 //                            $FORM->removeElement();
309                             $FORM->freeze();
310                             header('Location: '.$_SERVER['PHP_SELF'].'/');
311                         }
312                     }
313                 }
314             }
315         // }}}
316         //DIBUJO LA PAGINA {{{
317             $MARCO->addBody($TABLA);
318             if (isset($ERROR)) {
319                 $MARCO->addBody($ERROR);
320             }
321             $MARCO->addBody($FORM);
322         // }}}
323     }
324     //}}}
325     
326 }
327 //}}}
328 ?>