]> git.llucax.com Git - mecon/samurai.git/blob - lib/SAMURAI/HTML/Usuario.php
Se agrega la funcionalidad de migración de un sistema completo de un host a otro...
[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             //XXX OBTENGO LA ACCION {{{
198             switch (@$_REQUEST['accion']) {
199                 case 'm':
200                     $b_accion = 'Modificar';
201                     $accion = 'm';
202                     break;
203                 case 'e':
204                     $b_accion = 'Eliminar';
205                     $accion = 'e';
206                     break;
207                 default:
208                     $b_accion = 'Grabar';
209                     $accion = '';
210                     break;
211             }       
212             //}}}        
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);
217         // }}}
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();
222             }
223         //}}}
224         //AGREGO LOS DATOS A LAS TABLAS {{{
225             $imagen = new MECON_HTML_Image('/MECON/images/vinetas_flecha_doble.gif');
226             $row    = array ($imagen->toHtml().'&nbsp;<b>SISTEMA: '.$SISTEMA->getNombre().'</b>');
227             $TABLA->addRow($row,'align=left');    
228         //}}}
229         //AGREGO LOS ELEMENTOS DEL FORM {{{
230             if (@$PERFILES) {
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());
237                 }
238                 else {
239                     $FORM->addElement ('text'  , 'login' , 'Login@Organismo' , array( 'value' => $login , 'size' => '20'));
240                 }
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');
247             }
248             else {
249                 $ERROR = new MECON_HTML_Error('El sistema no posee perfiles.');
250             }
251         // }}}
252         //AGREO LAS REGLAS DE VALIDACION {{{
253             if (@$PERFILES) {
254                 if (@$validar) {
255                     $FORM->addRule ('login', 'Se debe ingresar el login del usuario', 'required');
256                 }
257                 $FORM->addRule ('perfiles', 'Se debe seleccionar al menos un perfil', 'required');
258             }
259         // }}}
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];
266                 
267                 $perfiles->setSelected($USUARIO->getPerfiles());
268                 
269                 //Modifico el valor del boton
270                 $aceptar->setValue('Modificar');
271                     
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');
276                     $FORM->freeze();
277                 }
278             }
279         // }}}
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'].'/');
286                 }
287                 // }}}
288                 else {
289                     $login2   =& $FORM->getElement  ('login'   ); 
290                     $perfiles =& $FORM->getElement  ('perfiles');
291                     $group    =& $FORM->getElement  ('botones' );
292                     $group    =& $group->getElements('aceptar' );
293                     $aceptar  =& $group[0];
294                     $res = '';
295
296                     if ($login) {
297                         $login3 = $login2->_text;
298                         $nombre   =& $FORM->getElement  ('nombre'  );
299                     }
300                     else {
301                         $login3 = $login2->getValue();
302                     }
303                     $USUARIO->setLogin($login3);
304                     $res  = $USUARIO->verificarLogin();
305                     if ($aceptar->getValue() == 'Grabar') {
306                         $res2 = $USUARIO->verificarAsociacionExistente();
307                     }
308                     if (@PEAR::isError($res)) {
309                         $ERROR = new MECON_HTML_Error($res->getMessage());
310                     }
311                     elseif (@PEAR::isError($res2)) {
312                         $ERROR =new MECON_HTML_Error($res2->getMessage());
313                     }
314                     else {
315                         $USUARIO->setPerfiles($perfiles->getSelected());
316
317                         $res = $USUARIO->guardarDatos($aceptar->getValue());
318
319                         if (PEAR::isError($res)) {
320                             $ERROR = new MECON_HTML_Error($res->getMessage());
321                             if ($aceptar->getValue() == 'Eliminar') {
322                                 $FORM->freeze();
323                             }
324                         }
325                         else {
326 //                            $FORM->removeElement();
327                             $FORM->freeze();
328                             header('Location: '.$_SERVER['PHP_SELF'].'/');
329                         }
330                     }
331                 }
332             }
333         // }}}
334         //DIBUJO LA PAGINA {{{
335             $MARCO->addBodyContent($TABLA);
336             if (isset($ERROR)) {
337                 $MARCO->addBodyContent($ERROR);
338             }
339             $MARCO->addBodyContent($FORM);
340         // }}}
341     }
342     //}}}
343     
344 }
345 //}}}
346 ?>