/** * Funcao para buscar a configuracao do [Model], baseado na area que ele esteja sendo chamado * * @param string $type * @return array */ public function _getConfig($model, $type = 'all') { $config = []; $cfg = UtilLogic::load(mkny_model_config_path($model) . '.php')['fields']; // mdd($cfg); // $cfg = Logic\UtilLogic::load(mkny_model_config_path(class_basename($model)).'.php')['fields']; switch ($type) { case 'datagrid': $config = array_filter($cfg, function ($var) { return isset($var['grid']) && $var['grid'] == 1; }); break; case 'form_add': $config = array_filter($cfg, function ($var) { return isset($var['form_add']) && $var['form_add'] == 1; }); break; case 'form_edit': $config = array_filter($cfg, function ($var) { return isset($var['form_edit']) && $var['form_edit'] == 1; }); break; case 'search': $config = array_filter($cfg, function ($var) { return isset($var['searchable']) && $var['searchable'] == 1; }); break; case 'all': default: $config = $cfg; break; } if (isset(array_values($config)[1]['order'])) { usort($config, function ($dt, $db) { if (!isset($db['order'])) { $db['order'] = 0; } if (isset($dt['order'])) { return $dt['order'] - $db['order']; } else { return 0; } }); // mdd($config); $newConfig = []; foreach ($config as $sortfix) { $newConfig[$sortfix['name']] = $sortfix; } $config = $newConfig; } return $config; }
/** * Retorna as configuracoes do datagrid * //Retorna o filtro padrao (definido no arquivo de configuracao) * * @return array Filtros where em 'raw' ja tratado */ protected function _getDefaultFilter() { // exit('abacate'); $filters = Logic\UtilLogic::load(mkny_model_config_path(class_basename($this)) . '.php')['grid']['pre-filter']; foreach ($filters as $kfilter => $filter) { // Tratamento para parametros de where $matches = array(); // Verifica as ocorrencias de variaveis enclausuradas preg_match('/\\{(.*?)\\}/', $filter, $matches); if (count($matches)) { $replace = null; eval('$replace = ' . $matches[1] . ';'); $filters[$kfilter] = str_replace($matches[0], $replace, $filter); } } return $filters; }
protected function _datagrid(array $fields, $Model = null, $datasourceAction = null, $recordOnly = false) { // Nao sei pq fiz isso, nao tem como sair por enquanto haha $field_names = array_keys($fields); // Ordenacao dos campos { // Busca no Model, o valor para orderBy (ou diz que e a primeira chave asc) $orderModel = $Model ? $Model->orderBy : array('0', 'asc'); // Vindo de parametrizacao (url) $order = \Request::input('order', $orderModel[0]); // Se for numerico, traduz para o nome do campo propriamente dito if (is_numeric($order)) { $order = $field_names[$order]; } // Trava anti bug (verifica se existe o campo que ta sendo passado) if (!in_array($order, $field_names)) { $order = $orderModel[0]; } // Ordenacao dos campos } // Quantidade por pagina { // Recupera a quantidade de campos // // *Existe um campo no model eloquent que parece que faz isso automatico, verificar depois* $limit = \Request::input('perpage', $Model ? $Model->maxPerPage : 10) ?: 10; // Para nao deixar o sistema sobrecarregar, deixa o limit maximo em 1000 registros; $limit = $limit > 1000 ? 1000 : $limit; // Quantidade por pagina } // Pagina atual { // Complementando o Limit, vem o offset // A acao de datagrid principal ja trata isso automaticamente, mas quando e uma dependendte elas precisam dessa informacao pra cortar o array $page = \Request::input('page', 1); $offset = $page * $limit - $limit; // Pagina atual } // Cardinalidade { $card = \Request::input('card', $orderModel[1]); if (!in_array($card, array('asc', 'desc'))) { $card = 'asc'; } // Cardinalidade } // Escolhe o _datasource que sera utilizado $datasourceAction = $datasourceAction ? $datasourceAction : '_datasource'; // Faz a chamada do _datasource $_datasource = $this->{$datasourceAction}($field_names, $order, $card, $limit, $offset, $fields); // Se quiser buscar apenas os registros basicos if ($recordOnly) { return $_datasource->toArray(); } $datagrid_config = Logic\UtilLogic::load(mkny_model_config_path($this->_getControllerName()) . '.php')['grid']; // mdd($datagrid_config); $datagrid = app()->make('\\Mkny\\Cinimod\\Logic\\DatagridLogic', [$datagrid_config])->get(is_object($_datasource) ? $_datasource->items() : $_datasource, $fields); // dd($_datasource); // echo $_datasource->currentPage(); // echo $_datasource->currentPage(); // exit; return array('configuration' => $datagrid_config, 'table' => $datagrid, 'info' => array('total' => $_datasource->total(), 'links' => $_datasource->links())); }