--- /dev/null
+<?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;
+ }
+
+
+}
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;
use TextToSpeech;
use DockerWebContainer;
use JSON2Excel;
+ use Excel2JSON;
protected function index($tool, $args = '')
{
$(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;
+ });
});
@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')
<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>--}}