]> _ Git - fluidbook-toolbox.git/commitdiff
wait #6717 @7:00
authorsoufiane <soufiane@cubedesigners.com>
Tue, 20 Feb 2024 16:49:30 +0000 (17:49 +0100)
committersoufiane <soufiane@cubedesigners.com>
Tue, 20 Feb 2024 16:49:30 +0000 (17:49 +0100)
app/Http/Controllers/Admin/Operations/FluidbookPublication/DownloadOperation.php
resources/views/vendor/backpack/crud/buttons/fluidbook_publication/download.blade.php
resources/views/vendor/backpack/crud/edit-external-server.blade.php
resources/views/vendor/backpack/crud/inc/export_buttons.blade.php [new file with mode: 0644]
resources/views/vendor/backpack/crud/list.blade.php

index bb4fc8605aa900791545a8ceec3a28ae094e69a6..a8d708b0e36c5a3fd2757d7aba618efdae543f76 100644 (file)
@@ -23,6 +23,7 @@ trait DownloadOperation
         Route::match(['get'], $segment . '/{id}/package/{action}/scorm/{scormversion}', $controller . '@packageScorm');
         Route::match(['get'], $segment . '/{id}_{hash}/download/{file}', $controller . '@download')->withoutMiddleware([CheckIfAdmin::class]);
         Route::match(['get','post'], $segment . '/download_settings/{file}', $controller . '@downloadSettings')->withoutMiddleware([CheckIfAdmin::class])->name("download_settings");
+        Route::match(['post'], $segment . '/send_link/{ids}', $controller . '@sendLinkForDownload')->name("send_link");
     }
 
     protected function setupDownloadDefaults()
@@ -132,7 +133,12 @@ trait DownloadOperation
     protected function downloadSettings($file) {
         $name = "settings_export";
         $path = "/tmp/cubist".base64_decode($file);
-        if(!file_exists($path)) abort(404);
+        if (!file_exists($path)) abort(404);
         return response()->download($path, $name . '.xlsx');
     }
+
+    protected function sendLinkForDownload($ids) {
+        $userId = backpack_user()->id;
+        dispatch_sync(new FluidbookSettingsExport($ids,$userId));
+    }
 }
index 4caf20ca96bc3cb3445849ee1613d5997bc4535c..acb9e693d1498eef045769d0640920c32e580c91 100644 (file)
@@ -78,7 +78,7 @@
 
     <a class="btn btn-sm btn-link" href="#"
        data-toggle="tooltip"
-       @if($entry->status<2 && !can('fluidbook-publication:admin'))
+       @if($entry->status==1 && !can('fluidbook-publication:admin'))
            data-context-confirm="{{json_encode($confirm)}}"
        @endif
        title="{{__('Télécharger la publication')}}"
index 6cc8a6d8c60184922edcde395a2451b779a1cbc1..7432ef105dfdd8f78c48b5fb091f011edb7617aa 100644 (file)
@@ -21,6 +21,8 @@
                 const data = {
                     id: {{$entry->id}},
                     protocol: $('[name=protocol]').val(),
+                    base_path: $('[name=base_path]').val(),
+                    ftp_mode: $('[name=ftp_mode]').val(),
                     host: $('[name=host]').val(),
                     port: $('[name=port]').val(),
                     username: $('[name=username]').val(),
diff --git a/resources/views/vendor/backpack/crud/inc/export_buttons.blade.php b/resources/views/vendor/backpack/crud/inc/export_buttons.blade.php
new file mode 100644 (file)
index 0000000..8b0a67a
--- /dev/null
@@ -0,0 +1,163 @@
+@if ($crud->exportButtons())
+    <script src="https://cdn.datatables.net/buttons/1.5.6/js/dataTables.buttons.min.js" type="text/javascript"></script>
+    <script src="https://cdn.datatables.net/buttons/1.5.6/js/buttons.bootstrap4.min.js" type="text/javascript"></script>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/jszip/2.5.0/jszip.min.js" type="text/javascript"></script>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.18/pdfmake.min.js" type="text/javascript"></script>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.18/vfs_fonts.js" type="text/javascript"></script>
+    <script src="//cdn.datatables.net/buttons/1.5.6/js/buttons.html5.min.js" type="text/javascript"></script>
+    <script src="//cdn.datatables.net/buttons/1.5.6/js/buttons.print.min.js" type="text/javascript"></script>
+    <script src="//cdn.datatables.net/buttons/1.5.6/js/buttons.colVis.min.js" type="text/javascript"></script>
+    <script>
+        let dataTablesExportStrip = text => {
+            if ( typeof text !== 'string' ) {
+                return text;
+            }
+
+            return text
+                .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
+                .replace(/<!\-\-.*?\-\->/g, '')
+                .replace(/<[^>]*>/g, '')
+                .replace(/^\s+|\s+$/g, '')
+                .replace(/\s+([,.;:!\?])/g, '$1')
+                .replace(/\s+/g, ' ')
+                .replace(/[\n|\r]/g, ' ');
+        };
+
+        let dataTablesExportFormat = {
+            body: (data, row, column, node) =>
+                node.querySelector('input[type*="text"]')?.value ??
+                node.querySelector('input[type*="checkbox"]:not(.crud_bulk_actions_line_checkbox)')?.checked ??
+                node.querySelector('select')?.selectedOptions[0]?.value ??
+                dataTablesExportStrip(data),
+        };
+
+        window.crud.dataTableConfiguration.buttons = [
+                @if($crud->get('list.showExportButton'))
+            {
+                extend: 'collection',
+                text: '<i class="la la-download"></i> {{ trans('backpack::crud.export.export') }}',
+                dropup: true,
+                buttons: [
+                    {
+                        name: 'copyHtml5',
+                        extend: 'copyHtml5',
+                        exportOptions: {
+                            columns: function ( idx, data, node ) {
+                                var $column = crud.table.column( idx );
+                                return  ($column.visible() && $(node).attr('data-visible-in-export') != 'false') || $(node).attr('data-force-export') == 'true';
+                            },
+                            format: dataTablesExportFormat,
+                        },
+                        action: function(e, dt, button, config) {
+                            crud.responsiveToggle(dt);
+                            $.fn.DataTable.ext.buttons.copyHtml5.action.call(this, e, dt, button, config);
+                            crud.responsiveToggle(dt);
+                        }
+                    },
+                    {
+                        name: 'excelHtml5',
+                        extend: 'excelHtml5',
+                        exportOptions: {
+                            columns: function ( idx, data, node ) {
+                                var $column = crud.table.column( idx );
+                                return  ($column.visible() && $(node).attr('data-visible-in-export') != 'false') || $(node).attr('data-force-export') == 'true';
+                            },
+                            format: dataTablesExportFormat,
+                        },
+                        action: function(e, dt, button, config) {
+                            crud.responsiveToggle(dt);
+                            let $ids = []
+                            $("#crudTable .dtr-control").each(function(i,e) {
+                                $ids.push(e.innerText)
+                            })
+                            $ids.join(',')
+                            $.ajax({
+                                'url': `/fluidbook-publication/send_link/${$ids}`,
+                                'method': 'POST'
+                            })
+                            //$.fn.DataTable.ext.buttons.excelHtml5.action.call(this, e, dt, button, config);
+                            crud.responsiveToggle(dt);
+                        }
+                    },
+                    {
+                        name: 'csvHtml5',
+                        extend: 'csvHtml5',
+                        exportOptions: {
+                            columns: function ( idx, data, node ) {
+                                var $column = crud.table.column( idx );
+                                return  ($column.visible() && $(node).attr('data-visible-in-export') != 'false') || $(node).attr('data-force-export') == 'true';
+                            },
+                            format: dataTablesExportFormat,
+                        },
+                        action: function(e, dt, button, config) {
+                            crud.responsiveToggle(dt);
+                            $.fn.DataTable.ext.buttons.csvHtml5.action.call(this, e, dt, button, config);
+                            crud.responsiveToggle(dt);
+                        }
+                    },
+                    {
+                        name: 'pdfHtml5',
+                        extend: 'pdfHtml5',
+                        exportOptions: {
+                            columns: function ( idx, data, node ) {
+                                var $column = crud.table.column( idx );
+                                return  ($column.visible() && $(node).attr('data-visible-in-export') != 'false') || $(node).attr('data-force-export') == 'true';
+                            },
+                            format: dataTablesExportFormat,
+                        },
+                        orientation: 'landscape',
+                        action: function(e, dt, button, config) {
+                            crud.responsiveToggle(dt);
+                            $.fn.DataTable.ext.buttons.pdfHtml5.action.call(this, e, dt, button, config);
+                            crud.responsiveToggle(dt);
+                        }
+                    },
+                    {
+                        name: 'print',
+                        extend: 'print',
+                        exportOptions: {
+                            columns: function ( idx, data, node ) {
+                                var $column = crud.table.column( idx );
+                                return  ($column.visible() && $(node).attr('data-visible-in-export') != 'false') || $(node).attr('data-force-export') == 'true';
+                            },
+                            format: dataTablesExportFormat,
+                        },
+                        action: function(e, dt, button, config) {
+                            crud.responsiveToggle(dt);
+                            $.fn.DataTable.ext.buttons.print.action.call(this, e, dt, button, config);
+                            crud.responsiveToggle(dt);
+                        }
+                    }
+                ]
+            }
+            @endif
+            @if($crud->get('list.showTableColumnPicker'))
+            ,{
+                extend: 'colvis',
+                text: '<i class="la la-eye-slash"></i> {{ trans('backpack::crud.export.column_visibility') }}',
+                columns: function ( idx, data, node ) {
+                    return $(node).attr('data-visible-in-table') == 'false' && $(node).attr('data-can-be-visible-in-table') == 'true';
+                },
+                dropup: true
+            }
+            @endif
+        ];
+
+        // move the datatable buttons in the top-right corner and make them smaller
+        function moveExportButtonsToTopRight() {
+            crud.table.buttons().each(function(button) {
+                if (button.node.className.indexOf('buttons-columnVisibility') == -1 && button.node.nodeName=='BUTTON')
+                {
+                    button.node.className = button.node.className + " btn-sm";
+                }
+            })
+            $(".dt-buttons").appendTo($('#datatable_button_stack' ));
+            $('.dt-buttons').addClass('d-xs-block')
+                .addClass('d-sm-inline-block')
+                .addClass('d-md-inline-block')
+                .addClass('d-lg-inline-block');
+        }
+
+        crud.addFunctionToDataTablesDrawEventQueue('moveExportButtonsToTopRight');
+    </script>
+@endif
index 6122fab272df5e090803bf5b35d9d9c976b40bd2..a3017184973c8e00279b36035e224f21b555aaab 100644 (file)
                   <th>
                     {{-- Bulk checkbox --}}
                     @if($loop->first && $crud->getOperationSetting('bulkActions'))
+                        ok
                       {!! View::make('crud::columns.inc.bulk_actions_checkbox')->render() !!}
                     @endif
                     {!! $column['label'] !!}
             @if ( $crud->buttons()->where('stack', 'bottom')->count() )
                 <div id="bottom_buttons" class="d-print-none text-center text-sm-left">
                     @include('crud::inc.button_stack', ['stack' => 'bottom'])
-
                     <div id="datatable_button_stack" class="float-right text-right hidden-xs"></div>
                 </div>
             @endif