]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5351 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 11 Jul 2022 12:52:12 +0000 (14:52 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 11 Jul 2022 12:52:12 +0000 (14:52 +0200)
app/Http/Controllers/Admin/Operations/Tools/Excel2JSON.php [new file with mode: 0644]
app/Http/Controllers/Admin/ToolsController.php
resources/views/fields/fluidbook_chapters.blade.php
resources/views/tools/sidebar.blade.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 (file)
index 0000000..5f70435
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations\Tools;
+
+use Cubist\Backpack\Magic\Fields\SelectFromArray;
+use Cubist\Backpack\Magic\Fields\StandardFile;
+use Cubist\Backpack\Magic\Form;
+use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+
+trait Excel2JSON
+{
+    public function excel2json()
+    {
+        $form = new Form(backpack_url('tools/doexcel2json'));
+        $form->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;
+    }
+
+
+}
index 7672c25a89599ccf417aad952e48cca8a0ff9835..5b991dcfd37c8e5ed2dd3696a372afea6f643589 100644 (file)
@@ -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 = '')
     {
index 641c3feacee0e9e80b1d3b661d323eb6a95eb197..8aeacdddd521c0205c6662c9af0f4c5fa21cecf4 100644 (file)
@@ -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 = $('<form action="{{backpack_url('tools/dojson2excel')}}" method="post">' +
                         '<input type="hidden" name="json" value="" />' +
                         '<input type="hidden" name="name" value="" />' +
                     form.submit();
                     return false;
                 });
+                $(document).on('click', '.chaptersImportExcel', function () {
+                    var form = $('<form action="{{backpack_url('tools/doexcel2json')}}" enctype="multipart/form-data" method="post">' +
+                        '<input type="file" name="file" value="" accept="*.xlsx" />' +
+                        '<input type="hidden" name="type" value="firstrowaskey" />' +
+                        '<input type="hidden" name="_token" value="{{csrf_token()}}" />' +
+                        '</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='<a href="#" class="btn btn-sm btn-secondary"><i class="la la-file-excel"></i> '.__('Remplacer par le contenu d\'un fichier excel').'</a>';
+    $additionalButtons='<a href="#" class="btn btn-sm btn-secondary chaptersImportExcel"><i class="la la-file-excel"></i> '.__('Remplacer par le contenu d\'un fichier excel').'</a>';
     $additionalButtons.='<a href="#" class="btn btn-sm btn-success chaptersExportExcel"><i class="la la-file-excel"></i> '.__('Exporter au format excel').'</a>';
 @endphp
 @include('cubist_back::fields.bunch_oneline_multiple')
index 0927b576d29e7676cf6ebf76af08736dc2e1fb2d..e4e8c4e71a9e500426b07deb4a3898f5b69d71db 100644 (file)
@@ -17,6 +17,9 @@
     <li class='nav-item'><a class='nav-link' href='{{ backpack_url('tools/json2excel') }}'><i
                 class='nav-icon la la-file-excel'></i>
             <span>{{__('JSON to Excel')}}</span></a></li>
+    <li class='nav-item'><a class='nav-link' href='{{ backpack_url('tools/excel2json') }}'><i
+                class='nav-icon las la-code'></i>
+            <span>{{__('Excel to JSON')}}</span></a></li>
     {{--            <li class='nav-item'><a class='nav-link' href='{{ backpack_url('tools/securehosting') }}'><i--}}
     {{--                        class='nav-icon la la-lock'></i>--}}
     {{--                    <span>{{__('Sécuriser hosting')}}</span></a></li>--}}