<?php if ( ! defined('BASEPATH')) exit('No esta permitido el acceso directo al script');
/*Mauricio García - garmauco@gmail.com, developer@3mas1r.com*/
class Login extends CI_Controller{
	function __construct(){
	    ini_set("allow_url_fopen", 1);
	    parent:: __construct();
        $this->load->library('recaptcha');
				$this->load->model('Usuario_model');// Crear una instancia de user_model
	}

    function index() {
        if( $this->session->userdata('isLoggedIn') ) {
            redirect('dashboard');
        } else {
            //redirect('Mantenimiento');
            $this->show_page(0,'index',NULL);
        }
    }


    function login_user() {
        $this->load->model('Usuario_model');

        // Obtiene el username y el password que llega por POST desde el formulario
        $documento = trim($this->input->post('documento'));
        $pass  =    trim($this->input->post('password'));

        // Catch the user's answer
        $captcha_answer = $this->input->post('g-recaptcha-response');

        // Verify user's answer
        $response = $this->recaptcha->verifyResponse($captcha_answer);

        // Processing ...
 				$response['success'] = TRUE;
        if ($response['success']) {
        //Confirma que los valores existen para username y password y aprobar y validar las credenciales del usuario
            if( $documento && $pass && $this->Usuario_model->validate_user($documento,$pass)) {
                    if ($this->Usuario_model->user_active($documento)){
                        // Si el usuario es valido, y esta activo redirigir a la vista de administracion
                            $this->Usuario_model->last_activity($documento);
                            $rol=$this->Usuario_model->usuario_rol($documento);
                            if ($rol >= 3)
                                redirect('dashboard');
                            else
                                redirect('dashboard');
                    }
                    else{
											  $this->session->sess_destroy();
                        $this->show_page(3,'index',NULL);
                    }
            } else {
                // de lo contrario mostrar la pantalla de inicio de sesión con un mensaje de error
                $this->show_page(1,'index',NULL);
            }
        }
        else{
            $this->show_page(2,'index',NULL);
        }
    }

    function show_page( $show_error = 0, $page='index', $data_array=NULL ) {

				$data = $data_array;
				$data['error'] = "";
        switch ($show_error) {
            case '1':
                $data['error'] = "Datos de Acceso Incorrectos";
                break;
            case '2':
                $data['error'] = "Fallo la Validacion recaptcha";
                break;
            case '3':
                $data['error'] = "Su Usuario se encuentra actualmente Inactivo, para m&aacute;s informaci&oacute;n comun&iacute;quese con el Administrador";
                break;
						case '4':
		            $data['error'] = "La dirección de Correo electrónico no es Valida!";/*Error de Recuperacion de Clave*/
		            break;
						case '5':
				         $data['error'] = "La dirección de Correo electrónico no se encuentra Registrada";/*Error de Recuperacion de Clave*/
				         break;
						case '6':
								$data['error'] = "El enlace para recuperar la contraseña ha expirado";
								break;
						case '7':
								$data['error'] = "El enlace para recuperar la contraseña no es valido";
								break;
						case '8':
								$data['error'] = "La contraseña debe tener mínimo  6 caracteres";
								break;
						case '9':
								$data['error'] = "La contraseña y Contraseña de Confirmación deben ser iguales";
								break;
						case '10':
								$data['error'] = "La contraseña debe ser diferente a la que usa actualmente";
								break;
            default:
                # code...
                break;
        }
        //$this->load->view('login/index',$data);
				$data['content'] = "login/".$page;
				$data['pagination'] = NULL;
				$data['title_page'] = NULL;
				$this->load->view("templates/layout-login", $data);
    }

    function logout() {
      $this->session->sess_destroy();
       redirect('/login');
    }


		function recover_pass(){
				$this->show_page(0,'recuperar_clave',NULL);
		}

		function reset_pass(){
				$email = trim($this->input->post('email'));
				if (isset($_POST['email']) && !empty($_POST['email'])){
						$this->form_validation->set_rules('email', 'Email', 'required|trim|min_length[6]|valid_email');
						if ($this->form_validation->run() == FALSE){
		    	   	$this->show_page(4,'recuperar_clave',NULL);//se recarga la misma pagina con el id del error de email no valido
		    		}
						else{
							$email_exists = $this->Usuario_model->email_exists($email);
							if (!empty($email_exists)){
								$id = $email_exists->id;
								$doc = $email_exists->documento;
								$name = $email_exists->nombre;
								$this->send_email($email, $id, $doc, $name);
								$this->show_page(0,'clave_enviada',NULL);
							}
							else{
								$this->show_page(5,'recuperar_clave',NULL);//se recarga la misma pagina con el id del error de email no existe
							}
						}
						//$this->load->library
/*
					$data['content'] = "login/clave_enviada";
					$data['pagination'] = NULL;
					$data['title_page'] = NULL;
					$this->load->view("templates/layout", $data);
					*/
				}
				else{
						$this->show_page(0,'recuperar_clave',NULL);
				}

		}



/*======================RECUPERACION CLAVE=============================*/

		function send_email($email, $id, $doc, $name){
			  $token = mt_rand(100000, 999999);//generamos el token que se almacenara en la base de datos y usara en la url
				$email_code = sha1($this->config->item('salt').$doc.$token);
				//Cargamos la librería email
        $this->load->library('email');
				/*
			 //Indicamos el protocolo a utilizar
        $config['protocol'] = 'smtp';
       //El servidor de correo que utilizaremos
        $config["smtp_host"] = 'ssl://smtp.gmail.com';
       //Nuestro usuario
        $config["smtp_user"] = 'cmgarciag@ut.edu.co';
       //Nuestra contraseña
        $config["smtp_pass"] = '81112954903';
       //El puerto que utilizará el servidor smtp
        $config["smtp_port"] = '465';
       //El juego de caracteres a utilizar
        $config['charset'] = 'iso-8859-1';
       //Permitimos que se puedan cortar palabras
        $config['wordwrap'] = TRUE;
       //El email debe ser valido
        $config['validate'] = TRUE;

			 //Establecemos esta configuración
        //$this->email->initialize($config);
				*/
				$this->email->set_mailtype('html');
				//Ponemos la dirección de correo que enviará el email y un nombre
        $this->email->from('soporte@3mas1r.com', 'Soporte');
				//destinatario
				$this->email->to($email);
				//Definimos el asunto del mensaje
        $this->email->subject('Recuperar Clave');
				$mensaje = '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body>';
				$mensaje .= '<p>Hola <strong>'.$name.'</strong></p>';
				$mensaje .= '<p> Recibimos una solicitud de cambio de contraseña. Para confirmar tu nueva contraseña haz click en el siguiente enlace: </p>';
				$mensaje .= '<a href="'.base_url().'login/reset_pass_form/'.$id.'/'.$email_code.'">'.base_url().'login/reset_pass_form/'.$id.'/'.$email_code.'</a>';
				$mensaje .= '<p>Este enlace solo sera valido por 2 horas</p>';
				$mensaje .= '<br><p>Gracias</p>';
				$mensaje .= '<br><p>Cordial Saludo,</p>';
				$mensaje .= '<p>Soporte</p>';
				$mensaje .= '</body></html>';

				$this->email->message($mensaje);
				//$this->email->send();

				$email_exists = $this->Usuario_model->update_date_recover_pass($id,$token);//actualiza la fecha de solicitud y genera el token

				if(!$this->email->send())
    		{
     			show_error($this->email->print_debugger());
		 			die();
    		}


		}

		function reset_pass_update(){
			$id = trim($this->input->post('id'));
			$email_code = trim($this->input->post('email_code'));
			$data['id'] = $id;
			$data['email_code'] = $email_code;
			$password = trim($this->input->post('password'));
			$password_conf = trim($this->input->post('password_conf'));
			$this->form_validation->set_rules('password', 'Contraseña', 'required|trim|min_length[6]');
			$this->form_validation->set_rules('password_conf', 'Confirmar Contraseña', 'required|trim|min_length[6]');
			if ($this->form_validation->run() == FALSE){
			 	$this->show_page(8,'actualizar_clave',$data);
			}
			else{
				if ($password != $password_conf){//las contraseñas no son iguales
						$this->show_page(9,'actualizar_clave',$data);
				}
				else{
					if ($this->Usuario_model->verify_current_password($id,$password)){//si la contraeña a actualizar es igual a la que esta actualmente
							$this->show_page(10,'actualizar_clave',$data);
					}
					else{
						$this->Usuario_model->password_update_reset($id,$password);
						$this->show_page(0,'clave_actualizada',NULL);
					}


				}
			}



		}

		function reset_pass_form($id,$email_code){
			if (isset($id, $email_code)){
				$data['id'] = trim($id);
				$data['email_code'] = $email_code;
				$verified =  $this->Usuario_model->verify_user_reset_pass($id);

				if (!empty($verified)){
					if ($email_code == sha1($this->config->item('salt').$verified->documento.$verified->token)){
						//comparamos la fecha del sistema con la fecha de solicitud almacenada en la db, y comparamos que sea menor a 2 horas
						if ((date('ymdHi') - $verified->fecha_cambio_pass) < 120){
							$this->show_page(0,'actualizar_clave',$data); // vamos al formuario de actualizar
						}
						else{
							$this->show_page(6,'recuperar_clave',NULL);// el token expiro
						}
					}
					else{
						$this->show_page(7,'recuperar_clave',NULL);//el token no es valido
					}

				}
				else{
					$this->show_page(0,'recuperar_clave',NULL);
				}
			}

		}


}
?>
