]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5351 @0.75
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 11 Jul 2022 08:03:12 +0000 (10:03 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 11 Jul 2022 08:03:12 +0000 (10:03 +0200)
app/Http/Controllers/Admin/Operations/Tools/JSON2Excel.php
resources/views/fields/fluidbook_chapters.blade.php

index 92ad98bff06f716d7d9d224ad69f8165e55787ca..dbd320aa9679d28977fa61277a5cd72d4398c009 100644 (file)
@@ -3,8 +3,13 @@
 namespace App\Http\Controllers\Admin\Operations\Tools;
 
 use Cubist\Backpack\Magic\Fields\Code;
+use Cubist\Backpack\Magic\Fields\Text;
 use Cubist\Backpack\Magic\Form;
 use Cubist\Util\Files\Files;
+use Cubist\Util\Str;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Style\Alignment;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 
 trait JSON2Excel
 {
@@ -14,6 +19,7 @@ trait JSON2Excel
         $form->setTitle(__('Convertir du JSON en excel'));
         $form->setSubmitLabel(__('Convertir'));
         $form->setSubmitIcon('la la-file-excel');
+        $form->addField('name', Text::class, __('Nom du fichier'), ['placeholder' => 'json', 'suffix' => '.xlsx']);
         $form->addField('json', Code::class, __('Contenu JSON'), ['language' => 'js']);
         return view('tools.form', ['form' => $form]);
     }
@@ -21,18 +27,38 @@ trait JSON2Excel
     public function dojson2excel()
     {
         $json = request()->get('json');
+        $name = request()->get('name', 'json');
+        $safename = Str::slug($name);
         $data = json_decode($json, true);
         $first = true;
         $excelData = [];
         foreach ($data as $line) {
             if ($first) {
                 $excelData[] = array_keys($line);
+                $first = false;
             }
             $excelData[] = array_values($line);
         }
 
         $tmpfile = Files::tempnam() . '.xlsx';
-        return response()->download($tmpfile, 'json.xlsx')->deleteFileAfterSend(true);
+
+        $spreadsheet = new Spreadsheet();
+        $sheet = $spreadsheet->getActiveSheet();
+        $sheet->setTitle($name);
+        $sheet->fromArray($excelData);
+
+        $highest = $sheet->getHighestRowAndColumn();
+        $sheet->getStyle('A1:' . $highest['column'] . '1')->applyFromArray(['font' => ['bold' => true,]]);
+
+        foreach ($sheet->getColumnIterator() as $column) {
+            $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
+        }
+        $sheet->getStyle('A1:' . $highest['column'] . $highest['row'])->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);
+
+        $writer = new Xlsx($spreadsheet);
+        $writer->save($tmpfile);
+
+        return response()->download($tmpfile, $safename . '.xlsx')->deleteFileAfterSend(true);
 
     }
 
index e0abff7f9b9fcd1d7edd5b2df26c4094aca8183b..641c3feacee0e9e80b1d3b661d323eb6a95eb197 100644 (file)
@@ -8,10 +8,14 @@
                     var json = $(this).closest('.bunchmultiple[data-values]').attr('data-values');
                     var form = $('<form action="{{backpack_url('tools/dojson2excel')}}" method="post">' +
                         '<input type="hidden" name="json" value="" />' +
+                        '<input type="hidden" name="name" value="" />' +
+                        '<input type="hidden" name="_token" value="{{csrf_token()}}" />' +
                         '</form>');
                     $('body').append(form);
-                    $(form).find('input').val(json);
+                    $(form).find('input[name="json"]').val(json);
+                    $(form).find('input[name="name"]').val('chapters_' + $('input[name="id"]').val());
                     form.submit();
+                    return false;
                 });
             });