From: Vincent Vanwaelscappel Date: Thu, 23 Feb 2023 17:11:13 +0000 (+0100) Subject: wip #5456 @0.5 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=499daadc336a9114c709bde2c520b3ffa435cae3;p=fluidbook-toolbox.git wip #5456 @0.5 --- diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/CloneOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/CloneOperation.php new file mode 100644 index 000000000..85b2cab85 --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/CloneOperation.php @@ -0,0 +1,60 @@ + $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(); + } +} diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/PreviewOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/PreviewOperation.php index 388fd4819..cd643b6a8 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/PreviewOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/PreviewOperation.php @@ -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); } diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index 14266e964..d081e98a3 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -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 index 000000000..548b4d573 --- /dev/null +++ b/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/clone.blade.php @@ -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 + + {{__('Cloner')}}