/**
  * montar_codemin_usuarios
  * 
  * Faz a montagem das views para o usuário,
  * busca as permissões no banco de dados e
  * cria os radios box para cada área.
  * 
  *
  * @access	public
  * @param	$string
  * @return	null
  */
 public function montar_codemin_usuarios($titulo)
 {
     $data['areas'] = $this->configuracoes['areas'];
     $data['navlinks'] = $this->configuracoes['navlinks'];
     $data['activelink'] = $this->configuracoes['activelink'];
     $this->configuracoes['navlinks']['usuarios'] = "Usuários";
     $data['contentBody'] = $this->configuracoes['contentBody'];
     $data['nivel_acesso'] = $this->configuracoes['nivel_acesso'];
     $this->load->view('codemin/header_view', $data);
     $this->load->view('codemin/nav_view');
     // Dados dos usuários
     $dados[] = array('titulo' => 'Nome', 'campo' => 'nome', 'tipo' => 'input-text', 'placeholder' => 'Nome Completo');
     $dados[] = array('titulo' => 'Login', 'campo' => 'login', 'tipo' => 'input-text', 'placeholder' => 'Login do usuário');
     $dados[] = array('titulo' => 'Senha', 'campo' => 'senha', 'tipo' => 'senha', 'placeholder' => 'Senha do usuário');
     $array = array(0 => 'Não', 1 => 'Sim');
     $dados[] = array('titulo' => 'Administrador', 'campo' => 'administrador', 'tipo' => 'select', 'dados' => $array, 'placeholder' => 'Senha do usuário');
     $data['titulo'] = $titulo;
     $tabela = 'codemin_usuarios';
     $acao = $this->uri->segment(3);
     $id = $this->uri->segment(4);
     $this->load->library('form_validation');
     switch ($acao) {
         case 'adicionar':
             $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[6]|max_length[255]');
             $this->form_validation->set_rules('login', 'Login', 'required|is_unique[codemin_usuarios.login]|min_length[4]|max_length[20]');
             $this->form_validation->set_rules('senha', 'Senha', 'required|min_length[6]|max_length[255]');
             if ($_POST & $this->form_validation->run() == TRUE) {
                 $insert = array('nome' => $this->input->post('nome'), 'login' => $this->input->post('login'), 'senha' => senha_usuario($this->input->post('senha')), 'administrador' => $this->input->post('administrador'), 'ativo' => $this->input->post('ativo'));
                 if ($this->db->insert($tabela, $insert)) {
                     $this->session->set_flashdata('sucesso', 'Registro adicionado com sucesso!');
                     redirect('/administrador/usuarios/', 'location');
                 } else {
                     $this->session->set_flashdata('erro', 'Houve um erro ao adicionar o registro!');
                 }
             }
             // Inicia a montagem do formulário
             $data['dados'] = $this->montar_campos($dados);
             $data['contentBody'] = $this->configuracoes['contentBody'];
             $this->load->view('codemin/adicionar_view', $data);
             break;
         case 'editar':
             $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[6]|max_length[255]');
             $this->form_validation->set_rules('login', 'Login', 'required|min_length[4]|max_length[20]');
             $this->form_validation->set_rules('senha', 'Senha', 'min_length[6]|max_length[255]');
             if ($_POST & $this->form_validation->run() == TRUE) {
                 $update = array('nome' => $this->input->post('nome'), 'login' => $this->input->post('login'), 'administrador' => $this->input->post('administrador'), 'ativo' => $this->input->post('ativo'));
                 if ($this->input->post('senha')) {
                     $update['senha'] = senha_usuario($this->input->post('senha'));
                 }
                 $this->db->where('id', $id);
                 if ($this->db->update($tabela, $update)) {
                     // Permissões do usuário
                     $this->db->where('id_usuario', $id);
                     $this->db->delete($tabela . '_permissoes');
                     foreach ($this->configuracoes['areas'] as $key => $value) {
                         $insert = array('area' => $key, 'nivel' => $this->input->post('usuario-' . $key), 'id_usuario' => $id);
                         $this->db->insert($tabela . '_permissoes', $insert);
                     }
                     $this->session->set_flashdata('sucesso', 'Registro editado com sucesso!');
                     redirect('/administrador/usuarios/', 'location');
                 } else {
                     $this->session->set_flashdata('erro', 'Houve um erro ao adicionar o registro!');
                 }
             }
             // Pega os registros do banco
             $this->db->where('id', $id);
             $resultado = $this->db->get($tabela)->row_array();
             // Pega as permissoes
             $this->db->where('id_usuario', $id);
             $permissoes = array();
             foreach ($this->db->get($tabela . '_permissoes')->result() as $permissao) {
                 $permissoes[$permissao->area] = $permissao->nivel;
             }
             // Inicia a montagem do formulário
             $data['dados'] = $this->montar_campos($dados, $resultado, $permissoes);
             $data['contentBody'] = $this->configuracoes['contentBody'];
             $this->load->view('codemin/editar_view', $data);
             break;
         case 'excluir':
             $id = $this->uri->segment(4);
             $this->db->where('id', $id);
             $this->db->delete($tabela);
             redirect('/administrador/usuarios', 'location');
             break;
         default:
             $data['listagens'] = array('nome', 'login');
             $data['titulo'] = $titulo;
             // Pega todos os resultados
             $this->db->order_by('id', 'desc');
             $data['resultados'] = $this->db->get($tabela)->result_array();
             // Monta a view com a listagem
             $this->load->view('codemin/listagem_view', $data);
             break;
     }
     $footer['scriptFooter'] = $this->configuracoes['scriptFooter'];
     $this->load->view('codemin/footer_view', $footer);
 }
 /**
  *
  * instalar
  * 
  * Cria as tabelas iniciais e adicionar o primeiro usuário administrador
  * 
  *
  * @access	public
  * @param	null
  * @return	null
  */
 public function instalar()
 {
     // CRIAR A TABELA DE LOG DE ACESSOS (PADRÃO)
     echo "<div class='alert alert-success'>CRIAR TABELA SE NAO EXISTIR '" . $this->db->dbprefix('codemin_log_acessos') . "'</div>";
     $this->db->query("CREATE TABLE IF NOT EXISTS `" . $this->db->dbprefix('codemin_log_acessos') . "` (\n\t\t  `id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t  `id_usuario` int(11) NOT NULL,\n\t\t  `ip_usuario` varchar(15) NOT NULL,\n\t\t  `user_agent` varchar(255) NOT NULL,\n\t\t  `data` datetime NOT NULL,\n\t\t  PRIMARY KEY (`id`)\n\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;");
     // CRIAR A TABELA DE LOG DE AÇÕES (PADRÃO)
     echo "<div class='alert alert-success'>CRIAR TABELA SE NAO EXISTIR '" . $this->db->dbprefix('codemin_log_acoes') . "'</div>";
     $this->db->query("CREATE TABLE IF NOT EXISTS `" . $this->db->dbprefix('codemin_log_acoes') . "` (\n\t\t  `id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t  `id_usuario` int(11) NOT NULL,\n\t\t  `tabela` varchar(255) NOT NULL,\n\t\t  `id_registro` int(11) NOT NULL,\n\t\t  `acao` int(1) NOT NULL,\n\t\t  `data` datetime NOT NULL,\n\t\t  PRIMARY KEY (`id`)\n\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;");
     // CRIAR A TABELA DE OPÇÕES (PADRÃO)
     echo "<div class='alert alert-success'>CRIAR TABELA SE NAO EXISTIR '" . $this->db->dbprefix('codemin_opcoes') . "'</div>";
     $this->db->query("CREATE TABLE IF NOT EXISTS `" . $this->db->dbprefix('codemin_opcoes') . "` (\n\t\t  `id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t  `tabela` varchar(255) NOT NULL,\n\t\t  `campo` varchar(255) NOT NULL,\n\t\t  `opcao` varchar(255) NOT NULL,\n\t\t  PRIMARY KEY (`id`)\n\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;");
     // CRIAR A TABELA DE OPÇÕES SELECIONADAS (PADRÃO)
     echo "<div class='alert alert-success'>CRIAR TABELA SE NAO EXISTIR '" . $this->db->dbprefix('codemin_opcoes_selecionadas') . "'</div>";
     $this->db->query("CREATE TABLE IF NOT EXISTS `" . $this->db->dbprefix('codemin_opcoes_selecionadas') . "` (\n\t\t  `id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t  `tabela` varchar(255) NOT NULL,\n\t\t  `campo` varchar(255) NOT NULL,\n\t\t  `id_registro` int(11) NOT NULL,\n\t\t  `id_opcao` int(11) NOT NULL,\n\t\t  PRIMARY KEY (`id`)\n\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;");
     // CRIAR A TABELA DE UPLOADS (PADRÃO)
     echo "<div class='alert alert-success'>CRIAR TABELA SE NAO EXISTIR '" . $this->db->dbprefix('codemin_uploads') . "'</div>";
     $this->db->query("CREATE TABLE IF NOT EXISTS `" . $this->db->dbprefix('codemin_uploads') . "` (\n\t\t  `id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t  `tipo` varchar(255) NOT NULL,\n\t\t  `tabela` varchar(255) NOT NULL,\n\t\t  `registro` varchar(255) NOT NULL,\n\t\t  `campo` varchar(255) NOT NULL,\n\t\t  `arquivo` varchar(255) NOT NULL,\n\t\t  PRIMARY KEY (`id`)\n\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;");
     // CRIAR A TABELA DE USUÁRIOS (PADRÃO)
     echo "<div class='alert alert-success'>CRIAR TABELA SE NAO EXISTIR '" . $this->db->dbprefix('codemin_usuarios') . "'</div>";
     $this->db->query("CREATE TABLE IF NOT EXISTS `" . $this->db->dbprefix('codemin_usuarios') . "` (\n\t\t  `id` int(1) NOT NULL AUTO_INCREMENT,\n\t\t  `ativo` tinyint(1) NOT NULL,\n\t\t  `administrador` tinyint(1) NOT NULL,\n\t\t  `nome` varchar(255) NOT NULL,\n\t\t  `login` varchar(255) NOT NULL,\n\t\t  `senha` varchar(255) NOT NULL,\n\t\t  PRIMARY KEY (`id`)\n\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;");
     // CRIAR A TABELA DE USUÁRIOS PERMISSÕES (PADRÃO)
     echo "<div class='alert alert-success'>CRIAR TABELA SE NAO EXISTIR '" . $this->db->dbprefix('codemin_usuarios_permissoes') . "'</div>";
     $this->db->query("CREATE TABLE IF NOT EXISTS `" . $this->db->dbprefix('codemin_usuarios_permissoes') . "` (\n\t\t  `id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t  `id_usuario` int(11) NOT NULL,\n\t\t  `nivel` int(1) NOT NULL,\n\t\t  `area` varchar(255) NOT NULL,\n\t\t  PRIMARY KEY (`id`)\n\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;");
     $nome = $this->input->post('nome');
     $login = $this->input->post('login');
     $senha = $this->input->post('senha');
     $senha_hash = senha_usuario($this->input->post('senha'));
     $inserir = array('ativo' => 1, 'administrador' => 1, 'nome' => $nome, 'login' => $login, 'senha' => $senha_hash);
     $this->db->insert('codemin_usuarios', $inserir);
     echo "<div class='alert alert-success'>INSERIDO USUÁRIO {$login} COM A SENHA {$senha} NA TABELA '" . $this->db->dbprefix('codemin_usuarios_permissoes') . "'</div>";
 }