]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5817 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 21 Mar 2023 11:06:45 +0000 (12:06 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 21 Mar 2023 11:06:45 +0000 (12:06 +0100)
app/Fields/FluidbookID.php
app/Models/FluidbookCollection.php
resources/views/vendor/backpack/crud/buttons/delete.blade.php [new file with mode: 0644]
resources/views/vendor/backpack/crud/buttons/fluidbook_collection/download.blade.php

index db6f0f80c64918cc847879aeebca6d0000253076..db1ac99266f22508de8f042fcd12e8588c421ae1 100644 (file)
@@ -2,7 +2,9 @@
 
 namespace App\Fields;
 
+use App\Models\FluidbookPublication;
 use Cubist\Backpack\Magic\Fields\SelectFromArray;
+use Cubist\Util\PHP;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 
@@ -12,14 +14,18 @@ class FluidbookID extends SelectFromArray
     {
         $u = backpack_user();
         if ($u) {
-            return Cache::remember('fluidbok_id_' . $u->id, 600, function () use ($u) {
+            $cacheKey = 'fluidbok_id_' . $u->id;
+            return Cache::remember($cacheKey, 600, function () use ($u) {
                 $res = [];
-                $q = DB::table('extranet_clean.books');
+
+                $q = DB::table('fluidbook_publication')->where('created_ok', '1')->orderBy('id', 'desc');
                 if (!$u->hasPermissionTo('fluidbook-publication:admin')) {
-                    $q->whereIn('proprietaire', explode(',', $u->e1_ws_rights));
+                    $q->whereIn('owner', explode(',', $u->e1_ws_rights));
                 }
-                foreach ($q->orderByDesc('book_id')->get() as $book) {
-                    $res[$book->book_id] = $book->book_id . ' - ' . $book->nom;
+                $books = $q->get();
+
+                foreach ($books as $book) {
+                    $res[$book->id] = $book->id . ' - ' . $book->c_title;
                 }
                 return $res;
             });
index db31345ab7f8a2890c57b301316d8d123d28f77b..61932e830360f4b82d29c1a113630d9c754f65e0 100644 (file)
@@ -9,8 +9,10 @@ use App\SubForms\CollectionPublication;
 use App\SubForms\Fluidbook_Setting;
 use Cubist\Backpack\Magic\Fields\BunchOfFieldsMultiple;
 use Cubist\Backpack\Magic\Fields\Checkbox;
+use Cubist\Backpack\Magic\Fields\ExternalPath;
 use Cubist\Backpack\Magic\Fields\SelectFromArray;
 use Cubist\Backpack\Magic\Fields\Text;
+
 // __('!! Collections de fluidbooks')
 class FluidbookCollection extends ToolboxModel
 {
@@ -35,6 +37,7 @@ class FluidbookCollection extends ToolboxModel
         $this->addField('locale_switch', Checkbox::class, __('Permettre le changement de langue'), ['when' => ['type' => ['scorm_multilang', 'export_multilang']], 'default' => true]);
         $this->addField('version', FluidbookExportVersion::class, __('Version'), ['when' => ['type' => 'export']]);
         $this->addField('publications', BunchOfFieldsMultiple::class, __('Publications'), ['bunch' => CollectionPublication::class, 'edit_label' => '%fluidbook > %dir']);
+        $this->addField('install', ExternalPath::class, 'Installer sur un serveur externe', ['default' => '', 'fake' => true, 'translatable' => false, 'store_in' => 'settings', 'servers_model' => FluidbookExternalInstallServer::class]);
         $this->addField('override_settings', BunchOfFieldsMultiple::class, __('Redéfinir les paramètres lors de l\'export'), ['bunch' => Fluidbook_Setting::class]);
     }
 
diff --git a/resources/views/vendor/backpack/crud/buttons/delete.blade.php b/resources/views/vendor/backpack/crud/buttons/delete.blade.php
new file mode 100644 (file)
index 0000000..3e977d1
--- /dev/null
@@ -0,0 +1,95 @@
+@if ($crud->hasAccess('delete'))
+       <a href="javascript:void(0)" onclick="deleteEntry(this)" data-route="{{ url($crud->route.'/'.$entry->getKey()) }}" class="btn btn-sm btn-link" data-button-type="delete"><i class="la la-trash"></i> {{ trans('backpack::crud.delete') }}</a>
+@endif
+
+{{-- Button Javascript --}}
+{{-- - used right away in AJAX operations (ex: List) --}}
+{{-- - pushed to the end of the page, after jQuery is loaded, for non-AJAX operations (ex: Show) --}}
+@push('after_scripts') @if (request()->ajax()) @endpush @endif
+<script>
+
+       if (typeof deleteEntry != 'function') {
+         $("[data-button-type=delete]").unbind('click');
+
+         function deleteEntry(button) {
+               // ask for confirmation before deleting an item
+               // e.preventDefault();
+               var route = $(button).attr('data-route');
+
+               Swal.fire({
+                 title: "{!! trans('backpack::base.warning') !!}",
+                 text: "{!! trans('backpack::crud.delete_confirm') !!}",
+                 icon: "warning",
+                 buttons: ["{!! trans('backpack::crud.cancel') !!}", "{!! trans('backpack::crud.delete') !!}"],
+                 dangerMode: true,
+               }).then((value) => {
+                       if (value) {
+                               $.ajax({
+                             url: route,
+                             type: 'DELETE',
+                             success: function(result) {
+                                 if (result == 1) {
+                                                 // Redraw the table
+                                                 if (typeof crud != 'undefined' && typeof crud.table != 'undefined') {
+                                                         // Move to previous page in case of deleting the only item in table
+                                                         if(crud.table.rows().count() === 1) {
+                                                           crud.table.page("previous");
+                                                         }
+
+                                                         crud.table.draw(false);
+                                                 }
+
+                                         // Show a success notification bubble
+                                     new Noty({
+                                   type: "success",
+                                   text: "{!! '<strong>'.trans('backpack::crud.delete_confirmation_title').'</strong><br>'.trans('backpack::crud.delete_confirmation_message') !!}"
+                                 }).show();
+
+                                     // Hide the modal, if any
+                                     $('.modal').modal('hide');
+                                 } else {
+                                     // if the result is an array, it means
+                                     // we have notification bubbles to show
+                                         if (result instanceof Object) {
+                                               // trigger one or more bubble notifications
+                                               Object.entries(result).forEach(function(entry, index) {
+                                                 var type = entry[0];
+                                                 entry[1].forEach(function(message, i) {
+                                                         new Noty({
+                                                   type: type,
+                                                   text: message
+                                                 }).show();
+                                                 });
+                                               });
+                                         } else {// Show an error alert
+                                             swal({
+                                               title: "{!! trans('backpack::crud.delete_confirmation_not_title') !!}",
+                                   text: "{!! trans('backpack::crud.delete_confirmation_not_message') !!}",
+                                               icon: "error",
+                                               timer: 4000,
+                                               buttons: false,
+                                             });
+                                         }
+                                 }
+                             },
+                             error: function(result) {
+                                 // Show an alert with the result
+                                 swal({
+                               title: "{!! trans('backpack::crud.delete_confirmation_not_title') !!}",
+                        text: "{!! trans('backpack::crud.delete_confirmation_not_message') !!}",
+                               icon: "error",
+                               timer: 4000,
+                               buttons: false,
+                             });
+                             }
+                         });
+                       }
+               });
+
+      }
+       }
+
+       // make it so that the function above is run after each DataTable draw event
+       // crud.addFunctionToDataTablesDrawEventQueue('deleteEntry');
+</script>
+@if (!request()->ajax()) @endpush @endif
index e9a1876836c7c9a4f2f8c889f0ef6bb5971cfc39..5cd9b455044608c56c76ddde11e667d8fea95429 100644 (file)
@@ -1,8 +1,19 @@
 {{-- __('!! Collections de fluidbooks') --}}
 @php
     $v=$entry->version?:'online';
+    $servers=\App\Models\FluidbookExternalInstallServer::getAllServers();
     $vname=\App\Fields\FluidbookExportVersion::getVersions()[$v]['short'];
-    $actions=['download'=>__('Télécharger la version :version',['version'=>$vname]),'install_hosting'=>__('Installer la version online sur hosting')];
+    $actions=['download'=>__('Télécharger la version :version',['version'=>$vname])];
+
+    if($entry->install && $entry->install->server && isset($servers[$entry->install->server])){
+        $server=$servers[$entry->install->server];
+        if($entry->install->path || $server['allows_root']){
+            $actions['install']=[
+                'label'=>__('Installer sur le serveur :server',['server'=>'<strong>'.$server['name'].'</strong>']).' <span class="small"><span class="grey">'.$server['base_url'].'</span>'.$entry->install->path.'</span>',
+            ];
+        }
+    }
+
     if($entry->type==='scorm_multilang'){
         $actions['scormcloud']=__('Tester sur Scorm Cloud');
     }