]> git.llucax.com Git - mecon/samurai.git/blob - lib/SAMURAI/HTML/Usuario.php
Libreria SAMURAI_Perm en Perl casi lista. Falta getObservaciones y verificar que...
[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
25 /** \page page_samurai_html_usuario Usuario Embebido
26
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.
32         
33     \note Es necesario para embeber los usuarios que se haya realizado un
34     session_start().
35
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 
39     permisos que en este.
40
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.
47
48 \section page_samurai_html_usuario_ejemplo Ejemplo
49     SAMURAI_HTML_Usuario agrega el contenido directamente en el marco que se 
50     este utilizando.
51     Para embeber los usuarios hay que hacerlo de la siguiente manera
52     
53     \code
54     include 'SAMURAI/HTML/Usuario.php';
55     SAMURAI_HTML_Usuario($MARCO, $ID_SISTEMA);
56     \endcode
57      
58     \note $MARCO es el objeto MECON_Marco o el objeto HTML_DietMarco de
59     intranet. 
60     $ID_SISTEMA es el identificador numerico en el cual se esta realizando la
61     accion de embeber.
62
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.
70
71     Permisos
72         - usuario alta
73         - usuario baja
74         - usuario modificacion
75 */
76
77 //REQUIRE ONCE {{{
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';
87 //}}}
88
89 /** 
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
93  *
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
97  *                                 trabajando
98  *
99  * @return void
100  */
101 //SAMURAI_HTML_Usuario {{{
102 function SAMURAI_HTML_Usuario(&$MARCO, $id_sistema) {
103
104     $_SESSION['samurai']['id_sistema'] = $id_sistema;
105     $_SESSION['samurai']['login'] = $_SESSION['usuario'];
106
107     //INICIALIZO OBJETOS GENERALES {{{
108     //REALIZO CONEXION
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);
113     //}}}
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);
116     //}}}
117     
118     if (@$_POST['samurai_accion'] == 'abm' || @$_GET['samurai_usuarios'] == 'abm') {
119         $OPCION = 'abm';
120     }
121     else {
122         $OPCION = 'listado';
123     }
124
125     //POSIBLES ACCIONES
126     // listado -> Listado de los usuarios ya creados en el sistema.
127     // abm     -> Formulario para la carga de la info del usuario.
128     //LISTADO {{{
129     if ($OPCION == 'listado') {
130         //LINKS {{{
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>';
134         // }}}
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);
140         // }}}
141         //OBTENGO LA INFORMACION DE LA BASE {{{
142             $usuarios = SAMURAI_Usuario::getUsuarios($DB, $id_sistema);
143         // }}}
144         //AGREGO LOS DATOS A LAS TABLAS {{{
145             $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif');
146             $row    = array ($imagen->toHtml().'&nbsp;<b>SISTEMA: '.$SISTEMA->getNombre().'</b>');
147             $TABLA3->addRow($row,'align=left');    
148
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');    
153             }
154             //Genero la cabecera de la tabla
155             $row  = array ('Login','Nombre');
156             if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_MODIF)) {
157                 $row[] = 'Modif.';
158             }
159             if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_BAJA)) {
160                 $row[] = 'Elim.';
161             }
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)) {
170                     $row[] = $Modif;
171                 }
172                 if ($SAMURAI_PERM->tiene(SAMURAI_PERM_USUARIO_BAJA)) {
173                     $row[] = $Elim;
174                 }
175
176                 $TABLA->addRow($row);
177             }
178         // }}}
179         //DIBUJO LA PAGINA {{{
180             $MARCO->addBodyContent($TABLA3);
181             $MARCO->addBodyContent($TABLA2->toHtml(1));
182             $MARCO->addBodyContent($TABLA);
183         // }}}
184     }
185     //}}}
186     //ABM {{{
187     elseif ($OPCION == 'abm') {
188         //CREO LOS OBJETOS NECESARIOS {{{
189             if (@$_GET['login']) {
190                 $login = $_GET['login'];
191                 $validar = 0;
192             }
193             else {
194                 $validar = 1;
195                 $login = null;
196             }
197             $TABLA   = new MECON_HTML_Tabla ('cellspacing=0');
198             $FORM    = new MECON_HTML_QuickForm ('samurai_usuarios','post', $_SERVER['PHP_SELF']);
199             $SISTEMA = new SAMURAI_Sistema($DB, $id_sistema);
200             $USUARIO = new SAMURAI_Usuario($DB, $login, $id_sistema);
201         // }}}
202         //OBTENGO LOS DATOS DE LA BASE {{{
203             $tmps = SAMURAI_Perfil::getPerfiles($DB, null, $id_sistema);
204             foreach ($tmps as $tmp) {
205                 $PERFILES[$tmp->getId()] = $tmp->getDescripcion();
206             }
207         //}}}
208         //AGREGO LOS DATOS A LAS TABLAS {{{
209             $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif');
210             $row    = array ($imagen->toHtml().'&nbsp;<b>SISTEMA: '.$SISTEMA->getNombre().'</b>');
211             $TABLA->addRow($row,'align=left');    
212         //}}}
213         //AGREGO LOS ELEMENTOS DEL FORM {{{
214             if (@$PERFILES) {
215                 $FORM->addElement ('hidden', 'samurai_accion', 'abm');
216                 $FORM->addElement ('header', 'cabecera'   , 'ABM Usuarios');
217                 if ($login) { //Si esta el login solo permito modificar los perfiles asociados
218                     $FORM->addElement ('static', 'login2', 'Login@Organismo' , $login );
219                     $FORM->addElement ('hidden', 'login' , $login );
220                     $FORM->addElement ('static', 'nombre', 'Nombre', $USUARIO->getNombre());
221                 }
222                 else {
223                     $FORM->addElement ('text'  , 'login' , 'Login@Organismo' , array( 'value' => $login , 'size' => '20'));
224                 }
225                 $FORM->addElement ('select', 'perfiles'   , 'Perfiles', $PERFILES, array('size' => '5', 'multiple' => 'true'));
226                 $FORM->addElement ('hidden', 'responsable', $_SESSION['samurai']['login']);
227                 $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar');
228                 $group[] = HTML_QuickForm::createElement('submit', 'cancelar', 'Cancelar', array ('onClick' => 'javascript:window.location = \''.$_SERVER['PHP_SELF'].'\';return false;'));
229                 $FORM->addGroup($group,'botones');
230             }
231             else {
232                 $ERROR = new MECON_HTML_Error('El sistema no posee perfiles.');
233             }
234         // }}}
235         //AGREO LAS REGLAS DE VALIDACION {{{
236             if (@$PERFILES) {
237                 if (@$validar) {
238                     $FORM->addRule ('login', 'Se debe ingresar el login del usuario', 'required');
239                 }
240                 $FORM->addRule ('perfiles', 'Se debe seleccionar al menos un perfil', 'required');
241             }
242         // }}}
243         //SETEO LOS PERFILES SELECCIONADOS {{{
244             if (isset($_GET['accion']) && $_GET['accion'] != '') {
245                 $perfiles =& $FORM->getElement  ('perfiles');
246                 $group    =& $FORM->getElement  ('botones' );
247                 $group    =& $group->getElements('aceptar' );
248                 $aceptar  =& $group[0];
249                 
250                 $perfiles->setSelected($USUARIO->getPerfiles());
251                 
252                 //Modifico el valor del boton
253                 $aceptar->setValue('Modificar');
254                     
255                 //ELIMINACION -> modifico el valor del boton
256                 if ($_GET['accion'] == 'e') {
257                     $aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
258                     $aceptar->setValue('Eliminar');
259                     $FORM->freeze();
260                 }
261             }
262         // }}}
263         //VALIDO EL FORMULARIO {{{
264             if ($FORM->validate()) {
265                 // VEO SI SE CANCELO {{{
266                 $botones = $FORM->getSubmitValue('botones');
267                 if (@$botones['cancelar']) {
268                     header('Location: '.$_SERVER['PHP_SELF'].'/');
269                 }
270                 // }}}
271                 else {
272                     $login2   =& $FORM->getElement  ('login'   ); 
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                         $nombre   =& $FORM->getElement  ('nombre'  );
282                     }
283                     else {
284                         $login3 = $login2->getValue();
285                     }
286                     $USUARIO->setLogin($login3);
287                     $res  = $USUARIO->verificarLogin();
288                     if ($aceptar->getValue() == 'Grabar') {
289                         $res2 = $USUARIO->verificarAsociacionExistente();
290                     }
291                     if (@PEAR::isError($res)) {
292                         $ERROR = new MECON_HTML_Error($res->getMessage());
293                     }
294                     elseif (@PEAR::isError($res2)) {
295                         $ERROR =new MECON_HTML_Error($res2->getMessage());
296                     }
297                     else {
298                         $USUARIO->setPerfiles($perfiles->getSelected());
299
300                         $res = $USUARIO->guardarDatos($aceptar->getValue());
301
302                         if (PEAR::isError($res)) {
303                             $ERROR = new MECON_HTML_Error($res->getMessage());
304                             if ($aceptar->getValue() == 'Eliminar') {
305                                 $FORM->freeze();
306                             }
307                         }
308                         else {
309 //                            $FORM->removeElement();
310                             $FORM->freeze();
311                             header('Location: '.$_SERVER['PHP_SELF'].'/');
312                         }
313                     }
314                 }
315             }
316         // }}}
317         //DIBUJO LA PAGINA {{{
318             $MARCO->addBodyContent($TABLA);
319             if (isset($ERROR)) {
320                 $MARCO->addBodyContent($ERROR);
321             }
322             $MARCO->addBodyContent($FORM);
323         // }}}
324     }
325     //}}}
326     
327 }
328 //}}}
329 ?>