]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5802 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 14 Mar 2023 09:50:13 +0000 (10:50 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 14 Mar 2023 09:50:13 +0000 (10:50 +0100)
app/Http/Controllers/Admin/Operations/ChangeownerOperation.php [new file with mode: 0644]
app/Models/ELearningMedia.php
app/Models/ELearningPackage.php
app/Models/FluidbookPublication.php
app/Models/FluidbookTheme.php
app/Models/Quiz.php
config/backpack/base.php
resources/views/columns/owner.blade.php

diff --git a/app/Http/Controllers/Admin/Operations/ChangeownerOperation.php b/app/Http/Controllers/Admin/Operations/ChangeownerOperation.php
new file mode 100644 (file)
index 0000000..a6fc466
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations;
+
+use Backpack\CRUD\app\Library\CrudPanel\CrudPanel;
+use Cubist\Backpack\Magic\Controllers\CubistMagicController;
+use Illuminate\Support\Facades\Route;
+use Prologue\Alerts\Facades\Alert;
+
+trait ChangeownerOperation
+{
+    protected function setupChangeownerRoutes($segment, $routeName, $controller)
+    {
+        Route::match(['get'], $segment . '/{id}/changeowner/{owner}', $controller . '@changeOwner');
+    }
+
+    protected function changeOwner($id, $owner)
+    {
+        /** @var $this CubistMagicController */
+        $class = $this->getModelInstance();
+        if (!$this->getModelInstance()->canAdmin(backpack_user())) {
+            abort(401);
+        }
+        $instance = $class::find($id);
+        $instance->owner = $owner;
+        $instance->save();
+        Alert::add('success', __('Propriétaire modifié'))->flash();
+        return redirect(backpack_url($instance->getOption('name')));
+    }
+}
index a9cd61e82e6612d8954baa4a6ad88a31835310af..3bda56cca67fc7f42f4e2fe9244a59292ec3d226 100644 (file)
@@ -3,6 +3,7 @@
 namespace App\Models;
 
 use App\Fields\SCORMVersion;
+use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
 use App\Http\Controllers\Admin\Operations\ELearningMedia\ImportOperation;
 use App\Http\Controllers\Admin\Operations\ELearningMedia\PreviewOperation;
 use App\Http\Controllers\Admin\Operations\ELearningMedia\DownloadOperation;
@@ -31,7 +32,7 @@ class ELearningMedia extends ToolboxModel
 
     public const MEDIA_TYPES = ['audio/mpeg', 'video/mp4', 'application/pdf'];
 
-    protected $_operations = [ImportOperation::class, PreviewOperation::class, DownloadOperation::class];
+    protected $_operations = [ImportOperation::class, PreviewOperation::class, DownloadOperation::class,ChangeownerOperation::class];
 
     public function setFields()
     {
index d1f2c9fc42d109d0f16cf2cd70e6fea0fa88476d..803e39fdaf13d281df22c81bd70e2fb5c822f071 100644 (file)
@@ -3,6 +3,7 @@
 namespace App\Models;
 
 use App\Fields\SCORMVersion;
+use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
 use App\Http\Controllers\Admin\Operations\ELearningPackage\ImportOperation;
 use App\Http\Controllers\Admin\Operations\ELearningPackage\PreviewOperation;
 use App\Http\Controllers\Admin\Operations\ELearningPackage\DownloadOperation;
@@ -32,7 +33,7 @@ class ELearningPackage extends ToolboxModel
 
     protected static $_permissionBase = 'elearning-package';
 
-    protected $_operations = [ImportOperation::class, PreviewOperation::class, DownloadOperation::class];
+    protected $_operations = [ImportOperation::class, PreviewOperation::class, DownloadOperation::class,ChangeownerOperation::class];
 
     public function setFields()
     {
index 7e235082b643a9c1ce915118da0420cae2bbe55c..8f68c0a1be79b4543940079bcb99c94dd63e4195 100644 (file)
@@ -11,6 +11,7 @@ use App\Fields\FluidbookStatus;
 use App\Fields\User;
 use App\Fluidbook\Farm;
 use App\Fluidbook\Links;
+use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\CloneOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\CompositionOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\DeletefbOperation;
@@ -55,7 +56,7 @@ class FluidbookPublication extends ToolboxSettingsModel
 
     protected static $_docs = [];
 
-    protected $_operations = [CreateOperation::class, PreviewOperation::class, LinksOperation::class, CompositionOperation::class, StatsOperation::class, DownloadOperation::class, CloneOperation::class, DeletefbOperation::class, EditOperation::class];
+    protected $_operations = [CreateOperation::class, PreviewOperation::class, LinksOperation::class, CompositionOperation::class, StatsOperation::class, DownloadOperation::class, CloneOperation::class, DeletefbOperation::class, EditOperation::class,ChangeownerOperation::class];
 
     protected $casts = ['composition' => 'array'];
 
index 2d8487ca9a3652f7932fc095934b13c3c0070532..ed8f78ea305e0ad4b01e14123955a923a95eaa2a 100644 (file)
@@ -4,6 +4,7 @@
 namespace App\Models;
 
 use App\Fields\FluidbookThemeImage;
+use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
 use App\Jobs\GenerateThemePreview;
 use App\Jobs\UpdateWS2ThemeTable;
 use App\Models\Base\ToolboxSettingsModel;
@@ -48,6 +49,8 @@ class FluidbookTheme extends ToolboxSettingsModel
     public static $updateWS2ViewOnChange = true;
     public static $updateWS2SyncViewOnChange = false;
 
+    protected $_operations = [ChangeownerOperation::class];
+
     public function setFields()
     {
         parent::setFields();
index 24fdb6e71b54fb8f55b05aa451fb6a75c2438210..5de3dd2346608ca1003566805e97692e7eb2c3f3 100644 (file)
@@ -3,6 +3,7 @@
 namespace App\Models;
 
 use App\Fields\SCORMVersion;
+use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
 use App\Http\Controllers\Admin\Operations\Quiz\DownloadOperation;
 use App\Http\Controllers\Admin\Operations\Quiz\ImportOperation;
 use App\Http\Controllers\Admin\Operations\Quiz\LogOperation;
@@ -32,7 +33,7 @@ class Quiz extends ToolboxModel
 
     public $registerMediaConversionsUsingModelInstance = false;
 
-    protected $_operations = [PreviewOperation::class, DownloadOperation::class, LogOperation::class, ReportOperation::class, ImportOperation::class];
+    protected $_operations = [PreviewOperation::class, DownloadOperation::class, LogOperation::class, ReportOperation::class, ImportOperation::class,ChangeownerOperation::class];
 
     use SCORMVersionTrait;
 
index b9e6126f2e6f7726c589dc9b67d897d7b04f819a..ab1193226a4506dc17446d285f1c26cdfe9f2b0e 100644 (file)
@@ -50,6 +50,8 @@ return [
 
         'https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.contextMenu.min.css',
         'https://cdnjs.cloudflare.com/ajax/libs/sweetalert2/11.7.3/sweetalert2.min.css',
+        'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css',
+        'https://cdnjs.cloudflare.com/ajax/libs/select2-bootstrap-theme/0.1.0-beta.10/select2-bootstrap.min.css',
 
         // Here's what's inside the bundle:
         // 'packages/@digitallyhappy/backstrap/css/style.min.css',
@@ -138,7 +140,7 @@ return [
         "https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.contextMenu.min.js",
         "https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.ui.position.min.js",
         'https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.4/gsap.min.js',
-
+        'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js',
         'https://cdnjs.cloudflare.com/ajax/libs/sweetalert2/11.7.3/sweetalert2.all.js',
 
         // examples (everything inside the bundle, loaded from CDN)
index e7d59aee993752ad50e96baf410dd5201bd67877..2f35f711c3d290eb3a6a197531bd541cd82394b9 100644 (file)
@@ -1,28 +1,25 @@
 @php
     $values = data_get($entry, $column['name']);
     $v=$column['options'][$values];
+
 @endphp
 
 
 @if(!isset($crud->seenOwnersList))
     @php     $crud->seenOwnersList=true;
-        $ajax=\Cubist\Backpack\Magic\Fields\SelectFromArray::hashOptions($column['options']);
+        $crud->ajaxOwnerList=\Cubist\Backpack\Magic\Fields\SelectFromArray::hashOptions($column['options']);
     @endphp
-    <div id="owners_list_container">
-        <select
-            name="owners_list"
-            style="display: none;"
-            data-ajax="{{$ajax}}"
-            data-allow-html="1"
-            data-options="{{ json_encode($column['options']) }}"
-        >
-        </select>
-    </div>
+    <style>
+        .select2-dropdown {
+            z-index: 10000;
+        }
+    </style>
     <script>
         $(document).on('click', ".changeowner", function () {
+            var a = $(this);
             Swal.fire({
                 title: '{{__('Modifier le propriétaire')}}',
-                html: $('#owners_list_container').html(),
+                html: $(a).closest('span').find('.owners_list_container').html(),
                 confirmButtonColor: '#467fcf',
                 confirmButtonText: '{{__('Valider')}}',
                 showCancelButton: true,
                 cancelButtonColor: '#f1ecec',
                 cancelButtonTextColor: '#000000',
                 focusConfirm: false,
-                onOpen: function () {
-                    $('select[name=owners_list]').select2({});
+                didOpen: function () {
+                    let select = $(Swal.getHtmlContainer()).find('select');
+                    $(select).select2({
+                        theme: 'bootstrap',
+                        ajax: {
+                            url: '{{backpack_url('select2')}}' + '/' + $(select).data('ajax'),
+                            dataType: 'json'
+                        },
+                        escapeMarkup: function (m) {
+                            return m;
+                        }
+                    });
                 },
+                didDestroy: function () {
+                    let select = $(Swal.getHtmlContainer()).find('select');
+                    $(select).select2('destroy');
+                },
+            }).then((result) => {
+                if (result.isConfirmed) {
+                    let select = $(Swal.getHtmlContainer()).find('select');
+                    window.location = '{{backpack_url($entry->getOption('name').'/'.$entry->id.'/changeowner')}}/' + select.val();
+                }
             });
             return false;
         });
 
 
 <span data-{{$entry->getOption('name')}}-{{$column['name']}}="{{$values}}">
+    <div class="owners_list_container" style="display: none;">
+        <select
+            style="width: 100%;"
+            name="owners_list"
+            data-ajax="{{$crud->ajaxOwnerList}}"
+        >
+            <option value="{{$values}}" selected>{!! $v !!}</option>
+        </select>
+    </div>
     <a href="#" class="changeowner" title="{{__('Changer le propriétaire')}}">{!! $v !!}</a>
 </span>