From fc0385984a1179f0e135379a06a6e404dad85685 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Fri, 12 Dec 2025 10:03:53 -0300 Subject: [PATCH 1/5] =?UTF-8?q?Exporta=C3=A7=C3=A3o=20global=20primitiva?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit config/uspdev-forms.php => Inclusão de uma variável que indica o diretório para armazenar os formulários. -> Como default tem storage/app/formsJson, mas pode ser mudada através de FORM_STORAGE_DIR no .env views/definition/partials/gloab_export-btn.blade.php => Adição do botão que leva à rota de exportação dos formulários routes/web.php => Adição de nova rota para exportação 'definitions/export-all', de nome 'form-definitions.export-all' Controllers/DefinitionController.php => Adição da função export_all. -> Função salva todos os formulários persistidos no banco de dados em um arquivo forms.json no diretório especificado por FORM_STORAGE_DIR -> Também é capaz de lidar em situações onde nem o arquivo nem o diretório existam. TODO - Formatar melhor a saída pois o json_encode coloca tudo em uma única linha, eposteriormente utilizar da mesma lógica para exportação individual de formulário --- config/uspdev-forms.php | 3 ++ .../partials/globalexport-btn.blade.php | 3 ++ routes/web.php | 1 + src/Http/Controllers/DefinitionController.php | 33 +++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 resources/views/definition/partials/globalexport-btn.blade.php diff --git a/config/uspdev-forms.php b/config/uspdev-forms.php index b7ee13d..d9d0638 100644 --- a/config/uspdev-forms.php +++ b/config/uspdev-forms.php @@ -23,4 +23,7 @@ # Quem pode realizar buscas: geralmente é o usuário logado 'findGate' => 'user', + + # Diretório para armazenamento dos arquivos .json que representam os formulários da aplicação + 'forms_storage_dir' => env('FORM_STORAGE_DIR','storage/app/formsJson'), ]; diff --git a/resources/views/definition/partials/globalexport-btn.blade.php b/resources/views/definition/partials/globalexport-btn.blade.php new file mode 100644 index 0000000..8b41db0 --- /dev/null +++ b/resources/views/definition/partials/globalexport-btn.blade.php @@ -0,0 +1,3 @@ + + Exportar formulários + diff --git a/routes/web.php b/routes/web.php index 345b8a6..d80f5ce 100644 --- a/routes/web.php +++ b/routes/web.php @@ -10,6 +10,7 @@ Route::get('definitions', [DefinitionController::class, 'index'])->name('form-definitions.index'); Route::get('definitions/create', [DefinitionController::class, 'create'])->name('form-definitions.create'); Route::post('definitions', [DefinitionController::class, 'store'])->name('form-definitions.store'); + Route::get('definitions/export-all',[DefinitionController::class,'export_all'])->name('form-definitions.export-all'); Route::get('definitions/{formDefinition}', [DefinitionController::class, 'show'])->name('form-definitions.show'); Route::get('definitions/{formDefinition}/edit', [DefinitionController::class, 'edit'])->name('form-definitions.edit'); Route::put('definitions/{formDefinition}', [DefinitionController::class, 'update'])->name('form-definitions.update'); diff --git a/src/Http/Controllers/DefinitionController.php b/src/Http/Controllers/DefinitionController.php index 22ec891..c08a972 100644 --- a/src/Http/Controllers/DefinitionController.php +++ b/src/Http/Controllers/DefinitionController.php @@ -88,4 +88,37 @@ public function destroy(FormDefinition $formDefinition, Request $request) ->with('alert-danger', 'Não foi possível excluir: ' . $e->getMessage()); } } + + public function export_all() + { + $file_dir = base_path(config("uspdev-forms.forms_storage_dir")); + if(!is_dir($file_dir)) + { + mkdir($file_dir,0777,true); + } + $file_path = $file_dir . "/forms.json"; + + $json_file = fopen($file_path,"w"); + + $form_definitions = FormDefinition::all(); + $count = 1; + + fwrite($json_file,"[\n"); + foreach($form_definitions as $form_definition) + { + fwrite($json_file,json_encode($form_definition)); + fwrite($json_file,",\n\n"); + if($count == $form_definition->count() - 1){break;} + $count++; + } + + $last_def = FormDefinition::find($count + 1); + fwrite($json_file,json_encode($last_def) . "\n"); + + fwrite($json_file,"]"); + + fclose($json_file); + + return redirect()->route('form-definitions.index')->with('alert-success','Formulários exportados com sucesso!'); + } } From 22e19f75ceb510823468caf07e1848896c71daef Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Fri, 12 Dec 2025 11:10:59 -0300 Subject: [PATCH 2/5] =?UTF-8?q?Exporta=C3=A7=C3=A3o=20global=20finalizada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Formatação do arquivo .json contendo todos os formulários persistidos finalizada. --- src/Http/Controllers/DefinitionController.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Http/Controllers/DefinitionController.php b/src/Http/Controllers/DefinitionController.php index c08a972..c314878 100644 --- a/src/Http/Controllers/DefinitionController.php +++ b/src/Http/Controllers/DefinitionController.php @@ -102,19 +102,23 @@ public function export_all() $form_definitions = FormDefinition::all(); $count = 1; - + fwrite($json_file,"[\n"); foreach($form_definitions as $form_definition) { - fwrite($json_file,json_encode($form_definition)); - fwrite($json_file,",\n\n"); - if($count == $form_definition->count() - 1){break;} + $encoded_json = json_encode($form_definition,JSON_PRETTY_PRINT); + $linhas = explode("\n",$encoded_json); + foreach($linhas as $linha) + { + fwrite($json_file,"\t" . $linha . "\n"); + } + if($count < $form_definitions->count()) + { + fwrite($json_file,",\n\n"); + } $count++; } - $last_def = FormDefinition::find($count + 1); - fwrite($json_file,json_encode($last_def) . "\n"); - fwrite($json_file,"]"); fclose($json_file); From c4b045f3a5de971406a8b3a934993c2bb0c3cced Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Fri, 12 Dec 2025 16:11:46 -0300 Subject: [PATCH 3/5] =?UTF-8?q?Exporta=C3=A7=C3=A3o=20de=20formu=C3=A1rios?= =?UTF-8?q?=20individuais=20implementada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nova rota para exportação individual. Formulário salvo no fromato .json através de um botão na página de exibição das definições. Arquivo no formato 'nomedoformulário.json' --- .../partials/exportdefinition-btn.blade.php | 3 +++ routes/web.php | 1 + src/Http/Controllers/DefinitionController.php | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 resources/views/definition/partials/exportdefinition-btn.blade.php diff --git a/resources/views/definition/partials/exportdefinition-btn.blade.php b/resources/views/definition/partials/exportdefinition-btn.blade.php new file mode 100644 index 0000000..19d8a64 --- /dev/null +++ b/resources/views/definition/partials/exportdefinition-btn.blade.php @@ -0,0 +1,3 @@ + + Exportar + diff --git a/routes/web.php b/routes/web.php index d80f5ce..ee66e90 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,6 +11,7 @@ Route::get('definitions/create', [DefinitionController::class, 'create'])->name('form-definitions.create'); Route::post('definitions', [DefinitionController::class, 'store'])->name('form-definitions.store'); Route::get('definitions/export-all',[DefinitionController::class,'export_all'])->name('form-definitions.export-all'); + Route::get('definitions/{formDefinition}/export',[DefinitionController::class, 'export_definition'])->name('form-definitions.export-definition'); Route::get('definitions/{formDefinition}', [DefinitionController::class, 'show'])->name('form-definitions.show'); Route::get('definitions/{formDefinition}/edit', [DefinitionController::class, 'edit'])->name('form-definitions.edit'); Route::put('definitions/{formDefinition}', [DefinitionController::class, 'update'])->name('form-definitions.update'); diff --git a/src/Http/Controllers/DefinitionController.php b/src/Http/Controllers/DefinitionController.php index c314878..ea4f1db 100644 --- a/src/Http/Controllers/DefinitionController.php +++ b/src/Http/Controllers/DefinitionController.php @@ -125,4 +125,23 @@ public function export_all() return redirect()->route('form-definitions.index')->with('alert-success','Formulários exportados com sucesso!'); } + + public function export_definition(FormDefinition $formDefinition) + { + + $file_dir = base_path(config("uspdev-forms.forms_storage_dir")); + if(!is_dir($file_dir)) + { + mkdir($file_dir,0777,true); + } + + $file_path = $file_dir . "/" . $formDefinition['name'] . ".json"; + $json_file = fopen($file_path, "w"); + + fwrite($json_file, json_encode($formDefinition,JSON_PRETTY_PRINT)); + fclose($json_file); + + return redirect()->route('form-definitions.index')->with('alert-success','Definição de '. $formDefinition['name'] .' exportada com sucesso!'); + + } } From dad479c3b50d8daea59702833ad87d248f37516c Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Fri, 19 Dec 2025 16:13:29 -0300 Subject: [PATCH 4/5] =?UTF-8?q?Corrigida=20a=20formata=C3=A7=C3=A3o=20do?= =?UTF-8?q?=20JSON=20para=20car=C3=A1cteres=20especiais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Http/Controllers/DefinitionController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Http/Controllers/DefinitionController.php b/src/Http/Controllers/DefinitionController.php index ea4f1db..1a7ce39 100644 --- a/src/Http/Controllers/DefinitionController.php +++ b/src/Http/Controllers/DefinitionController.php @@ -106,7 +106,7 @@ public function export_all() fwrite($json_file,"[\n"); foreach($form_definitions as $form_definition) { - $encoded_json = json_encode($form_definition,JSON_PRETTY_PRINT); + $encoded_json = json_encode($form_definition,JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); $linhas = explode("\n",$encoded_json); foreach($linhas as $linha) { @@ -138,7 +138,7 @@ public function export_definition(FormDefinition $formDefinition) $file_path = $file_dir . "/" . $formDefinition['name'] . ".json"; $json_file = fopen($file_path, "w"); - fwrite($json_file, json_encode($formDefinition,JSON_PRETTY_PRINT)); + fwrite($json_file, json_encode($formDefinition,JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); fclose($json_file); return redirect()->route('form-definitions.index')->with('alert-success','Definição de '. $formDefinition['name'] .' exportada com sucesso!'); From 87e1fd850b4a0452be7a35f89e96d05b88ee9308 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Tue, 6 Jan 2026 12:01:23 -0300 Subject: [PATCH 5/5] =?UTF-8?q?Reformula=C3=A7=C3=A3o=20da=20exporta=C3=A7?= =?UTF-8?q?=C3=A3o=20global.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ao invés de sintetizar todos os formulários em um arquivo, salva cada um em um arquivo individual. Impede geração de conflitos entre versão do 'arquivo global' com os arquivos individuais. Assim o usuário deve modificar o arquivo individual referente ao formulário; --- src/Http/Controllers/DefinitionController.php | 49 +++++-------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/src/Http/Controllers/DefinitionController.php b/src/Http/Controllers/DefinitionController.php index 1a7ce39..f3570fe 100644 --- a/src/Http/Controllers/DefinitionController.php +++ b/src/Http/Controllers/DefinitionController.php @@ -89,43 +89,6 @@ public function destroy(FormDefinition $formDefinition, Request $request) } } - public function export_all() - { - $file_dir = base_path(config("uspdev-forms.forms_storage_dir")); - if(!is_dir($file_dir)) - { - mkdir($file_dir,0777,true); - } - $file_path = $file_dir . "/forms.json"; - - $json_file = fopen($file_path,"w"); - - $form_definitions = FormDefinition::all(); - $count = 1; - - fwrite($json_file,"[\n"); - foreach($form_definitions as $form_definition) - { - $encoded_json = json_encode($form_definition,JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); - $linhas = explode("\n",$encoded_json); - foreach($linhas as $linha) - { - fwrite($json_file,"\t" . $linha . "\n"); - } - if($count < $form_definitions->count()) - { - fwrite($json_file,",\n\n"); - } - $count++; - } - - fwrite($json_file,"]"); - - fclose($json_file); - - return redirect()->route('form-definitions.index')->with('alert-success','Formulários exportados com sucesso!'); - } - public function export_definition(FormDefinition $formDefinition) { @@ -144,4 +107,16 @@ public function export_definition(FormDefinition $formDefinition) return redirect()->route('form-definitions.index')->with('alert-success','Definição de '. $formDefinition['name'] .' exportada com sucesso!'); } + + public function export_all() + { + $form_definitions = FormDefinition::all(); + + foreach($form_definitions as $form_definition) + { + $this->export_definition($form_definition); + } + + return redirect()->route('form-definitions.index')->with('alert-success','Formulários exportados com sucesso!'); + } }