<?php
class main extends CI_Controller
{
function __construct(){
	parent::__construct();
	$this->lang->load('eap');
	$this->lang->load('sec');
}


public function blanco($page='success') {
	$data['content']=$page;
	$this->load->view('v_content',$data);
}


public function index()
{

if ($this->config->item('appl_status') == 'MANTENIMIENTO') { redirect('main/mantenimiento'); }
if($this->session->userdata('usuario_logueado')){
	$this->members();
}else{
	 $this->login();
}}



public function login()
  {
	if ($this->config->item('appl_status') == 'MANTENIMIENTO') { redirect('main/mantenimiento'); }
	if ($this->check_banned()) { redirect('main/banned'); }
	if($this->session->userdata('usuario_logueado')){
		// Redireccion por Perfil
		$this->login_redireccionar_perfil();
    }else{
		$this->load->view('login');
	}
  }


public function check_banned() {
	$this->load->library('sec_validation');
	return $this->sec_validation->is_max_login_attempts_exceeded('');
}

public function banned() {
	$data['error'] = $this->lang->line('sec_incorrect_banned');
	$data['ip_address'] = $this->input->ip_address();
	$this->load->view('banned',$data);
}

public function mantenimiento() {
	$this->load->view('mantenimiento');
}

public function members()
  {
   if($this->session->userdata('usuario_logueado')){
		// Redireccion por Perfil
		$this->login_redireccionar_perfil();
    }else{
		redirect('main/restricted');
	  }
  }

public function restricted()
   {
       $this->load->view('restricted');
   }

public function login_validation()
   {
	// Chequea si ya está beneada
	if ($this->check_banned()) { redirect('main/banned'); }

   $this->load->library('form_validation');
   $this->load->library('sec_validation');

   $this->form_validation->set_rules('username','Usuario','required|trim|xss_clean'); //|callback_validar_usuario');
   $this->form_validation->set_rules('password','Contraseña','required');

   if($this->form_validation->run()){

		if ($this->sec_validation->login($this->form_validation->set_value('username'),$this->form_validation->set_value('password'))){
			// Chequea vencimiento de Password y Solicitud de Cambio de Password
			if (($this->session->userdata('usuario_cambio_password') == 1) || ($this->session->userdata('usuario_fecha_vencimiento_password')<= date("Y-m-d H:i:s")))
			{
				// Se pide cambio de Password al usuario
				if ($this->session->userdata('usuario_cambio_password')==1){
					$data['message'] = $this->lang->line('sec_message_password_change');
					}
				if ($this->session->userdata('usuario_fecha_vencimiento_password')<= date("Y-m-d H:i:s")){
					$data['message'] = $this->lang->line('sec_message_password_expired');
					}
				$this->load->view('login_cambio_clave',$data);
			} else {
				// Redireccion por Perfil
				$this->login_redireccionar_perfil();
			}

		} else {
			$errors = $this->sec_validation->get_error_message();
			foreach ($errors as $k => $v) {
			$data['errors'][$k] = $this->lang->line($v);
			}
			$this->load->view('login',$data);
		}

   }else{
	   //redirect('main/login');
	$this->load->view('login');
   }
 }

function login_redireccionar_perfil()
{
   if(!$this->session->userdata('usuario_logueado')){	redirect('main/login');	}

   // Direccionar donde Corresponda.
	$url = '';
	if (strpos($this->session->userdata('usuario_tipos_id'),'4') !== false) {$url= 'panel/lista';}
	if (strpos($this->session->userdata('usuario_tipos_id'),'1') !== false && $url == '') {$url= 'panel/lista';}
	if (strpos($this->session->userdata('usuario_tipos_id'),'2') !== false && $url == '') {$url= $this->config->item('base_old_url').'list_2.php';}
	if (strpos($this->session->userdata('usuario_tipos_id'),'3') !== false && $url == '') {$url= $this->config->item('base_old_url').'list_3.php';}
	if ($url=='') {$url='panel/lista';}

	redirect($url);


}



public function login_cambio_clave()
   {
   if(!$this->session->userdata('usuario_logueado')){	redirect('main/login');	}

   if(isset($_POST["cancelar_submit"])) {
		$this->session->set_flashdata('message', 'Se canceló el cambio de Contraseña.');
		if (($this->session->userdata('usuario_cambio_password') == 1) || ($this->session->userdata('usuario_fecha_vencimiento_password')<= date("Y-m-d H:i:s")))
			{
				redirect('main/logout');
			}else{
				// Redireccion por Perfil
				$this->login_redireccionar_perfil();
			}

	  }

   $this->load->library('form_validation');
   $this->form_validation->set_rules('password_ant','Contraseña Anterior','trim|callback_validar_clave_anterior');
   $this->form_validation->set_rules('password_nueva','Contraseña Nueva','trim|min_length[8]|matches[password_conf]|callback_validar_cambio_clave');
   $this->form_validation->set_rules('password_conf','Confirmar Contraseña','trim|min_length[8]');

   if($this->form_validation->run()){

		// Guardar Cambio Clave

		if ($this->sec_validation->change_password($this->session->userdata('usuario_id'),$this->session->userdata('usuario_username'),$this->form_validation->set_value('password_nueva'))){

			$this->session->set_flashdata('message', 'Se grabó correctamente la nueva Contraseña');
			$this->login_redireccionar_perfil();

		}


	} else {
		$data['message'] = "";
		if ($this->session->userdata('usuario_cambio_password')==1){$data['message'] = 'Su usuario requiere cambio de Contraseña';}
		if ($this->session->userdata('usuario_fecha_vencimiento_password')<= date("Y-m-d H:i:s")){$data['message'] = 'Su Contraseña ha expirado, por favor cambiela para continuar.';}

		$this->load->view('login_cambio_clave',$data);

	}
   }

function validar_clave_anterior($clave)
{
   $this->load->library('sec_validation');

   if ($this->sec_validation->login_check_password($this->session->userdata('usuario_username'),$clave)) {
     return TRUE;
   }
   $this->form_validation->set_message('validar_clave_anterior', 'La contraseña Anterior no corresponde.');
   return FALSE;
}


function validar_cambio_clave($clave)
{
   if ($clave==$this->form_validation->set_value('password_ant')) {
		$this->form_validation->set_message('validar_cambio_clave', 'La contraseña debe ser diferente a la anterior.');
		return FALSE;
   }

   if (!(preg_match('#[0-9]#', $clave) && preg_match('#[a-z]#', $clave) && preg_match('#[A-Z]#', $clave))) {
     	$this->form_validation->set_message('validar_cambio_clave', 'La contraseña debe contener Números, Letras Mayúsculas y Minúsuclas.');
   		return FALSE;
   }

   return TRUE;
}

public function logout()
	{
    $this->load->library('sec_validation');
	$this->sec_validation->logout();
	// $this->_show_message($this->lang->line('sec_message_logged_out'));

	// Eliminar Session para Sitio Anterior
	session_start();
	session_unset();
	session_destroy();

	redirect('main/login');
	}


/**
 * Mostrar Mensaje
 *
 * @param	string
 * @return	void
 */
function _show_message($message)
{
	$this->session->set_flashdata('message', $message);

}


public function validar_usuario()
 {
  $this->load->model('model_users');
   if($this->model_users->can_log_in()){

     return true;
   }else{
   $this->form_validation->set_message('validar_usuario','Usuario o Contraseña Incorrecta');
   return false;
   }
 }

public function cambiar_idioma($idioma = null) {
	echo "Default==>".$this->config->item('language');
	echo "Usuario==>".$this->session->userdata('usuario_lenguaje');
}


/*
public function pass_init()
{
   $this->load->model('model_users');
   if($this->model_users->pass_init(false)){
	   echo "<br>Todos los usuarios";
   }
}
*/


}



?>
