]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5456 @0.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 23 Feb 2023 17:11:13 +0000 (18:11 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 23 Feb 2023 17:11:13 +0000 (18:11 +0100)
app/Http/Controllers/Admin/Operations/FluidbookPublication/CloneOperation.php [new file with mode: 0644]
app/Http/Controllers/Admin/Operations/FluidbookPublication/PreviewOperation.php
app/Models/FluidbookPublication.php
resources/views/vendor/backpack/crud/buttons/fluidbook_publication/clone.blade.php [new file with mode: 0644]

diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/CloneOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/CloneOperation.php
new file mode 100644 (file)
index 0000000..85b2cab
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations\FluidbookPublication;
+
+use Illuminate\Support\Facades\Route;
+
+trait CloneOperation
+{
+    /**
+     * Define which routes are needed for this operation.
+     *
+     * @param string $segment Name of the current entity (singular). Used as first URL segment.
+     * @param string $routeName Prefix of the route name.
+     * @param string $controller Name of the current CrudController.
+     */
+    protected function setupCloneRoutes($segment, $routeName, $controller)
+    {
+        Route::post($segment . '/{id}/clone/{action}', [
+            'as' => $routeName . '.clone',
+            'uses' => $controller . '@clone',
+            'operation' => 'clone',
+        ]);
+    }
+
+    /**
+     * Add the default settings, buttons, etc that this operation needs.
+     */
+    protected function setupCloneDefaults()
+    {
+        $this->crud->allowAccess('clone');
+
+        $this->crud->operation('clone', function () {
+            $this->crud->loadDefaultOperationSettingsFromConfig();
+        });
+
+        $this->crud->operation(['list', 'show'], function () {
+            $this->crud->addButton('line', 'clone', 'view', 'crud::buttons.fluidbook_publication.clone', 'end');
+        });
+    }
+
+    /**
+     * Create a duplicate of the current entry in the datatabase.
+     *
+     * @param int $id
+     * @return Response
+     */
+    public function clone($id, $action)
+    {
+        $this->crud->hasAccessOrFail('clone');
+
+        $entry=$this->crud->model->findOrFail($id);
+        if ($action === 'complete') {
+            $clonedEntry = $entry->replicate();
+        } else {
+            $clonedEntry = $entry->replicateSettings();
+        }
+
+        return (string)$clonedEntry->push();
+    }
+}
index 388fd4819ef7a017183eadc71634deea3f3072a7..cd643b6a80e52bbcb0e099bd773fd5bb8d544404 100644 (file)
@@ -60,17 +60,21 @@ trait PreviewOperation
         $nointerface = !!request('nointerface', false);
         $shortLoading = !!request('shortLoading', false);
 
+        self::_getFluidbookAndTheme($id, $hash, $fluidbook, $theme);
+
+
+
+        $check = $this->_checkDemoLinkAuth($fluidbook);
+        if ($check !== true) {
+            return $check;
+        }
+
         if (null === $time || ((null === $path || $path === 'index.html') && $time < (time() - 60) && !$nointerface && !$shortLoading)) {
             $v = ($version === 'online') ? '' : $version . '/';
             $url = backpack_url($segment . '/preview/' . $v . $id . '_' . $hash . '_' . time()) . '/' . $q;
             return $this->loadingCompile($url, $id, $hash);
         }
 
-        self::_getFluidbookAndTheme($id, $hash, $fluidbook, $theme);
-        $check = $this->_checkDemoLinkAuth($fluidbook);
-        if ($check !== true) {
-            return $check;
-        }
         return $this->preview($version, $fluidbook, $theme, $path);
     }
 
index 14266e964a700446ae884b6514013bf3d99f1bdb..d081e98a3fa02461e4b4118146a1a78b0229dd58 100644 (file)
@@ -10,6 +10,7 @@ use App\Fields\FluidbookLocale;
 use App\Fields\User;
 use App\Fluidbook\Farm;
 use App\Fluidbook\Links;
+use App\Http\Controllers\Admin\Operations\FluidbookPublication\CloneOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\CompositionOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\DeletefbOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\DownloadOperation;
@@ -21,7 +22,6 @@ use App\Models\Base\ToolboxSettingsModel;
 use App\Models\Traits\PublicationSettings;
 use App\Models\Traits\SCORMVersionTrait;
 use App\Slack\Slack;
-use Backpack\CRUD\app\Http\Controllers\Operations\CloneOperation;
 use Backpack\CRUD\app\Library\Widget;
 use Cubist\Backpack\Magic\Fields\FormBigSection;
 use Cubist\Backpack\Magic\Fields\FormSuperSection;
@@ -33,7 +33,6 @@ use Cubist\Util\ArrayUtil;
 use Cubist\Util\Files\Files;
 use Cubist\Util\Graphics\Image;
 use Cubist\Util\Json;
-use Cubist\Util\ObjectUtil;
 use Datetime;
 // __('!!Paramètres des fluidbooks')
 class FluidbookPublication extends ToolboxSettingsModel
@@ -466,6 +465,22 @@ class FluidbookPublication extends ToolboxSettingsModel
     }
 
     public function replicate(array $except = null)
+    {
+        $new = parent::replicate($except);
+        if (backpack_user()) {
+            $new->owner = backpack_user()->id;
+        }
+        $new->status = -1;
+        $new->title = __('Copie de :title', ['title' => $new->title]);
+        $new->visits_counter = 0;
+        $new->save();
+
+        // Todo copy links
+
+        return $new;
+    }
+
+    public function replicateSettings(array $except = null)
     {
         $new = parent::replicate($except);
         if (backpack_user()) {
@@ -476,6 +491,9 @@ class FluidbookPublication extends ToolboxSettingsModel
         $new->composition = [];
         $new->visits_counter = 0;
         $new->save();
+
+        // Todo copy assets
+
         return $new;
     }
 
diff --git a/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/clone.blade.php b/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/clone.blade.php
new file mode 100644 (file)
index 0000000..548b4d5
--- /dev/null
@@ -0,0 +1,25 @@
+{{-- __('!! Paramètres des fluidbooks') --}}
+@php
+
+    $base=$crud->route.'/'.$entry->id;
+    $actions=[
+        'settings'=>
+            [
+                'label'=>__('Uniquement les paramètres et assets'),
+
+                ],
+        'complete'=>
+            [
+                'label'=>__('Pages, liens, paramètres et assets'),
+                ],
+        ];
+
+@endphp
+
+<a class="btn btn-sm btn-link" href="#"
+   data-toggle="tooltip"
+   title="{{__('Cloner la publication')}}"
+   data-context-actions="{{json_encode($actions)}}"
+   data-context-route="{{$crud->route}}/$id/clone/$action"
+   data-context-id="{{$entry->getKey()}}"
+><i class="la la-copy"></i> {{__('Cloner')}}</a>