]> _ Git - fluidbook-toolbox.git/commitdiff
wip #4628 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 20 Jul 2022 16:21:56 +0000 (18:21 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 20 Jul 2022 16:21:56 +0000 (18:21 +0200)
app/Http/Controllers/Admin/Operations/Tools/PDF2SVGOperation.php
app/Models/Traits/PublicationSettings.php
resources/views/fields/fluidbook_chapters.blade.php
resources/views/fields/fluidbook_composition.blade.php
resources/views/vendor/backpack/crud/buttons/quiz/import.blade.php

index b8ec38b7e2bb7e2357f19905c753369d3bdff16f..39a57f439ed2fb6d19c0575b543a761814039b4a 100644 (file)
@@ -35,7 +35,7 @@ trait PDF2SVGOperation
         $form->setTitle(__('Convertir un fichier pdf en images'));
         $form->setSubmitLabel(__('Convertir'));
         $form->setSubmitIcon('la-image');
-        $form->addField('file', StandardFile::class, __('Fichier pdf'), ['accept' => '*.pdf']);
+        $form->addField('file', StandardFile::class, __('Fichier pdf'), ['accept' => '.pdf']);
         $form->addField('format', SelectFromArray::class, __('Format'), ['allows_null' => false, 'options' => ['svg' => 'SVG', 'jpg' => 'JPG', 'png' => 'PNG']]);
         $form->addField('resolution', Integer::class, __('Resolution'), ['default' => 0, 'step' => 50, 'min' => 0, 'max' => 1800, 'hint' => __('0 pour conserver la résolution initiale')]);
         $form->addField('withGraphics', Checkbox::class, __('Couche des graphismes'), ['default' => true]);
index 9429a7b5ea45919fcff0e28628fe41d367bc3262..237e5586d3d12d8506dcfa490c37cdcabcb59e87 100644 (file)
@@ -21,6 +21,8 @@ trait PublicationSettings
 {
     public function setSettingsFields()
     {
+        $acceptImages = ['.svg', '.jpg', '.jpeg', '.png', '.gif'];
+
         $this->addField('section_important', FormSection::class, $this->__('Description de la publication'));
         $this->addField('mobileLVersion', FluidbookDevelopmentVersion::class, $this->__('Version logicielle'), [
             'v2' => '{"type":"combo","default":"stable","editable":true,"label":"\\u00a7!\\u00a7Version logicielle!\\u00a7!","grade":1,"datas":{"master : git (stable)":"stable","master : local (dev)":"dev","icon-bar : git":"icon-bar|git","icon-bar : local":"icon-bar|local"}}',
@@ -175,9 +177,9 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Miniature affich\\u00e9e!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"}}',
             'default' => '',
             'accept' => [
-                0 => '*.jpg',
-                1 => '*.jpeg',
-                2 => '*.png',
+                0 => '.jpg',
+                1 => '.jpeg',
+                2 => '.png',
             ],
             'fake' => true,
             'store_in' => 'settings',
@@ -313,7 +315,7 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Donn\\u00e9es SEO par page!\\u00a7!","grade":5,"fileFilter":{"name":"\\u00a7!\\u00a7Fichier Excel!\\u00a7! (.xlsx)","extensions":"*.xlsx"}}',
             'default' => '',
             'accept' => [
-                0 => '*.xlsx',
+                0 => '.xlsx',
             ],
             'fake' => true,
             'store_in' => 'settings',
@@ -659,13 +661,7 @@ trait PublicationSettings
         $this->addField('navExtraImage', FilesOrURL::class, $this->__('Image pour navigation'), [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour navigation!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -673,13 +669,7 @@ trait PublicationSettings
         $this->addField('navExtraImageMobile', FilesOrURL::class, $this->__('Image pour mobile'), [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour mobile!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -702,13 +692,7 @@ trait PublicationSettings
         $this->addField('navExtraIcon1', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 1', [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 1","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -747,13 +731,7 @@ trait PublicationSettings
         $this->addField('navExtraIcon2', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 2', [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 2","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -792,13 +770,7 @@ trait PublicationSettings
         $this->addField('navExtraIcon3', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 3', [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 3","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -837,13 +809,7 @@ trait PublicationSettings
         $this->addField('navExtraIcon4', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 4', [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 4","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -882,13 +848,7 @@ trait PublicationSettings
         $this->addField('navExtraIcon5', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 5', [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 5","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -1418,13 +1378,7 @@ trait PublicationSettings
         $this->addField('sliderImage', FilesOrURL::class, $this->__('Image pour le slider'), [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour le slider!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -1684,8 +1638,8 @@ trait PublicationSettings
             'hint' => $this->__('Charger un zip rendra les options ci-dessous inopérantes'),
             'default' => '',
             'accept' => [
-                0 => '*.zip',
-                1 => '*.svg',
+                0 => '.zip',
+                1 => '.svg',
             ],
             'fake' => true,
             'store_in' => 'settings',
@@ -1932,7 +1886,7 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Feuille de style des popups de texte!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Feuille de style!\\u00a7! (.css)","extensions":"*.css"}}',
             'default' => '',
             'accept' => [
-                0 => '*.css',
+                0 => '.css',
             ],
             'fake' => true,
             'store_in' => 'settings',
@@ -2084,13 +2038,7 @@ trait PublicationSettings
         $this->addField('bigPlayImage', FilesOrURL::class, $this->__('Image pour le bouton "Big Play"'), [
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour le bouton \\"Big Play\\"!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}',
             'default' => '',
-            'accept' => [
-                0 => '*.svg',
-                1 => '*.jpg',
-                2 => '*.jpeg',
-                3 => '*.png',
-                4 => '*.gif',
-            ],
+            'accept' => $acceptImages,
             'fake' => true,
             'store_in' => 'settings',
             'translatable' => false,
@@ -2129,8 +2077,8 @@ trait PublicationSettings
             'hint' => $this->__('Fichier contenant les références produits'),
             'default' => '',
             'accept' => [
-                0 => '*.xml',
-                1 => '*.xlsx',
+                0 => '.xml',
+                1 => '.xlsx',
             ],
             'destination' => 'commerce',
             'fake' => true,
@@ -2366,7 +2314,7 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Contenus textuels pour l\'audiodescription ou les lecteurs d\'\\u00e9cran!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Fichier Excel!\\u00a7! (.xlsx)","extensions":"*.xlsx"}}',
             'default' => '',
             'accept' => [
-                0 => '*.xlsx',
+                0 => '.xlsx',
             ],
             'fake' => true,
             'store_in' => 'settings',
@@ -2392,9 +2340,9 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"}}',
             'default' => '',
             'accept' => [
-                0 => '*.jpg',
-                1 => '*.jpeg',
-                2 => '*.png',
+                0 => '.jpg',
+                1 => '.jpeg',
+                2 => '.png',
             ],
             'fake' => true,
             'store_in' => 'settings',
@@ -2438,7 +2386,7 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"Articles","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Liste d\'articles!\\u00a7! (*.xml)","extensions":"*.xml"}}',
             'default' => '',
             'accept' => [
-                0 => '*.xml',
+                0 => '.xml',
             ],
             'fake' => true,
             'store_in' => 'settings',
@@ -2499,9 +2447,9 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Archives!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"}}',
             'default' => '',
             'accept' => [
-                0 => '*.jpg',
-                1 => '*.jpeg',
-                2 => '*.png',
+                0 => '.jpg',
+                1 => '.jpeg',
+                2 => '.png',
             ],
             'fake' => true,
             'store_in' => 'settings',
@@ -2618,8 +2566,8 @@ trait PublicationSettings
             'hint' => $this->__('Fichier contenant les références produits'),
             'default' => '',
             'accept' => [
-                0 => '*.xml',
-                0 => '*.xlsx',
+                0 => '.xml',
+                1 => '.xlsx',
             ],
             'destination' => 'commerce',
             'fake' => true,
@@ -2639,9 +2587,9 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Header panier!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"},"dir":"commerce"}',
             'default' => '',
             'accept' => [
-                0 => '*.jpg',
-                1 => '*.jpeg',
-                2 => '*.png',
+                0 => '.jpg',
+                1 => '.jpeg',
+                2 => '.png',
             ],
             'destination' => 'commerce',
             'fake' => true,
@@ -2652,9 +2600,9 @@ trait PublicationSettings
             'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Header panier (mobile)!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"},"dir":"commerce"}',
             'default' => '',
             'accept' => [
-                0 => '*.jpg',
-                1 => '*.jpeg',
-                2 => '*.png',
+                0 => '.jpg',
+                1 => '.jpeg',
+                2 => '.png',
             ],
             'destination' => 'commerce',
             'fake' => true,
@@ -2788,7 +2736,7 @@ L,index',
             'v2' => '{"type":"freefile","label":"S\\u00e9curisation par mot de passe c\\u00f4t\\u00e9 client","editable":true,"default":"","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Fichier HTML!\\u00a7! (*.html)","extensions":"*.html"}}',
             'default' => '',
             'accept' => [
-                0 => '*.html',
+                0 => '.html',
             ],
             'fake' => true,
             'store_in' => 'settings',
index 8aeacdddd521c0205c6662c9af0f4c5fa21cecf4..d661b82f46e3a3a86d88465cc1eb2b38c7737250 100644 (file)
@@ -18,8 +18,8 @@
                     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" />' +
+                    var form = $('<form style="opacity:0;position:absolute;top:0;left:0;" 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>');
index 1b86ceeb7d96edcf0ed5dd94f7dc6fa82b260a9c..07c82fb48237bd2e045dcf0788802936092ac202 100644 (file)
@@ -3,10 +3,16 @@
     @push('crud_fields_scripts')
         <script>
             $(function () {
+                var conversion = 0;
+                var conversionOperation;
+                var conversionPages;
+
                 function initPages() {
                     var data = JSON.parse($("#compositionField").val());
                     var numbers = $('input[name="page_numbers"]').val().split(',');
                     var sizes = $("#compositionField").data('doc-sizes');
+
+
                     $.each(data, function (pageNr, page) {
                         addPage(page[0], page[1], numbers[pageNr - 1], sizes[page[0]]);
                     });
                         },
                     });
 
+                    $(document).on('change', '#compositionUploadBrowse', function () {
+                        $("#compositionUploadForm").submit();
+                    });
+                    $(document).on('submit', '#compositionUploadForm', function () {
+                        $(form).ajaxSubmit({
+                            success: function (data) {
+                                var bm = $('[data-bunch-name="{{$field['name']}}"]').data('bunchmultiple');
+                                bm.replaceData(data[0].data);
+                            }
+                        });
+                        return false;
+                    });
+                    $(document).on('click', '#compositionAddPDF', function () {
+                        compositionBrowse('after', getPageNumber());
+                        return false;
+                    });
                 }
 
                 function updateComposition() {
                     $("#composition_pages").append('<div class="page" data-id="[' + document_id + ',' + document_page + ']"><div class="handle"><img width="' + size[0] + '" height="' + size[1] + '" src="/fluidbook-publication/docs/' + document_id + '/thumb_' + document_page + '.jpg" /></div><span>' + pageNumber + '</span></div>');
                 }
 
+                function compositionBrowse(operation, pages) {
+                    if (conversion > 0) {
+                        Noty.warn('{{__("Un document est déjà en cours d'ajout")}}');
+                        return;
+                    }
+                    conversionOperation = operation;
+                    conversionPages = pages;
+
+                    $("#compositionUploadForm").remove();
+                    var form = $('<form id="compositionUploadForm" action="{{backpack_url('publications/uploaddocument')}}" enctype="multipart/form-data" method="post">' +
+                        '<input type="file" id="compositionUploadBrowse" name="file" value="" accept=".pdf" />' +
+                        '<input type="hidden" name="_token" value="{{csrf_token()}}" />' +
+                        '</form>');
+                    $('body').append(form);
+
+                    $("#compositionUploadBrowse").click();
+                }
+
                 function compositionContextMulti() {
                     return {
                         selectall: {
                         replaceSelection: {
                             name: "{{__('Remplacer les pages de la sélection')}}",
                             callback: function (key, opt) {
-
+                                compositionBrowse('replace', selection);
                             }
                         },
                     };
                 }
 
+                function getSelectedPages() {
+                    var res = [];
+                    $("#composition_pages .page.selected").each(function () {
+                        res.push($(this).index() + 1);
+                    });
+                    return res;
+                }
+
                 function compositionContextSimple() {
                     return {
                         selectall: {
                         },
                         sep2: "---------",
                         insertBefore: {
-                            name: "{{__('Insérer des pages avant')}}",
+                            name: "{{__('Insérer des pages avant cette page')}}",
                             callback: function (key, opt) {
-
+                                compositionBrowse('before', opt.$trigger[0].index() + 1);
                             }
                         },
                         insertAfter: {
                             name: "{{__('Insérer des pages après cette page')}}",
                             callback: function (key, opt) {
-
+                                compositionBrowse('before', opt.$trigger[0].index() + 1);
                             }
                         },
                         sep3: "---------",
               crossorigin="anonymous" referrerpolicy="no-referrer"/>
         <style>
             #composition {
-                padding: 0 10px;
+                padding: 0 5px;
             }
 
             #composition_pages .page {
             .context-menu-item.context-menu-hover {
                 background-color: #467fcf;
             }
+            #composition_uploader{
+                position: relative;
+                top:-10px;
+                left:12px;
+            }
         </style>
 
     @endpush
         data-doc-sizes="{{  json_encode($entry->getDocumentSizes()) }}"
         @include('crud::fields.inc.attributes')
     >
-    <div id="composition_uploader"></div>
+    <div id="composition_uploader">
+        <a class="btn btn-primary" href="#" data-toggle="tooltip" title="{{__('Charger un PDF')}}"
+           id="compositionAddPDF"><i
+                class="la la-upload"></i> {{__('Charger un PDF')}}</a>
+    </div>
     <div id="composition_pages"></div>
 </div>
index 5d3e973b4cfc4d859b58734f544f44201899ce1c..33be3adce1ecfb7554e0b042244f976ab41f503c 100644 (file)
@@ -18,7 +18,7 @@
 
                 $(document).on('change', '#uploadimportform', function () {
                     $("#uploadimportform").submit();
-                })
+                });
             });
         })(jQuery);
     </script>