]> _ Git - fluidbook-toolbox.git/commitdiff
wip #4209 @5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 18 Jul 2022 15:48:07 +0000 (17:48 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 18 Jul 2022 15:48:07 +0000 (17:48 +0200)
app/Fields/FluidbookChapters.php
app/Http/Controllers/Admin/Operations/FluidbookPublication/CompositionOperation.php
app/Models/FluidbookPublication.php
resources/views/fields/fluidbook_composition.blade.php

index 1f2966bd53e22d1b6a827a34ef886e0a476c3b3e..6a8f057c6f8642ca957763d230c62be07eec7e9d 100644 (file)
@@ -22,12 +22,16 @@ class FluidbookChapters extends BunchOfFieldsMultiple
         if (!$value) {
             return $value;
         }
-        $v = json_decode($value, true);
+        if (is_string($value)) {
+            $v = json_decode($value, true);
+        } else {
+            $v = $value;
+        }
         if (!$v) {
             return $value;
         }
         $res = [];
-        foreach ($v as $k=>$chapter) {
+        foreach ($v as $k => $chapter) {
             $chapter['type'] = 'regular';
             $chapter['label'] = trim($chapter['label']);
             if ($chapter['label'] === '----') {
@@ -43,7 +47,7 @@ class FluidbookChapters extends BunchOfFieldsMultiple
                 $chapter['label'] = substr($chapter['label'], 3);
                 $chapter['type'] = 'column_head';
             }
-            $res[$k]=$chapter;
+            $res[$k] = $chapter;
         }
 
 
index 2ba9798230e3a7ba372a643cc4de415301b4daf0..a01d8d848d5ee56f5344411bab2908ea0e61ec39 100644 (file)
@@ -25,9 +25,4 @@ trait CompositionOperation
         $path = $doc->getFile($doc_page, 'jpg', 'thumb', true, true, '');
         return response(null)->header('Content-Type', Files::_getMimeType($path))->header('X-Sendfile', $path);
     }
-
-    protected function getComposition()
-    {
-        $res = [];
-    }
 }
index fe18c750750b6262841e8f7b4be81125960f75ae..adbb93657c2037e28812e8ca130aad44cf9da5b7 100644 (file)
@@ -12,6 +12,8 @@ use App\Http\Controllers\Admin\Operations\FluidbookPublication\CompositionOperat
 use App\Models\Base\ToolboxModel;
 use App\Models\Traits\PublicationSettings;
 use App\Models\Traits\SCORMVersionTrait;
+use App\Widgets;
+use Backpack\CRUD\app\Library\Widget;
 use Cubist\Backpack\Magic\Fields\Datetime;
 use Cubist\Backpack\Magic\Fields\FormBigSection;
 use Cubist\Backpack\Magic\Fields\FormSuperSection;
@@ -178,4 +180,16 @@ class FluidbookPublication extends ToolboxModel
         $compo = $this->composition[$page];
         return self::_getDocument($compo[0])->getFile($compo[1], $format, $resolution, $withText, $withGraphics, $version, $force);
     }
+
+    public function addWidgets()
+    {
+        Widget::add([
+            'type' => 'alert',
+            'class' => 'alert alert-danger mb-2',
+            'heading' => __('En cours de développement'),
+            'content' => __('Les données et interfaces présentées dans cette section ne sont pas synchronisées avec les données en production. Toutes les modifications effectuées ici peuvent dont disparaître à tout moment.') . ' <p><a class="btn btn-warning" href="https://workshop.fluidbook.com/publications">' . __('Retour en production') . '</a></p>',
+            'close_button' => false, // show close button or not
+        ]);
+
+    }
 }
index be31047643856cf009dc40639098a82406e23f44..996a11e7724beb88d2f4b3da1e95eca22b440332 100644 (file)
@@ -1,6 +1,7 @@
 @if (!isset($seenFluidbookComposition))
     @php $seenFluidbookComposition=true;@endphp
     @push('crud_fields_scripts')
+
         <script>
             $(function () {
                 function initPages() {
                     $.each(data, function (pageNr, page) {
                         addPage(page[0], page[1], numbers[pageNr - 1]);
                     });
+
+                    var composition = $('#composition_pages').get(0);
+
+                    window.compositionSortable = new Sortable(composition, {
+                        multiDrag: true,
+                        selectedClass: 'selected',
+                        fallbackTolerance: 3,
+                        animation: 150,
+                        multiDragKey: 'CTRL',
+                        onSort: function (e) {
+                            updateComposition();
+                        }
+                    });
+
+                    var listener = new window.keypress.Listener();
+                    listener.simple_combo("meta a", function () {
+                        if (!compositionIsActive()) {
+                            return true;
+                        }
+                        $(composition).find('.page').each(function () {
+                            Sortable.utils.select(this);
+                        });
+                        return false;
+                    });
+
+                    listener.simple_combo("delete", function () {
+                        if (!compositionIsActive()) {
+                            return true;
+                        }
+                        $(composition).find('.page.selected').remove();
+                        return false;
+                    });
+                }
+
+                function updateComposition() {
+                    var res = {};
+                    var numbers = [];
+                    var i = 1;
+                    $("#composition_pages .page").each(function () {
+                        res[i] = $(this).data('id');
+                        numbers.push($(this).find('span').text());
+                        i++;
+                    });
+                    $("#compositionField").val(JSON.stringify(res));
+                    $('input[name="page_numbers"]').val(numbers.join(','));
+                }
+
+                function compositionIsActive() {
+                    return $("#composition_pages .page.selected").length > 0;
                 }
 
                 function addPage(document_id, document_page, pageNumber) {
-                    $("#composition_pages").append('<div class="page"><img src="/fluidbook-publication/docs/' + document_id + '/thumb_' + document_page + '.jpg" /><span>' + pageNumber + '</span></div>');
+                    $("#composition_pages").append('<div class="page" data-id="[' + document_id + ',' + document_page + ']"><img src="/fluidbook-publication/docs/' + document_id + '/thumb_' + document_page + '.jpg" /><span>' + pageNumber + '</span></div>');
                 }
 
                 initPages();
             });
         </script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.15.0/Sortable.min.js"
+                integrity="sha512-Eezs+g9Lq4TCCq0wae01s9PuNWzHYoCMkE97e2qdkYthpI0pzC3UGB03lgEHn2XM85hDOUF6qgqqszs+iXU4UA=="
+                crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/keypress/2.1.5/keypress.min.js"
+                integrity="sha512-JjqUcblrwIZTQBPL/azOhVHwq5uaeXkKzq7da3JZEP14Zg926vZZVhRhBBi+L2pWYquZ6r5P8OZYDYgOChtkOw=="
+                crossorigin="anonymous" referrerpolicy="no-referrer"></script>
     @endpush
 
     @push('crud_fields_styles')
         <style>
+            #composition {
+                padding: 0 10px;
+            }
+
+            #composition_pages .page {
+                display: inline-block;
+                width: 100px;
+                padding: 8px;
+                margin: 5px;
+                vertical-align: top;
+                border: 1px solid transparent;
+                border-radius: 4px;
+                cursor: pointer;
+            }
+
+            #composition_pages .page:hover, #composition_pages .page.selected {
+                border-color: #467fcf;
+            }
+
+            #composition_pages .page.selected {
+                background-color: #b5cbf5;
+            }
+
+            #composition_pages .page span {
+                display: block;
+                text-align: center;
+                font-size: 12px;
+                cursor: text;
+                min-width: 20px;
+                height: 20px;
+                margin-top: 2px;
+            }
+
+            #composition_pages .page img {
+                width: 100%;
+                height: auto;
+                box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.25);
 
+            }
         </style>
     @endpush
 @endif