From: Vincent Vanwaelscappel Date: Mon, 11 Jul 2022 08:03:12 +0000 (+0200) Subject: wip #5351 @0.75 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=6503de794ed125768cedf7c7c110388ee66f3954;p=fluidbook-toolbox.git wip #5351 @0.75 --- diff --git a/app/Http/Controllers/Admin/Operations/Tools/JSON2Excel.php b/app/Http/Controllers/Admin/Operations/Tools/JSON2Excel.php index 92ad98bff..dbd320aa9 100644 --- a/app/Http/Controllers/Admin/Operations/Tools/JSON2Excel.php +++ b/app/Http/Controllers/Admin/Operations/Tools/JSON2Excel.php @@ -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); } diff --git a/resources/views/fields/fluidbook_chapters.blade.php b/resources/views/fields/fluidbook_chapters.blade.php index e0abff7f9..641c3feac 100644 --- a/resources/views/fields/fluidbook_chapters.blade.php +++ b/resources/views/fields/fluidbook_chapters.blade.php @@ -8,10 +8,14 @@ var json = $(this).closest('.bunchmultiple[data-values]').attr('data-values'); var 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; }); });