X-Git-Url: https://git.llucax.com/mecon/samurai.git/blobdiff_plain/d0ae155a8be2168110755cce58865068b34bfe91..325ae567c29fec68d2be78712b3d85b2dc41a9e8:/lib/SAMURAI/Usuario.php?ds=sidebyside diff --git a/lib/SAMURAI/Usuario.php b/lib/SAMURAI/Usuario.php index 6045156..df6c943 100644 --- a/lib/SAMURAI/Usuario.php +++ b/lib/SAMURAI/Usuario.php @@ -24,19 +24,21 @@ // $Rev$ // -#require_once 'PEAR.php'; - +require_once 'PEAR.php'; +require_once 'Perfil.php'; +require_once 'MECON/Usuario.php'; // +X2C Class 207 :SAMURAI_Usuario /** * Clase para el manejo de los usuarios. +@see \ref page_samurai_html_usuario * * @access public */ class SAMURAI_Usuario { /** - * Login del usuario en intranet.x2c: get set + * Login del usuario en intranet. * * @var string $login * @access protected @@ -60,20 +62,51 @@ class SAMURAI_Usuario { var $_nombre; /** - * Fecha de ultimo logueo del usuario a la intranet. + * Objeto Samurai_DB * - * @var date $fecha + * @var SAMURAI_DB $db * @access protected */ - var $_fecha; + var $_db; /** - * Objeto Samurai_DB + * Array con los identificadores de los perfiles asociados a un usuario * - * @var SAMURAI_DB $db + * @var array(int) $perfiles * @access protected */ - var $_db; + var $_perfiles; + + /** + * Identificador del sistema en el cual se esta trabajando. + * + * @var int $idSistema + * @access protected + */ + var $_idSistema; + + /** + * Gets Login. + * + * @return string + * @access public + */ + function getLogin() + { + return $this->_login; + } + /** + * Sets Login. + * + * @param string $login Login. + * + * @return void + * @access public + */ + function setLogin($login) + { + $this->_login = $login; + } /** * Gets Nrodoc. @@ -122,26 +155,26 @@ class SAMURAI_Usuario { } /** - * Gets Fecha. + * Gets Perfiles. * - * @return date + * @return array(int) * @access public */ - function getFecha() + function getPerfiles() { - return $this->_fecha; + return $this->_perfiles; } /** - * Sets Fecha. + * Sets Perfiles. * - * @param date $fecha Fecha. + * @param array(int) $perfiles Perfiles. * * @return void * @access public */ - function setFecha($fecha) + function setPerfiles($perfiles) { - $this->_fecha = $fecha; + $this->_perfiles = $perfiles; } // ~X2C @@ -152,35 +185,392 @@ class SAMURAI_Usuario { * * @param SAMURAI_DB &$db Objeto conexion. * @param string $login Login del usuario + * @param int $idSistema Identificador del sistema en el cual se esta trabajando * * @return void * @access public */ - function SAMURAI_Usuario(&$db, $login = null) // ~X2C + function SAMURAI_Usuario(&$db, $login = null, $idSistema = null) // ~X2C { + $this->_db = $db; + $this->setLogin($login); + $this->_idSistema = $idSistema; if (!is_null($login)) { - //BUSCAR INFO EN LA DB, - //SETEAR LAS VI + $tmp =& new MECON_Usuario($db, null, $login); + $this->setNrodoc($tmp->getDni()); + $this->setNombre($tmp->getNombre()); + $this->_obtenerDatosDb(); + } + } + // -X2C + + // +X2C Operation 365 + /** + * Devuleve un array con los login's de los usuarios asociados al sistema + * + * @param SAMURAI_DB &$db Base de Datos + * @param int $id_sistema Identificador del sistema + * + * @return array(string) + * @access protected + * @static + */ + function _getLoginUsuarios(&$db, $id_sistema = null) // ~X2C + { + //OBTENGO LOS LOGIN DE LA BASE + $consulta=''; + $rta = array(); + $tmp = array(); + $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true); + if ($id_sistema) { + $consulta.= $sql['obtener_datos_usuario2']; + $tmp[] = $id_sistema; + } + else { + $consulta = $sql['obtener_datos_usuario']; + } + $consulta.= $sql['obtener_datos_usuario4']; + $dbh = $db->prepare($consulta); + $res = $db->execute($dbh, $tmp); + while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) { + array_push($rta,$re['login']); + } + $res->free(); + return $rta; + } + // -X2C + + // +X2C Operation 366 + /** + * Devuelve un array asociativo en donde la clave es el login y el valor es el nombre del usuario + * + * @param SAMURAI_DB &$db Base de Datos + * @param int $id_sistema Identificador del sistema + * + * @return array() + * @access public + * @static + */ + function getArrayUsuarios(&$db, $id_sistema = null) // ~X2C + { + //FORECHEO LO QUE ME DEVUELVA GET USUARIOS + $rta = array (); + foreach (SAMURAI_Usuario::getUsuarios($db, $id_sistema) as $Usuario) { + $rta[$Usuario->getLogin()] = $Usuario->getNombre(); + } + return $rta; + } + // -X2C + + // +X2C Operation 367 + /** + * Devuelve el array de usuarios + * + * @param SAMURAI_DB &$db Base de Datos + * @param int $id_sistema Identificador del sistema + * + * @return array(Permiso) + * @access public + * @static + */ + function getUsuarios(&$db, $id_sistema = null) // ~X2C + { + $rta = array (); + foreach (SAMURAI_Usuario::_getLoginUsuarios($db, $id_sistema) as $login) { + $tmp = new SAMURAI_Usuario($db, $login, $id_sistema); + array_push($rta, $tmp); + } + return $rta; + } + // -X2C + + // +X2C Operation 368 + /** + * Obtiene de la base de datos la informacion del usuario + * + * @return void + * @access protected + */ + function _obtenerDatosDb() // ~X2C + { + $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true); + + $tmp = $sql['obtener_perfiles_usuario']; + $dbh = $this->_db->prepare($tmp); + $res = $this->_db->execute($dbh,array($this->getLogin(), + $this->_idSistema)); + $rta = array(); + + while ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) { + $tmp = new SAMURAI_Perfil($this->_db, $re['id_perfil'], + $this->_idSistema); + $rta[] = $tmp->getId(); + } + $this->setPerfiles($rta); + } + // -X2C + + // +X2C Operation 370 + /** + * Modifica la base de datos segun accion + * + * @param string $accion Indica la accion a realizar + * + * @return mixed + * @access public + */ + function guardarDatos($accion = 'grabar') // ~X2C + { + $accion = strtolower($accion); + switch ($accion) { + case 'grabar': + $res = $this->_grabarDb(); + break; + case 'modificar': + $res = $this->_modificarDb(); + break; + case 'eliminar': + $res = $this->_borrarDb(); + break; + } + return $res; + } + // -X2C + + // +X2C Operation 371 + /** + * Graba en base la relacion + * + * @return mixed + * @access protected + */ + function _grabarDb() // ~X2C + { + $datos = array ('login', 'id_perfil', 'id_sistema', 'responsable'); + $re = $this->_db->autoPrepare('samurai.perfil_sist_usuario', $datos, DB_AUTOQUERY_INSERT); + foreach ($this->getPerfiles() as $perfil) { + $datos = array ($this->getLogin(), + $perfil, + $this->_idSistema, + $_SESSION['usuario']); + $res = $this->_db->execute($re, $datos); + if (PEAR::isError($res)) { + return $res; + } + } + } + // -X2C + + // +X2C Operation 372 + /** + * Borra de la base la relacion + * + * @return mixed + * @access protected + */ + function _borrarDb() // ~X2C + { + $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true); + $tmp = $sql['borrar']; + $dbh = $this->_db->prepare($tmp); + $tmp = array ($this->getLogin(), $this->_idSistema); + return $this->_db->execute($dbh,$tmp); + } + // -X2C + + // +X2C Operation 373 + /** + * Actualiza los datos de la relacion + * + * @return mixed + * @access protected + */ + function _modificarDb() // ~X2C + { + $this->_borrarDb(); + $this->_grabarDb(); + } + // -X2C + + // +X2C Operation 374 + /** + * Verifica si el login actual es valido + * + * @return mixed + * @access public + */ + function verificarLogin() // ~X2C + { + $usu = new MECON_Usuario($this->_db); + $tmp = $usu->verificarLogin($this->getLogin()); + if ($tmp) { + if (PEAR::isError($tmp)) { + return $tmp; + } + else { + return true; + } } else { - //INICIALIZO LA VI - $this->_login = null; - $this->_nrodoc = null; - $this->_nombre = null; - $this->_fecha = null; + return new PEAR_Error('Usuario no reconocido.
Recuerde que éste debe haberse logueado previamente a Intranet'); } + } + // -X2C + // +X2C Operation 375 + /** + * Verifica si el login actual ya esta asociado en base. + * + * @return mixed + * @access public + */ + function verificarAsociacionExistente() // ~X2C + { + $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true); + $tmp = $sql['verificar_login2']; + $dbh = $this->_db->prepare($tmp); + $res = $this->_db->execute($dbh,array($this->getLogin(), + $this->_idSistema)); + $re = $res->fetchRow(DB_FETCHMODE_ASSOC); + if ($re['login']) { + return new PEAR_Error('El usuario seleccionado ya esta cargado. Modifique sus opciones.'); + } + return 1; } // -X2C + // +X2C Operation 386 + /** + * Metodo estatico que permite asociar un usuario con un perfil en un sistema determinado. + * + * @param DB &$db Conexion a la base de datos + * @param string $login Login del usuario que se quiere asociar + * @param int $id_perfil Identificador del perfil que se quiere asociar + * @param int $id_sistema identificador del sistema en el que se esta haciendo la asociacion + * @param int $responsable Login del usuario que esta haciendo los cambios + * + * @return mixed + * @access public + * @static + */ + function asociarPerfil(&$db, $login, $id_perfil, $id_sistema, $responsable) // ~X2C + { + $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true); + + $usu = new MECON_Usuario($db); + $tmp = $usu->verificarLogin($login); + if ($tmp) { + if (PEAR::isError($tmp)) { + return $tmp; + } + } + else { + return new PEAR_Error('Usuario no reconocido.
Recuerde que éste debe haberse logueado previamente a Intranet'); + } + + //Asocio el perfil con el usuario en perfil_sist_usuario + $datos = array ('login' => $login, + 'id_perfil' => $id_perfil, + 'id_sistema' => $id_sistema, + 'responsable' => $responsable); + $res = $db->autoExecute('samurai.perfil_sist_usuario', $datos, DB_AUTOQUERY_INSERT); + if (PEAR::isError($res)) { + return $res; + } + + return 1; + } + // -X2C + // +X2C Operation 396 + /** + * Devuelve la informacion completa del usuario. Sistemas a los que esta asignado, perfiles que tiene dentro de cada sistema y permisos. + * + * @return mixed + * @access public + */ + function informacionGeneral() // ~X2C + { + $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true); + $tmp = $sql['obtener_informacion']; + $dbh = $this->_db->prepare($tmp); + $res = $this->_db->execute($dbh,array($this->getLogin())); + if (PEAR::isError($res)) { + return $res; + } + + $rta = array(); + while ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) { + $rta[$re['id_sistema']]['nombre_sistema'] = $re['nombre_sistema']; + $rta[$re['id_sistema']]['perfiles'][$re['id_perfil']]['desc_perfil'] = + $re['desc_perfil']; + + $rta[$re['id_sistema']]['perfiles'][$re['id_perfil']]['permisos'][$re['id_permiso']] + [$re['observaciones']]['desc_permiso'] = $re['desc_permiso']; + + $rta[$re['id_sistema']]['perfiles'][$re['id_perfil']]['permisos'][$re['id_permiso']] + [$re['observaciones']]['observaciones'] = $re['observaciones']; + } + + return $rta; + } + // -X2C + // +X2C Operation 398 + /** + * Funcion que obtiene la lista de usuarios que tienen al menos un permiso en la intranet. + * + * @param DB &$db Conexion a la base de datos + * @param string $login Parte del login a filtrar + * + * @return mixed + * @access public + * @static + */ + function filtrarUsuarios(&$db, $login) // ~X2C + { + $sql = parse_ini_file(dirname(__FILE__) . '/Usuario/consultas.ini', true); + $sql = str_replace ('##?##', $login, $sql['obtener_datos_compartido']); + $db->setFetchMode(DB_FETCHMODE_ASSOC); + return $db->query($sql); + } + // -X2C + /** + * Metodo que devuelve los datos necesarios para listar usuarios. + * + * @param SAMURAI_DB &$db Base de Datos + * @param int $id_sistema Identificador del sistema + * + * @return mixed + * @access public + * @static + */ + function getUsuariosPager(&$db, $id_sistema = null) { + //@TODO REEMPLAZA A getUsuarios + if ($id_sistema) { + $sql = ' + SELECT DISTINCT u.login, u.nombre + FROM usuario.Usuario AS u, perfil_sist_usuario AS psu + WHERE u.login = psu.login + AND psu.id_sistema = '. $id_sistema .' + ORDER BY login + '; + } + else { + $sql = ' + SELECT login, nombre + FROM usuario.Usuario + ORDER BY login + '; + } + return $db->query ($sql); + + } } // -X2C Class :SAMURAI_Usuario - -?> \ No newline at end of file +?>