]> git.llucax.com Git - mecon/samurai.git/blobdiff - lib/SAMURAI/Usuario.php
BugFix.
[mecon/samurai.git] / lib / SAMURAI / Usuario.php
index 60451560cf1768865e35c91d82e9dd401a5c1cce..df6c943ffb821d9db61f2dd1f36491e4cd601b1e 100644 (file)
 // $Rev$
 //
 
 // $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.
 
 
 // +X2C Class 207 :SAMURAI_Usuario
 /**
  * Clase para el manejo de los usuarios.
+@see \ref page_samurai_html_usuario
  *
  * @access public
  */
 class SAMURAI_Usuario {
     /**
  *
  * @access public
  */
 class SAMURAI_Usuario {
     /**
-     * Login del usuario en intranet.x2c: get set
+     * Login del usuario en intranet.
      *
      * @var    string $login
      * @access protected
      *
      * @var    string $login
      * @access protected
@@ -60,20 +62,51 @@ class SAMURAI_Usuario {
     var $_nombre;
 
     /**
     var $_nombre;
 
     /**
-     * Fecha de ultimo logueo del usuario a la intranet.
+     * Objeto Samurai_DB
      *
      *
-     * @var    date $fecha
+     * @var    SAMURAI_DB $db
      * @access protected
      */
      * @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
      */
      * @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.
 
     /**
      * Gets Nrodoc.
@@ -122,26 +155,26 @@ class SAMURAI_Usuario {
     }
 
     /**
     }
 
     /**
-     * Gets Fecha.
+     * Gets Perfiles.
      *
      *
-     * @return date
+     * @return array(int)
      * @access public
      */
      * @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
      */
      *
      * @return void
      * @access public
      */
-    function setFecha($fecha)
+    function setPerfiles($perfiles)
     {
     {
-        $this->_fecha = $fecha;
+        $this->_perfiles = $perfiles;
     }
 
     // ~X2C
     }
 
     // ~X2C
@@ -152,35 +185,392 @@ class SAMURAI_Usuario {
      *
      * @param  SAMURAI_DB &$db Objeto conexion.
      * @param  string $login Login del 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
      */
      *
      * @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)) {
         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 {
         }
         else {
-            //INICIALIZO LA VI
-            $this->_login   = null;
-            $this->_nrodoc  = null;
-            $this->_nombre  = null; 
-            $this->_fecha   = null;
+            return new PEAR_Error('Usuario no reconocido.<br>Recuerde que &eacute;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
 
+    // +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.<br>Recuerde que &eacute;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
 
 } // -X2C Class :SAMURAI_Usuario
-
-?>
\ No newline at end of file
+?>