Example #1
0
 /**
  * Lista os registros na tela
  */
 function listar($dados = array())
 {
     // Se não tiver definido para exibir a coluna ordem, remove-a
     if (!$this->exibir_coluna_ordem) {
         unset($this->colunas_default[self::COLUNA_ORDEM]);
     }
     // Define a tabela
     $this->default_model->set_table_name($this->table_name);
     if (strlen($dados['function']) == 0) {
         $dados['function'] = 'listar';
     }
     // Define a página atual
     $dados['pagina_atual'] = $dados['pagina_atual'] ? $dados['pagina_atual'] : $_POST['pagina_atual'];
     // $dados ou $_POST
     $dados['pagina_atual'] = $dados['pagina_atual'] ? $dados['pagina_atual'] : $this->uri->segment(4);
     // $dados ou URI
     $dados['pagina_atual'] = $dados['pagina_atual'] ? $dados['pagina_atual'] : 1;
     // $dados ou 1
     // Caso tenha algum filtro, troca para a primeira página
     if ($this->busca) {
         $dados['pagina_atual'] = 1;
     }
     $this->pagina_atual = $dados['pagina_atual'];
     $dados['filtro'] = $_POST['filtro'];
     $dados['params'] = $_POST['params'];
     $params = MY_Utils::deserializar_dados_jquery($_POST['params']);
     // Organiza os dados recebidos via POST
     $filtros = (array) $this->processa_filtros($params);
     $dados['filtros'] = $filtros;
     // Deixa os filtros prontos pro SQL
     $this->filtros = $this->organiza_filtros($dados['filtros']);
     // Se for listagem, verifica se tem hierarquia, se for busca, remove hierarquia
     if ($this->tem_hierarquia && count($filtros) == 0) {
         $this->where[] = 'parent_id IS NULL';
     } else {
         $this->tem_hierarquia = false;
         unset($this->colunas_default[self::COLUNA_HIERARQUIA]);
     }
     // Define o título da tela
     $dados['titulo'] = $this->titulo;
     // Registros que irão ser exibidos na "grid"
     $dados['registros'] = $this->registros;
     // Colunas da tabela:
     $colunas = $this->colunas + $this->colunas_default;
     // array_merge(), mantendo as chaves numéricas
     ksort($colunas);
     // reordena
     $this->colunas = $colunas;
     // Ordem (quando clica no titulo de uma coluna) (listagem)
     $ordem = $_POST['ordem'];
     $this->ordem = $this->organiza_ordem($ordem);
     $dados['ordem'] = $this->ordem;
     $dados['params'] = $_POST['params'];
     $params = MY_Utils::deserializar_dados_jquery($_POST['params']);
     // Ordem (coluna na base de dados)
     $ordens = $this->processa_ordens($params);
     if (is_array($ordens) && count($ordens) > 0) {
         $dados['info'] = $this->altera_ordens($ordens);
     }
     /*
      * Filtro (busca/pesquisa)
      */
     $this->where = array_merge((array) $this->filtros, (array) $this->where);
     if (!$this->desabilitar_paginacao) {
         // Obtém o total de registros
         $this->total_de_registros = $this->default_model->obter_total($this->where);
     }
     $dados['total_de_registros'] = $this->total_de_registros;
     $dados['registros_por_pagina'] = $this->registros_por_pagina;
     // (total de páginas - página atual) > 0
     $dados['tem_mais_paginas'] = $this->total_de_registros / $this->registros_por_pagina - $this->pagina_atual > 0;
     // Ações
     ksort($this->acoes);
     $dados['acoes'] = $this->acoes;
     // Where
     $dados['where'] = $this->where;
     // Colunas
     $dados['colunas'] = $this->colunas;
     /*
      * Dados
      */
     // Obtém as colunas para o SQL
     $cols = array();
     foreach ($colunas as $coluna) {
         if ($coluna['coluna']) {
             $col = $coluna['coluna_sql'] ? $coluna['coluna_sql'] . ' AS ' . $coluna['coluna'] : $coluna['coluna'];
             if (strpos($col, 'TO_CHAR') !== false) {
                 $col = str_replace('TO_CHAR', 'DATE_FORMAT', $col);
                 $col = str_replace('DD/MM/YYYY', '%e/%m/%Y', $col);
                 $col = str_replace('HH24:MI:SS', '%H:%i:%s', $col);
             }
             $cols[] = $col;
         }
     }
     // Obtém os dados para popular a Grid
     if (!isset($this->registros)) {
         $this->registros = $this->default_model->listar(array('columns' => $cols, 'order_by' => $this->ordem, 'limit' => $this->registros_por_pagina, 'offset' => ($this->pagina_atual - 1) * $this->registros_por_pagina, 'where' => $this->where));
     }
     $dados['registros'] = $this->registros;
     // Fim da parte dos dados da grid
     // Define o modulo
     $dados['module'] = $this->module;
     // Define o controller
     $dados['controller'] = $this->controller;
     // Define botões extras antes do botão de busca
     $dados['botoes'] = $this->botoes;
     // Se tem hierarquia
     $dados['tem_hierarquia'] = $this->tem_hierarquia;
     // Desabilita paginação
     $dados['desabilitar_paginacao'] = $this->desabilitar_paginacao;
     // Desabilita a busca
     $dados['desabilitar_buscar'] = $this->desabilitar_buscar;
     // Desabilita a ordenacao
     $dados['desabilitar_ordenacao'] = $this->desabilitar_ordenacao;
     // Desabilita botão inserir
     $dados['desabilitar_inserir'] = $this->desabilitar_inserir;
     // Função inserir
     $dados['funcao_inserir'] = $this->funcao_inserir;
     // Função editar
     $dados['funcao_editar'] = $this->funcao_editar;
     // Função remover
     $dados['funcao_remover'] = $this->funcao_remover;
     // Função ativar_inativar
     $dados['funcao_ativar_inativar'] = $this->funcao_ativar_inativar;
     // View da linha
     $dados['view_linha'] = $this->view_linha;
     $this->load->view($this->view, $dados);
 }