<?php
class Perfiles extends MY_Controller
{
	
function __construct(){
	parent::__construct();
	$this->load->model('profiles_model');
}

function index(){
	$this->lista();
	}

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

function check_access () {
	$this->load->library('sec_validation');	
	$result = $this->sec_validation->login_check_access($this->session->userdata('usuario_id'),$this->router->fetch_class(),$this->router->fetch_method());
	if (!$result) {
	$this->session->set_flashdata('message_error', 'Acceso Restringido=>'.$this->router->fetch_class()."/".$this->router->fetch_method());
	redirect('usuarios/acceso_restringido');
	}
}
	
function lista(){
	// Valida Acceso
	$this->check_access();
	
	$data['perfiles'] = $this->profiles_model->get_profiles();	
	$data['content']='admin/perfiles/lista';
	$this->load->view('v_content',$data);
	
	}


	
function ver($id= null){
	// Valida Acceso
	$this->check_access();

	// Sin parametro 
	if (is_null($id)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_perfiles_msg_noexiste'));
		redirect('perfiles/lista');		
	  }
	  
	$profile = $this->profiles_model->get_profile($id);
	// No existe
	if (empty($profile)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_perfiles_msg_noexiste'));
		redirect('perfiles/lista');		
	  }
	$data['perfil'] = $profile;
	$data['permisos'] = $this->profiles_model->get_profile_access($id);	
	$data['logs'] = $this->profiles_model->get_profile_log($id);		
	$data['content']='admin/perfiles/ver';
	$this->load->view('v_content',$data);

	}


function editar($id= null,$origen="lista"){
	// Valida Acceso
	$this->check_access();

	// Sin parametro 
	if (is_null($id)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_perfiles_msg_noexiste'));
		redirect('perfiles/lista');		
	  }

	$perfil = $this->profiles_model->get_profile($id);
	$permisos = $this->profiles_model->get_profile_access($id);	
	// No existe
	if (empty($perfil)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_perfiles_msg_noexiste'));
		redirect('perfiles/lista');		
	  }
	  
	$this->load->library('form_validation');

   if(isset($_POST["cancelar"])) {
		$this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_cancelado'));
		if ($origen=="ver") { redirect('perfiles/ver/'.$id);} else {redirect('perfiles/lista');}
   }
			
	if (!empty($_POST))
	{    
		$this->form_validation->set_rules('nombre', 'lang:eap_perfiles_nombre', 'required|trim|max_length[50]|xss_clean|callback_validar_unico['.$id.']');     
		$this->form_validation->set_rules('descripcion', 'lang:eap_perfiles_descripcion', 'required|trim|max_length[100]|xss_clean');					
		$this->form_validation->set_rules('permisos[]', 'lang:eap_perfiles_permisos', 'trim');
		
		$this->form_validation->run();
	}
	
   if($this->form_validation->run()){

		$historial='';

		$data['fecha_modificacion'] = date("Y-m-d H:i:s");
		$data['id_usuario_modificacion'] = $this->session->userdata('usuario_id');
		if($this->input->post('nombre') != $perfil['nombre']) {$data['nombre'] = $this->input->post('nombre');$historial.="Nombre@@$perfil[nombre]@@$data[nombre]||";}
		if($this->input->post('descripcion') != $perfil['descripcion']) {$data['descripcion'] = $this->input->post('descripcion');$historial.="descripcion@@$perfil[descripcion]@@$data[descripcion]||";}		

		
		if ($this->profiles_model->set_profile($id, $data)){
		// Guarda Nuevo permisos si hay diferencias
			$data_permisos = $this->input->post('permisos');
			foreach ($permisos as $permiso):
				if ($permiso['permitido']) {$data_permisos_actual[]= $permiso['id'];}
			endforeach; 
			if ($data_permisos_actual != $data_permisos) {
				$permisos_nombres = $this->profiles_model->get_access_names($data_permisos_actual);
				$data_permisos_nombres = $this->profiles_model->get_access_names($data_permisos);
				$historial.="Permisos@@$permisos_nombres@@$data_permisos_nombres||";
				$this->profiles_model->set_profile_access($id, $data_permisos);
			}
			// GUARDA LOG
			$data_log = array(
				'id_perfil' => $id,
				'fecha' => date("Y-m-d H:i:s"), 
				'modificador' => $this->session->userdata('usuario_nombre_apellido'),	
				'modificaciones' => $historial);
			$this->profiles_model->set_profile_log($data_log);			
			$this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_guardado'));
			if ($origen=="ver") { redirect('perfiles/ver/'.$id);} else {redirect('perfiles/lista');}
			//echo $this->db->last_query();
		} else {
			$this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_guardado_error'));	
		}
   }
	

	$data['origen']= $origen;
	$data['perfil'] = $perfil;
	$data['permisos'] = $permisos;
	$data['logs'] = $this->profiles_model->get_profile_log($id);	
	$data['content']='admin/perfiles/editar';
	$this->load->view('v_content',$data);
	
	}


function nuevo(){
	// Valida Acceso
	$this->check_access();

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

   if(isset($_POST["cancelar"])) {
		$this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_cancelado_nuevo'));
		redirect('perfiles/lista');
   }
			
	if (!empty($_POST))
	{    
		$this->form_validation->set_rules('nombre', 'lang:eap_perfiles_nombre', 'required|trim|max_length[50]|xss_clean|callback_validar_unico');     
		$this->form_validation->set_rules('descripcion', 'lang:eap_perfiles_descripcion', 'required|trim|max_length[100]|xss_clean');					
		$this->form_validation->set_rules('permisos[]', 'lang:eap_perfiles_permisos', 'trim');
		
		$this->form_validation->run();
	}
	
   if($this->form_validation->run()){
		$historial='';
		$data['fecha_creacion'] = date("Y-m-d H:i:s");
		$data['id_usuario_creacion'] = $this->session->userdata('usuario_id');
		$data['fecha_modificacion'] = date("Y-m-d H:i:s");
		$data['id_usuario_modificacion'] = $this->session->userdata('usuario_id');
		if($this->input->post('nombre') != "") {$data['nombre'] = $this->input->post('nombre');$historial.="Nombre@@@@$data[nombre]||";}
		if($this->input->post('descripcion') != "") {$data['descripcion'] = $this->input->post('descripcion');$historial.="descripcion@@@@$data[descripcion]||";}		
		
		$permisos = $this->input->post('permisos');
		$permisos_nombres = $this->profiles_model->get_access_names(implode(',',$permisos));
		$historial.="Permisos@@@@$permisos_nombres||";
		
		$id=$this->profiles_model->set_profile('', $data,'insert');
		if (is_numeric($id)){
			$this->profiles_model->set_profile_access($id, $permisos);
			// Guardar LOG de Modificacion
			$data_log = array(
				'id_perfil' => $id,
				'fecha' => date("Y-m-d H:i:s"), 
				'modificador' => $this->session->userdata('usuario_nombre_apellido'),	
				'modificaciones' => $historial);
			$this->profiles_model->set_profile_log($data_log);
			
			$this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_guardado'));
			redirect('perfiles/ver/'.$id);
			//echo $this->db->last_query();
		} else {
			$this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_guardado_error'));	
		}
   }
	

	$profile = array(
		'nombre'=>'',
		'descripcion'=>'');

	$data['perfil'] = $profile;
	$data['permisos'] = $this->profiles_model->get_profile_access(null);	
	$data['content']='admin/perfiles/nuevo';
	$this->load->view('v_content',$data);
	
	}	
	
	
	
function validar_unico ($nombre=null,$id=null){
   if ($this->profiles_model->is_unique($nombre,$id)) {
	   return TRUE;
   } else {
	   $this->form_validation->set_message('validar_unico', $this->lang->line('eap_perfiles_msg_validar_unico').'==>'.$nombre.'ID=>'.$id);
	   return FALSE;
   }
}


function cambiar_estado($id=null,$estado=null) {
	// Valida Acceso
	$this->check_access();
	
	if (is_null($id) or is_null($estado)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_perfiles_msg_guardado_estado_error'));
		redirect('perfiles/lista');	
	}

	switch ($estado) {
		case "activar":
			$this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_activado'));
			if (!$this->profiles_model->active_profile($id)) { $this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_guardado_estado_error')); }
			redirect('perfiles/lista');	
			break;
		case "desactivar":
			$this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_desactivado'));
			if (!$this->profiles_model->inactive_profile($id)) { $this->session->set_flashdata('message', $this->lang->line('eap_perfiles_msg_guardado_estado_error')); }
			redirect('perfiles/lista');	
			break;
		default:
			$this->session->set_flashdata('message_error', $this->lang->line('eap_perfiles_msg_guardado_estado_error'));
			redirect('perfiles/lista');	
	}
	
}



}


