<?php
class UsersModel extends ModelBase{

    public $tableName = 'sis_user';
    public $id = array('key'=>'iduser','value'=>'');

    public function addItem($datos){
        $this->setFieldArray($datos);
        list($resultado,$id,$mensaje) = $this->insert();
        return array ($resultado,$id,$mensaje);
    }

    public function DeleteItem(){
        list($resultado,$mensaje) = $this->delete();
        return array ($resultado,$mensaje);
    }

    public function UpdateItem($datos){
        $this->setFieldArray($datos);
        list($resultado,$mensaje) = $this->update();
        return array ($resultado,$mensaje);
    }
    
    public function dolist($datos = array("inicio" => 0, "tamanio" => 5)){
        $query = "SELECT * FROM sis_user WHERE usertype = 1";
        $consulta = $this->db->prepare($query);
        $consulta->execute();
        $num_filas = $consulta->rowCount();
        //getPager($datos = array("total" => 0, "inicio" => 0, "pagina" => 5)//uso de la variable arreglo.
        $parametros = array("total" => $num_filas, "inicio" => $datos['inicio'], "pagina" =>  $datos['tamanio']);
        list($paginas,$navegador) = $this->getPager($parametros);

        //realizamos una consulta paginada
        $consulta = $this->db->prepare($query.' LIMIT '.$datos['inicio'].' , '.$datos['tamanio'].' ');
        $consulta->execute();

        return array($consulta,$paginas,$navegador);
    }
    
    public function validarUsuario($username,$password){
        $str_query = ' SELECT sis_user.* FROM sis_user WHERE username = "'.$username.'"'
                    .' AND password = "'.md5($password).'" AND (state = "1"  OR state = "4"  OR state = "5") AND usertype = 1 ';
        $consulta = $this->db->prepare($str_query);
        $consulta->execute();
        
        return $consulta;
    }
	
    public function validarAdmin($username,$password){
        $str_query = 'SELECT * FROM sis_user WHERE username = "'.$username
                    .'" AND password = "'.md5($password).'" AND state = "1" AND usertype = 2 ';
        $consulta = $this->db->prepare($str_query);
        $consulta->execute();
        
        return $consulta;
    }
    
    public function validateUsers($username,$password){
        $str_query = 'SELECT * FROM '.$this->tableName.' WHERE username = "'.$username
                    .'" AND password = "'.md5($password).'" AND usertype >= 1 ';
        $consulta = $this->db->prepare($str_query);
        $consulta->execute();
        
        return $consulta;
    }
	
    public function obtenerUsuarioxId($id){
        //realizamos la consulta de usuario por id
        $consulta = $this->db->prepare('SELECT sis_user.* FROM sis_user WHERE iduser = "'.$id.'" ');
        $consulta->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $consulta;

    }
	
    public function obtenerUsuarioxUsername($username){
        $str_query = 'SELECT * FROM '.$this->tableName.' WHERE username = "'.$username.'" ';
        $consulta = $this->db->prepare($str_query);
        $consulta->execute();
        return $consulta;
    }
	
    public function obtenerUsuarioxUsernameMD5($username){
        //realizamos la consulta de usuario por id
        $consulta = $this->db->prepare('SELECT sis_user.* FROM sis_user WHERE MD5(sis_user.username) = "'.$username.'" ');
        $consulta->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $consulta;
    }
	
    public function bloquearUsuario($iduser){
        //realizamos la consulta de usuario por id
        $consulta = $this->db->prepare('UPDATE  sis_user SET  state =  "2" WHERE  iduser = '.$iduser.' ');
        $consulta->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $consulta;
    }
	
    public function setUserSession($datos){
        //realizamos la consulta de usuario por id
        $consulta = $this->db->prepare(' INSERT INTO  sis_session ( idsession , iduser , client_ip , date_session, date_last_activity, state )  VALUES ( "" ,  "'.$datos['iduser'].'",  "'.$datos['client_ip'].'",  "'.$datos['date_session'].'" ,  "'.$datos['date_last_activity'].'" ,  "'.$datos['state'].'" ) ');
        $consulta->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $consulta;
    }
	
    public function obtenerEstadoUsuario($username){
        $str_query = 'SELECT * FROM '.$this->tableName.' WHERE username = "'.$username.'"';
        $consulta = $this->db->prepare($str_query);
        $consulta->execute();
        
        $datauser = $consulta->fetch();
        $estado = "";

        if(isset($datauser['state'])){
            switch($datauser['state']){
                case 1:
                        $state = "ACTIVE";
                break;
                case 2:
                        $state = "LOCKED";
                break;
                case 3:
                        $state = "DELETED";
                break;
                case 4:
                        $state = "FLOGIN";
                break;
                case 5:
                        $state = "RESET";
                break;
            }
            return $state;
        }else{
            return '';
        }
    }
		
    public function registrarLogIngreso($id_usu){
        $consulta = $this->db->prepare(' INSERT INTO log_login ( id_log , id_usu , fec_log ) VALUES ( "" ,  "'.$id_usu.'",  "'.date("Ymd H:i:s", time()).'") ');
        $consulta->execute();
        //devolvemos ....
        return $consulta;
    }
	
    public function obtenerListaUsuariosIngresos($where=""){
        //realizamos la consulta de todos los items
        $consulta = $this->db->prepare('SELECT tb_usuarios.* , tb_roles.des_rol AS "rol", count(log_login.id_usu) as "ingresos",
max(log_login.fec_log) as "ultimo_ingreso" FROM tb_usuarios LEFT JOIN tb_roles ON tb_usuarios.id_rol = tb_roles.id_rol LEFT JOIN log_login ON tb_usuarios.id_usu = log_login.id_usu '.$where.' GROUP BY tb_usuarios.id_usu');
        $consulta->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $consulta;
    }
	
    public function setNewPassword($iduser,$password){
            //realizamos la consulta de usuario por id
            $consulta = $this->db->prepare('UPDATE  sis_user SET  password =  "'.md5($password).'" WHERE  iduser = '.$iduser.' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return $consulta;

    }

    public function setInactive($iduser){
            //realizamos la consulta de usuario por id
            $consulta = $this->db->prepare('UPDATE  sis_user SET  state =  "2" WHERE  iduser = '.$iduser.' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return $consulta;

    }

    public function setActive($iduser){
            //realizamos la consulta de usuario por id
            $consulta = $this->db->prepare('UPDATE  sis_user SET  state =  "1" WHERE  iduser = '.$iduser.' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return $consulta;

    }
	
    public function getStringUsers(){
        //realizamos la consulta de todos los items
        $query = $this->db->prepare('SELECT u.*  FROM sis_user AS u ');
        $query->execute();
        //Se recibe el arreglo completo de usuarios.
        $arregloUsuarios = $query->fetchAll();
        $j = count($arregloUsuarios);
        $cadena = '';
        for($i=0; $j>$i;$i++){
                $arregloUsuario = $arregloUsuarios[$i];
                if(($j-1) == $i){
                        $cadena .= $arregloUsuario['firstname'].' '.$arregloUsuario['lastname'].' [ '.$arregloUsuario['username'].' ]';
                }else{
                        $cadena .= $arregloUsuario['firstname'].' '.$arregloUsuario['lastname'].' [ '.$arregloUsuario['username'].' ] , ';
                }

        }

        return $cadena;
    }



    public function getStringUser($iduser){
            //realizamos la consulta de todos los items
            $query = $this->db->prepare('SELECT u.*  FROM sis_user AS u WHERE u.iduser = "'.$iduser.'" ');
            $query->execute();
            //Se recibe el arreglo completo de usuarios.
            $datosUsuarios = $query->fetch();
            $cadena = '';
            $cadena .= $datosUsuarios['firstname'].' '.$datosUsuarios['lastname'].' [ '.$datosUsuarios['username'].' ]';
            return $cadena;
    }

    public function obtenerListaRoles(){
        //realizamos la consulta de todos los items
        $consulta = $this->db->prepare('SELECT tb_roles.*  FROM  tb_roles ');
        $consulta->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $consulta;
    }
	
    public function getUsers($datos = array("inicio" => 0, "tamanio" => 5)){
        //realizamos la consulta de todos los items
        $query = "SELECT * FROM sis_user WHERE usertype = 1";
        $consulta = $this->db->prepare($query);
        $consulta->execute();
        $num_filas = $consulta->rowCount();
        //getPager($datos = array("total" => 0, "inicio" => 0, "pagina" => 5)//uso de la variable arreglo.
        $parametros = array("total" => $num_filas, "inicio" => $datos['inicio'], "pagina" =>  $datos['tamanio']);
        list($paginas,$navegador) = $this->getPager($parametros);


        //realizamos una consulta paginada
        $consulta = $this->db->prepare($query.' LIMIT '.$datos['inicio'].' , '.$datos['tamanio'].' ');
        $consulta->execute();

        //devolvemos la coleccion para que la vista la presente.
        return array($consulta,$paginas,$navegador);
    }
	
    function addUser($username, $password, $data_user){
        $query = "INSERT INTO sis_user( username, password, date_create, firstname, lastname, email,"
                ." photo, usertype, state ) VALUES ( '$username' , md5('$password'), '".date("Y-m-d H:i:s")."',"
                ." '".$data_user['firstname']."', '".$data_user['lastname']."', '".$data_user['email']."',"
                ." '".$data_user['urlphoto']."', 1, 4)";
        $result = $this->db->prepare($query);
        $result->execute();
        return $result;
    }

    function editUser($user){
            $query = "SELECT * FROM sis_user WHERE iduser = '$user'";
            $result = $this->db->prepare($query);
            $result->execute();
            return $result;
    }

    function updateUser($user, $firstname, $lastname, $state){
            $query = "UPDATE sis_user SET firstname = '$firstname', lastname = '$lastname'"
                    .", state = $state WHERE iduser = $user";
            $result = $this->db->prepare($query);
            $result->execute();
            return $result;
    }

    function delUser($user){
            $query = "UPDATE sis_user SET state = 3 WHERE iduser = $user";
            $result = $this->db->prepare($query);
            $result->execute();
            return $result;
    }

    function searchUserbyUName($username){
        $query = "SELECT * FROM sis_user WHERE username = '$username'";
        $result = $this->db->prepare($query);
        $result->execute();
        return $result;
    }

    public function getPasswd($iduser){
        $query = "SELECT password FROM sis_user WHERE iduser = $iduser";
        $result = $this->db->prepare($query);
        $result->execute();
        return $result;
    }

    public function getAllUsers(){
        $query = "SELECT username FROM sis_user WHERE usertype = 1";
        $result = $this->db->prepare($query);
        $result->execute();
        return $result;
    }
}
?>
