From 1c2d536af0afe49ae108d8db514cd8b1108c33b8 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Mon, 11 Jul 2022 14:52:12 +0200 Subject: [PATCH] wip #5351 @1.5 --- .../Admin/Operations/Tools/Excel2JSON.php | 67 +++++++++++++++++++ .../Controllers/Admin/ToolsController.php | 2 + .../views/fields/fluidbook_chapters.blade.php | 23 ++++++- resources/views/tools/sidebar.blade.php | 3 + 4 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/Admin/Operations/Tools/Excel2JSON.php diff --git a/app/Http/Controllers/Admin/Operations/Tools/Excel2JSON.php b/app/Http/Controllers/Admin/Operations/Tools/Excel2JSON.php new file mode 100644 index 000000000..5f704354b --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/Tools/Excel2JSON.php @@ -0,0 +1,67 @@ +setTitle(__('Convertir un fichier Excel en JSON')); + $form->setEnctype('multipart/form-data'); + $form->setSubmitLabel(__('Convertir')); + $form->setSubmitIcon('lab la-js-square'); + $form->addField('file', StandardFile::class, __('Fichier excel'), ['accept' => '.xlsx']); + $form->addField('type', SelectFromArray::class, __('Type'), ['allows_null' => false, 'default' => 'firstrowaskey', 'options' => ['firstrowaskey' => __('Clé sur la première ligne'), 'raw' => __('Données brutes')]]); + return view('tools.form', ['form' => $form]); + } + + public function doexcel2json() + { + /** @var UploadedFile $file */ + $file = request()->file('file'); + $type = request()->file('type', 'firstrowaskey'); + + $reader = new Xlsx(); + $spreadsheet = $reader->load($file->getPathname()); + + $res = []; + foreach ($spreadsheet->getAllSheets() as $sheet) { + $array = $sheet->toArray(''); + if ($type === 'raw') { + $data = $array; + } else if ($type === 'firstrowaskey') { + $data = self::_firstRowAsKey($array); + } + $s = ['title' => $sheet->getTitle(), 'data' => $data]; + $res[] = $s; + } + return response()->json($res); + + } + + protected function _firstRowAsKey($array) + { + $res = []; + foreach ($array as $lineNumber => $line) { + if ($lineNumber === 0) { + $keys = array_values($line); + continue; + } + $l = []; + foreach ($line as $k => $v) { + $l[$keys[$k]] = $v; + } + $res[] = $l; + } + return $res; + } + + +} diff --git a/app/Http/Controllers/Admin/ToolsController.php b/app/Http/Controllers/Admin/ToolsController.php index 7672c25a8..5b991dcfd 100644 --- a/app/Http/Controllers/Admin/ToolsController.php +++ b/app/Http/Controllers/Admin/ToolsController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Admin\Operations\Tools\DockerWebContainer; +use App\Http\Controllers\Admin\Operations\Tools\Excel2JSON; use App\Http\Controllers\Admin\Operations\Tools\FluidbookAssetsDownloader; use App\Http\Controllers\Admin\Operations\Tools\GitReposCreate; use App\Http\Controllers\Admin\Operations\Tools\JSON2Excel; @@ -20,6 +21,7 @@ class ToolsController extends Controller use TextToSpeech; use DockerWebContainer; use JSON2Excel; + use Excel2JSON; protected function index($tool, $args = '') { diff --git a/resources/views/fields/fluidbook_chapters.blade.php b/resources/views/fields/fluidbook_chapters.blade.php index 641c3feac..8aeacdddd 100644 --- a/resources/views/fields/fluidbook_chapters.blade.php +++ b/resources/views/fields/fluidbook_chapters.blade.php @@ -5,7 +5,7 @@ $(function () { $(document).trigger('fluidbook_chapters.level.change'); $(document).on('click', '.chaptersExportExcel', function () { - var json = $(this).closest('.bunchmultiple[data-values]').attr('data-values'); + var json = $(this).closest('.bunchmultiple[data-values]').find('.hiddenfield').eq(0).val(); var form = $('
' + '' + '' + @@ -17,6 +17,25 @@ form.submit(); return false; }); + $(document).on('click', '.chaptersImportExcel', function () { + var form = $('' + + '' + + '' + + '' + + '
'); + $('body').append(form); + var file = $(form).find('input[type="file"]'); + $(file).on('change', function () { + $(form).ajaxSubmit({ + success: function (data) { + var bm = $('[data-bunch-name="{{$field['name']}}"]').data('bunchmultiple'); + bm.replaceData(data[0].data); + } + }); + }); + file.trigger('click'); + return false; + }); }); @@ -49,7 +68,7 @@ @endif @php - $additionalButtons=' '.__('Remplacer par le contenu d\'un fichier excel').''; + $additionalButtons=' '.__('Remplacer par le contenu d\'un fichier excel').''; $additionalButtons.=' '.__('Exporter au format excel').''; @endphp @include('cubist_back::fields.bunch_oneline_multiple') diff --git a/resources/views/tools/sidebar.blade.php b/resources/views/tools/sidebar.blade.php index 0927b576d..e4e8c4e71 100644 --- a/resources/views/tools/sidebar.blade.php +++ b/resources/views/tools/sidebar.blade.php @@ -17,6 +17,9 @@ + {{-- --}} -- 2.39.5