2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
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: Tue May 27 11:20:04 2003
17 // | Author: Martin Marrese - Myrna Degano <mmarre@mecon.gov.ar - mdegan@mecon.gov.ar>
18 // +----------------------------------------------------------------------+
27 require_once 'PEAR.php';
28 require_once 'Perfil.php';
29 require_once 'MECON/Usuario.php';
32 // +X2C Class 207 :SAMURAI_Usuario
34 * Clase para el manejo de los usuarios.
35 @see \ref page_samurai_html_usuario
39 class SAMURAI_Usuario {
41 * Login del usuario en intranet.
49 * Numero de documento del usuario
73 * Array con los identificadores de los perfiles asociados a un usuario
75 * @var array(int) $perfiles
81 * Identificador del sistema en el cual se esta trabajando.
101 * @param string $login Login.
106 function setLogin($login)
108 $this->_login = $login;
119 return $this->_nrodoc;
124 * @param int $nrodoc Nrodoc.
129 function setNrodoc($nrodoc)
131 $this->_nrodoc = $nrodoc;
142 return $this->_nombre;
147 * @param string $nombre Nombre.
152 function setNombre($nombre)
154 $this->_nombre = $nombre;
163 function getPerfiles()
165 return $this->_perfiles;
170 * @param array(int) $perfiles Perfiles.
175 function setPerfiles($perfiles)
177 $this->_perfiles = $perfiles;
182 // +X2C Operation 216
184 * Constructor.Recibe como parametro opcional el login del usuario. y busca en la base la informacion referida a el.
186 * @param SAMURAI_DB &$db Objeto conexion.
187 * @param string $login Login del usuario
188 * @param int $idSistema Identificador del sistema en el cual se esta trabajando
193 function SAMURAI_Usuario(&$db, $login = null, $idSistema = null) // ~X2C
196 $this->setLogin($login);
197 $this->_idSistema = $idSistema;
198 if (!is_null($login)) {
199 $tmp =& new MECON_Usuario($db, null, $login);
200 $this->setNrodoc($tmp->getDni());
201 $this->setNombre($tmp->getNombre());
202 $this->_obtenerDatosDb();
207 // +X2C Operation 365
209 * Devuleve un array con los login's de los usuarios asociados al sistema
211 * @param SAMURAI_DB &$db Base de Datos
212 * @param int $id_sistema Identificador del sistema
214 * @return array(string)
218 function _getLoginUsuarios(&$db, $id_sistema = null) // ~X2C
220 //OBTENGO LOS LOGIN DE LA BASE
224 $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true);
226 $consulta.= $sql['obtener_datos_usuario2'];
227 $tmp[] = $id_sistema;
230 $consulta = $sql['obtener_datos_usuario'];
232 $consulta.= $sql['obtener_datos_usuario4'];
233 $dbh = $db->prepare($consulta);
234 $res = $db->execute($dbh, $tmp);
235 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
236 array_push($rta,$re['login']);
243 // +X2C Operation 366
245 * Devuelve un array asociativo en donde la clave es el login y el valor es el nombre del usuario
247 * @param SAMURAI_DB &$db Base de Datos
248 * @param int $id_sistema Identificador del sistema
254 function getArrayUsuarios(&$db, $id_sistema = null) // ~X2C
256 //FORECHEO LO QUE ME DEVUELVA GET USUARIOS
258 foreach (SAMURAI_Usuario::getUsuarios($db, $id_sistema) as $Usuario) {
259 $rta[$Usuario->getLogin()] = $Usuario->getNombre();
265 // +X2C Operation 367
267 * Devuelve el array de usuarios
269 * @param SAMURAI_DB &$db Base de Datos
270 * @param int $id_sistema Identificador del sistema
272 * @return array(Permiso)
276 function getUsuarios(&$db, $id_sistema = null) // ~X2C
279 foreach (SAMURAI_Usuario::_getLoginUsuarios($db, $id_sistema) as $login) {
280 $tmp = new SAMURAI_Usuario($db, $login, $id_sistema);
281 array_push($rta, $tmp);
287 // +X2C Operation 368
289 * Obtiene de la base de datos la informacion del usuario
294 function _obtenerDatosDb() // ~X2C
296 $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true);
298 $tmp = $sql['obtener_perfiles_usuario'];
299 $dbh = $this->_db->prepare($tmp);
300 $res = $this->_db->execute($dbh,array($this->getLogin(),
304 while ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
305 $tmp = new SAMURAI_Perfil($this->_db, $re['id_perfil'],
307 $rta[] = $tmp->getId();
309 $this->setPerfiles($rta);
313 // +X2C Operation 370
315 * Modifica la base de datos segun accion
317 * @param string $accion Indica la accion a realizar
322 function guardarDatos($accion = 'grabar') // ~X2C
324 $accion = strtolower($accion);
327 $res = $this->_grabarDb();
330 $res = $this->_modificarDb();
333 $res = $this->_borrarDb();
340 // +X2C Operation 371
342 * Graba en base la relacion
347 function _grabarDb() // ~X2C
349 $datos = array ('login', 'id_perfil', 'id_sistema', 'responsable');
350 $re = $this->_db->autoPrepare('samurai.perfil_sist_usuario', $datos, DB_AUTOQUERY_INSERT);
351 foreach ($this->getPerfiles() as $perfil) {
352 $datos = array ($this->getLogin(),
355 $_SESSION['usuario']);
356 $res = $this->_db->execute($re, $datos);
357 if (PEAR::isError($res)) {
364 // +X2C Operation 372
366 * Borra de la base la relacion
371 function _borrarDb() // ~X2C
373 $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true);
374 $tmp = $sql['borrar'];
375 $dbh = $this->_db->prepare($tmp);
376 $tmp = array ($this->getLogin(), $this->_idSistema);
377 return $this->_db->execute($dbh,$tmp);
381 // +X2C Operation 373
383 * Actualiza los datos de la relacion
388 function _modificarDb() // ~X2C
395 // +X2C Operation 374
397 * Verifica si el login actual es valido
402 function verificarLogin() // ~X2C
404 $usu = new MECON_Usuario($this->_db);
405 $tmp = $usu->verificarLogin($this->getLogin());
407 if (PEAR::isError($tmp)) {
415 return new PEAR_Error('Usuario no reconocido.<br>Recuerde que éste debe haberse logueado previamente a Intranet');
420 // +X2C Operation 375
422 * Verifica si el login actual ya esta asociado en base.
427 function verificarAsociacionExistente() // ~X2C
429 $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true);
430 $tmp = $sql['verificar_login2'];
431 $dbh = $this->_db->prepare($tmp);
432 $res = $this->_db->execute($dbh,array($this->getLogin(),
434 $re = $res->fetchRow(DB_FETCHMODE_ASSOC);
436 return new PEAR_Error('El usuario seleccionado ya esta cargado. Modifique sus opciones.');
442 // +X2C Operation 386
444 * Metodo estatico que permite asociar un usuario con un perfil en un sistema determinado.
446 * @param DB &$db Conexion a la base de datos
447 * @param string $login Login del usuario que se quiere asociar
448 * @param int $id_perfil Identificador del perfil que se quiere asociar
449 * @param int $id_sistema identificador del sistema en el que se esta haciendo la asociacion
450 * @param int $responsable Login del usuario que esta haciendo los cambios
456 function asociarPerfil(&$db, $login, $id_perfil, $id_sistema, $responsable) // ~X2C
458 $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true);
460 $usu = new MECON_Usuario($db);
461 $tmp = $usu->verificarLogin($login);
463 if (PEAR::isError($tmp)) {
468 return new PEAR_Error('Usuario no reconocido.<br>Recuerde que éste debe haberse logueado previamente a Intranet');
471 //Asocio el perfil con el usuario en perfil_sist_usuario
472 $datos = array ('login' => $login,
473 'id_perfil' => $id_perfil,
474 'id_sistema' => $id_sistema,
475 'responsable' => $responsable);
477 $res = $db->autoExecute('samurai.perfil_sist_usuario', $datos, DB_AUTOQUERY_INSERT);
478 if (PEAR::isError($res)) {
486 // +X2C Operation 396
488 * Devuelve la informacion completa del usuario. Sistemas a los que esta asignado, perfiles que tiene dentro de cada sistema y permisos.
493 function informacionGeneral() // ~X2C
495 $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true);
496 $tmp = $sql['obtener_informacion'];
497 $dbh = $this->_db->prepare($tmp);
498 $res = $this->_db->execute($dbh,array($this->getLogin()));
500 if (PEAR::isError($res)) {
506 while ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
507 $rta[$re['id_sistema']]['nombre_sistema'] = $re['nombre_sistema'];
508 $rta[$re['id_sistema']]['perfiles'][$re['id_perfil']]['desc_perfil'] =
511 $rta[$re['id_sistema']]['perfiles'][$re['id_perfil']]['permisos'][$re['id_permiso']]
512 [$re['observaciones']]['desc_permiso'] = $re['desc_permiso'];
514 $rta[$re['id_sistema']]['perfiles'][$re['id_perfil']]['permisos'][$re['id_permiso']]
515 [$re['observaciones']]['observaciones'] = $re['observaciones'];
522 // +X2C Operation 398
524 * Funcion que obtiene la lista de usuarios que tienen al menos un permiso en la intranet.
526 * @param DB &$db Conexion a la base de datos
527 * @param string $login Parte del login a filtrar
533 function filtrarUsuarios(&$db, $login) // ~X2C
535 $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true);
536 $sql = str_replace ('##?##', $login, $sql['obtener_datos_compartido']);
537 $db->setFetchMode(DB_FETCHMODE_ASSOC);
538 return $db->query($sql);
543 * Metodo que devuelve los datos necesarios para listar usuarios.
545 * @param SAMURAI_DB &$db Base de Datos
546 * @param int $id_sistema Identificador del sistema
547 * @param string $nombre Filtro de nombre
553 function getUsuariosPager(&$db, $id_sistema = null, $nombre = null) {
556 $nombre = ' AND u.nombre LIKE '. $db->quoteSmart("%$nombre%");
560 SELECT DISTINCT u.login, u.nombre
561 FROM usuario.Usuario AS u, perfil_sist_usuario AS psu
562 WHERE u.login = psu.login
563 AND psu.id_sistema = '. $id_sistema
570 FROM usuario.Usuario'.
575 return $db->query ($sql);
579 } // -X2C Class :SAMURAI_Usuario