<?php class profiles_model extends CI_Model{

	private $table_name	= 'sec_perfiles';			// users profiles

	public function get_profiles($active=null)
	{
		$this->db->from($this->table_name);
		if($active != null) {$this->db->where('activo', $active);}
		$this->db->order_by('nombre');
		$query=$this->db->get();
		return $query->result_array();
		
	}

	
	public function get_profile($id)
	{

		$txtSelect = '*, (select username from sec_usuarios u where u.id=sec_perfiles.id_usuario_creacion) as nombre_usuario_creacion';
		$txtSelect = $txtSelect.', (select username from sec_usuarios u where u.id=sec_perfiles.id_usuario_modificacion) as nombre_usuario_modificacion';
		$this->db->select($txtSelect);
		$this->db->from($this->table_name);
		$this->db->where('id', $id);		
		$query=$this->db->get();
		return $query->row_array();
		
	}



	public function set_profile($id,$data,$mode=null)
	{
		if ($mode == 'insert') {
			$this->db->insert($this->table_name, $data);
			return $this->db->insert_id();
		} else {
			$this->db->where('id', $id);
			return $this->db->update($this->table_name, $data);
		}
		
	}

	public function get_profile_log($id)
	{
		$txtSelect = '*';
		$this->db->select($txtSelect);
		$this->db->from('sec_perfiles_log');
		$this->db->where('id_perfil', $id);
		$this->db->order_by('fecha','desc');
		$query=$this->db->get();
		return $query->result_array();
	}	
	
	
	public function set_profile_log($data)
	{
		return $this->db->insert('sec_perfiles_log', $data);
	}	

	function active_profile ($id)
	{
		$data = array( 
		'activo' => true,
		'fecha_modificacion' => date("Y-m-d H:i:s"), 
		'id_usuario_modificacion' => $this->session->userdata('usuario_id')		
		);
		$this->db->where('id', $id);
		$this->db->update($this->table_name, $data);			
		$resultado = ($this->db->affected_rows() >0);
		// Guarda en LOG
		$historial = "Estado@@INACTIVO@@ACTIVO||";
		$data_log = array(
			'id_perfil' => $id,
			'fecha' => date("Y-m-d H:i:s"), 
			'modificador' => $this->session->userdata('usuario_nombre_apellido'),	
			'modificaciones' => $historial);		
		$this->set_profile_log($data_log);
		return $resultado;
		
	}

	function inactive_profile ($id)
	{
		$data = array( 
		'activo' => false,
		'fecha_modificacion' => date("Y-m-d H:i:s"), 
		'id_usuario_modificacion' => $this->session->userdata('usuario_id')		
		);
		$this->db->where('id', $id);
		$this->db->update($this->table_name, $data);			
		$resultado = ($this->db->affected_rows() >0);
		// Guarda en LOG
		$historial = "Estado@@ACTIVO@@INACTIVO||";
		$data_log = array(
			'id_perfil' => $id,
			'fecha' => date("Y-m-d H:i:s"), 
			'modificador' => $this->session->userdata('usuario_nombre_apellido'),	
			'modificaciones' => $historial);		
		$this->set_profile_log($data_log);
		return $resultado;
	}
	

	public function get_profile_access($id)
	{
		$txtSelect = "*, UPPER(controlador) as controlador";
		if (is_null($id)) {
			$txtSelect .= ", (false) as permitido";
		} else {
			$txtSelect .= ", (select 1 from sec_perfiles_permisos where id=id_permiso and id_perfil = ".$id.") as permitido";
		}
		$this->db->select($txtSelect);
		$this->db->from('sec_permisos');
		$this->db->order_by('grupo');
		$this->db->order_by('nombre');
		$query=$this->db->get();
		return $query->result_array();		
	}
	
	public function get_access_names($ids)
	{
	// Devuelve los nombres
		if (is_null($ids)) {
			return '';
		} else {
			$this->db->select('GROUP_CONCAT(nombre order by grupo, nombre) as nombre', FALSE);
			$this->db->from('sec_permisos');
			$this->db->where_in('id',$ids);
			$query=$this->db->get();
			$result =$query->row_array();
			return $result['nombre'];
		}

	}
	

	public function set_profile_access($id,$data)
	{
		$this->db->where('id_perfil', $id);
		$this->db->delete('sec_perfiles_permisos'); 

		$resultado = true;
		
		if (!empty($data)) {
			foreach($data as $d) :
				$this->db->set('id_perfil', $id);
				$this->db->set('id_permiso', $d);
				$this->db->insert('sec_perfiles_permisos');
				$resultado = $resultado &&($this->db->affected_rows() >0); 				
			endforeach;
		}
		return $resultado;
		
	}

	public function is_unique($nombre, $id)
	{
		$this->db->from($this->table_name);
		$this->db->where('id !=', $id);
		$this->db->where('nombre', $nombre);				
		$query=$this->db->get();
		if ($query->num_rows()>0) {return false;}else { return true;}
	}

	
}

