]> _ Git - fluidbook-toolbox.git/commitdiff
wait #5654 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 16 Dec 2022 18:30:48 +0000 (19:30 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 16 Dec 2022 18:30:48 +0000 (19:30 +0100)
app/Console/Commands/WorkshopMigration.php
app/Http/Controllers/Admin/Operations/FluidbookPublication/DeletefbOperation.php [new file with mode: 0644]
app/Models/Base/ToolboxModel.php
app/Models/FluidbookPublication.php
resources/views/vendor/backpack/crud/buttons/fluidbook_publication/delete.blade.php [new file with mode: 0644]
resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php

index 369f7187003ddddde75a51d2f43107890e9f9c4b..b995b6dd7b0a255f4b55620481416e3aa4506454 100644 (file)
@@ -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 (file)
index 0000000..b40991b
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations\FluidbookPublication;
+
+use App\Console\Commands\WorkshopMigration;
+use App\Models\FluidbookPublication;
+use Illuminate\Support\Facades\Route;
+
+trait DeletefbOperation
+{
+
+    /**
+     * 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 setupDeletefbRoutes($segment, $routeName, $controller)
+    {
+        Route::delete($segment . '/{id}', [
+            'as' => $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);
+    }
+
+}
index e14fc23b870be1514c089b4acc192d2e458a78b3..9f58ee7f741439b26a8c0938925e2bc510458c6a 100644 (file)
@@ -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;
index 71f31710d522d727df7182c9742016c3902dfdfe..05d57a9baf80e9d39afeec55bb06c632bab5ebca 100644 (file)
@@ -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 (file)
index 0000000..79ce8da
--- /dev/null
@@ -0,0 +1,3 @@
+@if($entry->allowsDelete())
+    @include('crud::buttons.delete')
+@endif
index 86e327a352adc768883895a020fbd23581a774ce..b1e6dab588feb480e50617ad4f191556b4a94b85 100644 (file)
                 ]
         ];
 @endphp
-<a class="btn btn-sm btn-link" href="#"
-   data-toggle="tooltip"
-   title="{{__('Éditer la publication')}}"
-   data-context-actions="{{json_encode($actions)}}"
-   data-context-route="{{$crud->route}}/$id/edit/$action"
-   data-context-id="{{$entry->getKey()}}"
->
-    <i class="la la-edit"></i> {{__('Éditer')}}
-</a>
+@if($entry->getKey()>=\App\Console\Commands\WorkshopMigration::WS3_BOOK_ID)
+    <a class="btn btn-sm btn-link" href="#"
+       data-toggle="tooltip"
+       title="{{__('Éditer la publication')}}"
+       data-context-actions="{{json_encode($actions)}}"
+       data-context-route="{{$crud->route}}/$id/edit/$action"
+       data-context-id="{{$entry->getKey()}}"
+    >
+        <i class="la la-edit"></i> {{__('Éditer')}}
+    </a>
+@endif