From 5d120f00e44efe564022419575a9c8c963a683f2 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Fri, 16 Dec 2022 19:30:48 +0100 Subject: [PATCH] wait #5654 @1.5 --- app/Console/Commands/WorkshopMigration.php | 17 ++-- .../DeletefbOperation.php | 81 +++++++++++++++++++ app/Models/Base/ToolboxModel.php | 4 + app/Models/FluidbookPublication.php | 25 +++++- .../fluidbook_publication/delete.blade.php | 3 + .../fluidbook_publication/edit.blade.php | 20 ++--- 6 files changed, 131 insertions(+), 19 deletions(-) create mode 100644 app/Http/Controllers/Admin/Operations/FluidbookPublication/DeletefbOperation.php create mode 100644 resources/views/vendor/backpack/crud/buttons/fluidbook_publication/delete.blade.php diff --git a/app/Console/Commands/WorkshopMigration.php b/app/Console/Commands/WorkshopMigration.php index 369f71870..b995b6dd7 100644 --- a/app/Console/Commands/WorkshopMigration.php +++ b/app/Console/Commands/WorkshopMigration.php @@ -27,6 +27,9 @@ class WorkshopMigration extends CubistCommand protected $_oldRoot = '/home/extranet/www/fluidbook/'; protected static $_admin = 5; + const WS3_BOOK_ID = 30000; + const WS3_DOC_ID = 200000; + public function handle() { $user = AuthUser::where('id', self::$_admin)->first(); @@ -80,16 +83,14 @@ class WorkshopMigration extends CubistCommand PHP::neverStop(); - $ws3step = 200000; - $q = DB::table($this->_oldDB . '.documents')->orderBy('document_id', 'desc'); if ($this->option('documents') === 'missing') { - $maxID = FluidbookDocument::where('id', '<', $ws3step)->orderBy('id', 'DESC')->first()->id; + $maxID = FluidbookDocument::where('id', '<', self::WS3_DOC_ID)->orderBy('id', 'DESC')->first()->id; $q = DB::table($this->_oldDB . '.documents')->where('document_id', '>', $maxID)->orderBy('document_id', 'desc'); } else if ($this->option('documents') === 'v2') { - DB::update('DELETE FROM fluidbook_document WHERE id<' . $ws3step); + DB::update('DELETE FROM fluidbook_document WHERE id<' . self::WS3_DOC_ID); } else if ($this->option('documents') === 'all') { FluidbookDocument::truncate(); } else { @@ -117,7 +118,7 @@ class WorkshopMigration extends CubistCommand $c->saveWithoutFlushingCache(); } if ($this->option('documents') === 'all') { - DB::update('ALTER TABLE ' . $c->getTable() . ' AUTO_INCREMENT = ' . $ws3step . ';'); + DB::update('ALTER TABLE ' . $c->getTable() . ' AUTO_INCREMENT = ' . self::WS3_DOC_ID . ';'); } } @@ -154,7 +155,7 @@ class WorkshopMigration extends CubistCommand } PHP::neverStop(); - $ws3step = 30000; + $map = ['book_id' => 'id', 'nom' => 'name', @@ -183,7 +184,7 @@ class WorkshopMigration extends CubistCommand $q = DB::table($this->_oldDB . '.books')->orderBy('book_id', 'asc'); if ($this->option('publications') === 'v2') { - DB::update('DELETE FROM fluidbook_publication WHERE id<' . $ws3step); + DB::update('DELETE FROM fluidbook_publication WHERE id<' . self::WS3_BOOK_ID); } else if ($this->option('publications') === 'all') { FluidbookPublication::truncate(); } else { @@ -251,7 +252,7 @@ class WorkshopMigration extends CubistCommand } } if ($reset) { - DB::update('ALTER TABLE ' . $c->getTable() . ' AUTO_INCREMENT = ' . $ws3step . ';'); + DB::update('ALTER TABLE ' . $c->getTable() . ' AUTO_INCREMENT = ' . self::WS3_BOOK_ID . ';'); } } diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/DeletefbOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/DeletefbOperation.php new file mode 100644 index 000000000..b40991b1a --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/DeletefbOperation.php @@ -0,0 +1,81 @@ + $routeName . '.destroyfb', + 'uses' => $controller . '@destroyfb', + 'operation' => 'deletefb', + ]); + } + + /** + * Add the default settings, buttons, etc that this operation needs. + */ + protected function setupDeletefbDefaults() + { + $this->crud->allowAccess('delete'); +// +// $this->crud->operation('delete', function () { +// $this->crud->loadDefaultOperationSettingsFromConfig(); +// }); + + $this->crud->addButton('line', 'deletefb', 'view', 'crud::buttons.fluidbook_publication.delete', 'end'); + $this->crud->operation(['list', 'show'], function () { + $this->crud->removeButton('delete'); + + }); + } + + public function _allowsDelete($entry=null) + { + if(null===$entry){ + $entry=$this->crud->getEntry(); + } + if(!$entry->allowsDelete()){ + return false; + } + if (!FluidbookPublication::hasPermission($entry)) { + return false; + } + return true; + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return string + */ + public function destroyfb($id) + { + if (self::_allowsDelete($id)) { + abort(401); + } + + $this->crud->hasAccessOrFail('delete'); + + // get entry ID from Request (makes sure its the last ID for nested resources) + $id = $this->crud->getCurrentEntryId() ?? $id; + + + return $this->crud->delete($id); + } + +} diff --git a/app/Models/Base/ToolboxModel.php b/app/Models/Base/ToolboxModel.php index e14fc23b8..9f58ee7f7 100644 --- a/app/Models/Base/ToolboxModel.php +++ b/app/Models/Base/ToolboxModel.php @@ -3,6 +3,7 @@ namespace App\Models\Base; use App\Fields\User; +use App\Models\FluidbookPublication; use Cubist\Backpack\Magic\Fields\HiddenDatetime; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; use Illuminate\Database\Eloquent\Builder; @@ -46,6 +47,9 @@ class ToolboxModel extends CubistMagicAbstractModel if (!$user->hasPermissionTo(static::$_permissionBase . ':' . $permission)) { return false; } + if($id instanceof FluidbookPublication){ + return true; + } $entry = static::find($id); if (null === $entry) { return false; diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index 71f31710d..05d57a9ba 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -3,12 +3,13 @@ namespace App\Models; +use App\Console\Commands\WorkshopMigration; use App\Fields\FluidbookChapters; use App\Fields\FluidbookComposition; use App\Fields\FluidbookLocale; -use App\Fields\FluidbookTitle; use App\Fields\User; use App\Http\Controllers\Admin\Operations\FluidbookPublication\CompositionOperation; +use App\Http\Controllers\Admin\Operations\FluidbookPublication\DeletefbOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\DownloadOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\PreviewOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\StatsOperation; @@ -18,12 +19,14 @@ use App\Models\Base\ToolboxSettingsModel; use App\Models\Traits\PublicationSettings; use App\Models\Traits\SCORMVersionTrait; use App\Util\FluidbookLinks; +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; use Cubist\Backpack\Magic\Fields\Hidden; use Cubist\Backpack\Magic\Fields\Integer; use Cubist\Backpack\Magic\Fields\SelectFromArray; +use Cubist\Backpack\Magic\Operations\CreateOperation; use Cubist\Util\Files\Files; use Cubist\Util\Graphics\Image; use Cubist\Util\Json; @@ -36,18 +39,22 @@ class FluidbookPublication extends ToolboxSettingsModel 'singular' => 'publication', 'plural' => 'publications']; + protected $_enableDeletion = false; protected $_enableBulk = false; + protected $_enableClone = false; + protected $_enableCreation = false; protected $_enableTrackNonDefaultValues = true; protected static $_permissionBase = 'fluidbook-publication'; protected static $_docs = []; - protected $_operations = [PreviewOperation::class, EditOperation::class, CompositionOperation::class, StatsOperation::class, DownloadOperation::class]; + protected $_operations = [CreateOperation::class, PreviewOperation::class, EditOperation::class, CompositionOperation::class, StatsOperation::class, DownloadOperation::class, CloneOperation::class, DeletefbOperation::class]; protected $casts = ['composition' => 'array']; protected $_documentsSize = null; + use PublicationSettings; use SCORMVersionTrait; @@ -402,4 +409,18 @@ class FluidbookPublication extends ToolboxSettingsModel } return Json::decode($this->chapters, true); } + + public function allowsDelete() + { + if (!can('fluidbook-publication:admin')) { + return false; + } + if ($this->id < WorkshopMigration::WS3_BOOK_ID) { + return false; + } + if ($this->status >= 1) { + return false; + } + return true; + } } diff --git a/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/delete.blade.php b/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/delete.blade.php new file mode 100644 index 000000000..79ce8da3b --- /dev/null +++ b/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/delete.blade.php @@ -0,0 +1,3 @@ +@if($entry->allowsDelete()) + @include('crud::buttons.delete') +@endif diff --git a/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php b/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php index 86e327a35..b1e6dab58 100644 --- a/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php +++ b/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php @@ -13,12 +13,14 @@ ] ]; @endphp - - {{__('Éditer')}} - +@if($entry->getKey()>=\App\Console\Commands\WorkshopMigration::WS3_BOOK_ID) + + {{__('Éditer')}} + +@endif -- 2.39.5