public function anyIndexes(Logic\TableLogic $t) { // $m = new \App\Models\Pessoa(); // $fields_data = $m->_getConfig('datagrid'); // $fields = array_keys($fields_data); // $d = $m // // ->orderBy($order, \Request::input('card', 'asc')) // ->paginate( // // Qtd de campos // 10, // // $limit, // // Pega os fieldnames para o select // $fields // ); // $t->addTableClass(array( // 'table', // 'table-striped', // 'check-all-container' // )); // $headers = array_merge( // array('checks' => [\Form::checkbox('idx', '', '', ['class' => 'checkbox check-all'])]), // $fields, // array('actions') // ); // $headersTranslated = []; // foreach ($headers as $field_key => $field_name) { // if(is_numeric($field_key)){ // $headersTranslated[$field_name] = trans(class_basename($m).'.'.$field_name.'_grid'); // if(isset($fields_data[$field_name]['searchable']) && $fields_data[$field_name]['searchable']){ // $headersTranslated[$field_name] = [ // \Html::tag( // 'a', // $headersTranslated[$field_name], // ['href' => "?order=".array_search($field_name, $fields)."&card=".(\Request::input('card', 'asc') == 'asc' ? 'desc':'asc')] // ) // ]; // } // } else { // $headersTranslated[$field_key] = $field_name; // } // } // $t->setHeaders($headersTranslated); // // echo '<pre>'; // $dataRows = []; // foreach ($d->items() as $item) { // $dataCols = []; // foreach ($fields as $field_name) { // $dataCols[$field_name] = $item->present()->{$field_name}; // } // $dataRows[] = $dataCols; // } // // print_r($dataRows); // // exit; // // $d; // foreach ($dataRows as $drow) { // $drow['checks'] = array( // \Form::checkbox('id_sec[]', $drow[$m->primaryKey], '', ['class'=> 'checkbox']) // ); // $drow['actions'] = array( // $t->button( // 'edit/'.$drow[$m->primaryKey], // 'Editar', // 'glyphicon glyphicon-edit btn btn-success'), // $t->button( // 'switch-status/'.$drow[$m->primaryKey], // 'Editar', // $drow['ind_status'] == 'A' ? 'glyphicon glyphicon-ban-circle btn btn-warning':'glyphicon glyphicon-ok btn btn-info'), // $t->button( // 'delete/'.$drow[$m->primaryKey], // 'Editar', // 'glyphicon glyphicon-trash btn btn-danger') // ); // $t->insertRow($drow); // } // $t->setRows($d); return view('cinimod::admin.default_dashboard')->with(['table' => $t->getTable()]); }
/** * Facilitador para montagem da datagrid * * @param array $rows Linhas pra montar a datagrid * @param array $fields_config Configuracao de campos * @param string $pkey Nome da primary key * @param string $modelName Nome do model * @return array Tabela + paginator */ public function get(array $rows, $fields_config, $pkey = false) { $modelName = view()->shared('controller'); // Instancia a tabela $table = new TableLogic(); // Trata os fields, apenas para pegar os nomes $field_names = array_keys($fields_config); // Adiciona as classes na tabela $table->addTableClass(['table', 'table-striped', 'check-all-container']); $headers = array(); // Monta todos os cabecalhos, inclusive os dinamicos if ($this->hasCheck) { $headers['checks'] = [\Form::checkbox('idx', '', '', ['class' => 'checkbox check-all'])]; } $headers = array_merge($headers, $field_names); if ($this->hasActions) { $headers['actions'] = trans($modelName . '.actions'); } // Traducao dos headers, que vem com os nomes do banco de dados, // aqui eles tomam nomes especificos dos arquivos de configuracao $headersTranslated = []; foreach ($headers as $field_key => $field_name) { // Se nao for numerico, indica um conteudo customizado if (is_numeric($field_key)) { // Busca a traducao para o campo $headersTranslated[$field_name] = isset($fields_config[$field_name]['trans']) ? $fields_config[$field_name]['trans'] : trans($modelName . '.' . $field_name . '.grid'); if (isset($fields_config[$field_name]['type']) && $fields_config[$field_name]['type'] == 'primaryKey') { $pkey = $fields_config[$field_name]['name']; } // Aqui faz o tratamento do link no titulo, // Usado para campos de busca, ordenacao, etc if (isset($fields_config[$field_name]['searchable']) && $fields_config[$field_name]['searchable']) { // Insere o link nos items marcados como searchable (o link e de ordenacao) $headersTranslated[$field_name] = [\Html::tag('a', $headersTranslated[$field_name], ['href' => "?order={$field_name}&card=" . (\Request::input('order') == $field_name && \Request::input('card', 'desc') == 'asc' ? 'desc' : 'asc') . "&" . http_build_query(\Request::except(['order', 'card', 'page']))])]; } } else { // Conteudo customizado $headersTranslated[$field_key] = $field_name; } } // Setta os headers $table->setHeaders($headersTranslated); // Monta as linhas // Fiz essa alteracao por causa do presenter() $dataRows = []; foreach ($rows as $row) { // Monta as colunas $dataCols = []; // Faz o tratamento campo-a-campo foreach ($field_names as $field_name) { // Se for um array simples, tratar como informacoes solidas if (is_array($row)) { // Verifica se esta sendo passado um retorno-array if (is_array($row[$field_name])) { // Vericica a presenca do indice formatador if (isset($fields_config[$field_name]['format'])) { // Faz o vsprintf no campo, caso esteja sendo passado um array para a formacao do campo $dataCols[$field_name] = vsprintf($fields_config[$field_name]['format'], $row[$field_name]); } else { // Variavel que guarda os valores, para informar a serem formatados $data_help = json_encode($row[$field_name]); // Variavel que guarda a sugestao de formatacao pro elemento $data_help_f = ['name' => $field_name, 'format' => str_repeat('%s ', count($row[$field_name]))]; // Joga uma exception pro programador identificar o que pode ser feito no elemento throw new \Exception("This field need format!\nAdd this to your config call: \"" . var_export($data_help_f, true) . "\"\nFractal data: \"" . $data_help . "\""); } } else { // Tenta identificar um valor multiplo definido no form-values para a traducao $translation_string = "{$modelName}.{$field_name}.form_values.{$row[$field_name]}"; $translation_intent = trans($translation_string); if ($translation_string != $translation_intent) { $row[$field_name] = $translation_intent; } // Atribui o valor a coluna $dataCols[$field_name] = $row[$field_name]; } } else { // Tratamento para relacionamentos (para exibir os items dentro da listagem) if (isset($fields_config[$field_name]['relationship']) && $fields_config[$field_name]['relationship']) { // Define a relacao $relation = $fields_config[$field_name]['relationship']; // Verifica se tem o metodo para exibir os campos adicionais if ($row->{$field_name . 's'}) { // Entra no metodo (Eloquent), retornando ele pega o nome do campo, definido no relationship // Existe um projeto ai pra fazer esse campo ser dinamico kk // // Possivel acao do controlador (definido no mconfig) $controller_edit_action = (isset($relation['controller']) ? $relation['controller'] : 'Dummy') . '@getEdit'; // Campo de edicao $field_key = $row->{$field_name . 's'}->{$relation['field_key']}; // Verifica a existencia de rota-relacionada (click to edit) if (\Route::getRoutes()->getByAction($controller_edit_action)) { // Link para a edicao do relacionado $dataCols[$field_name] = \Html::tag('a', $row->{$field_name . 's'}->{$relation['field_show']}, ['href' => action('Admin\\' . class_basename($controller_edit_action), [$field_key])]); } else { $dataCols[$field_name] = $row->{$field_name . 's'}->{$relation['field_show']}; } } else { // Se nao existe, bota um zerado ae $dataCols[$field_name] = ''; } } else { // Setta a coluna com o presenter no array de colunas $dataCols[$field_name] = $row->present()->{$field_name}; // $dataCols[$field_name] = $row[$field_name]; } } } if ($pkey) { // Adiciona o check individual $dataCols['checks'] = array(\Form::checkbox('id_sec[]', $row[$pkey], '', ['class' => 'checkbox'])); if ($this->hasActions) { // Adiciona os botoes $dataCols['actions'] = array(); // Botao de edição if ($this->hasActionEdit) { $dataCols['actions'][] = $table->button(array('link' => action('Admin\\' . $modelName . 'Controller@getEdit', [$dataCols[$pkey]]), 'attributes' => ['class' => 'glyphicon glyphicon-edit btn btn-sm btn-success', 'title' => trans($modelName . '.button_edit')])); } // Botão de alteração de status (personalizado então não é obrigatório) if ($this->hasActionStatusChange) { if (isset($dataCols['ind_status']) && !empty($dataCols['ind_status'])) { $status = substr($dataCols['ind_status'], 0, 1); $dataCols['actions'][] = $table->button(array('link' => action('Admin\\' . $modelName . 'Controller@getSwitchStatus', [$dataCols[$pkey]]), 'attributes' => ['title' => trans($modelName . '.' . ($status == 'A' ? 'button_status_disable' : 'button_status_enable')), 'class' => 'confirm-before-go glyphicon btn btn-sm ' . ($status == 'A' ? 'glyphicon-ban-circle btn-warning' : 'glyphicon-ok btn-info')])); } } // Botão de exclusão if ($this->hasActionDelete) { $dataCols['actions'][] = $table->button(array('link' => action('Admin\\' . $modelName . 'Controller@getDelete', [$dataCols[$pkey]]), 'attributes' => ['title' => trans($modelName . '.button_delete'), 'class' => 'glyphicon glyphicon-trash btn btn-sm btn-danger confirm-before-go'])); } // ## Botoes customizados ## if (isset($this->buttons) && !empty($this->buttons)) { $btns = $this->buttons; foreach ($btns as $btn) { $dataCols['actions'][] = sprintf($table->button($btn), $dataCols[$pkey]); } } } } else { $dataCols['checks'] = array(); $dataCols['actions'] = array(); } $dataRows[] = $dataCols; // Setta a linha no array de linhas $table->insertRow($dataCols); } // Retorna a tabela montada return $table->getTable(); }