]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5041 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 20 Jan 2022 15:28:41 +0000 (16:28 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 20 Jan 2022 15:28:41 +0000 (16:28 +0100)
app/Models/Base/ToolboxModel.php [new file with mode: 0644]
app/Models/ELearningMedia.php
app/Models/FluidbookCollection.php
app/Models/FluidbookIconset.php
app/Models/FluidbookPublication.php
app/Models/FluidbookQuote.php
app/Models/FluidbookTheme.php
app/Models/Quiz.php
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php

diff --git a/app/Models/Base/ToolboxModel.php b/app/Models/Base/ToolboxModel.php
new file mode 100644 (file)
index 0000000..9076a1e
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+namespace App\Models\Base;
+
+use App\Fields\User;
+use Cubist\Backpack\Magic\Fields\Hidden;
+use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Facades\Auth;
+
+class ToolboxModel extends CubistMagicAbstractModel
+{
+    protected static $_permissionBase = null;
+    protected static $_ownerAttribute = 'owner';
+    protected $_syncDbSchema = false;
+
+    public static function addOwnerClause(Builder $builder)
+    {
+        if (null === backpack_user() || null === Auth::id()) {
+            return;
+        }
+        if (Auth::user()->hasPermissionTo(static::$_permissionBase . ':admin')) {
+            return;
+        }
+        if (null === static::$_ownerAttribute) {
+            return;
+        }
+        $builder->whereIn(static::$_ownerAttribute, backpack_user()->getManagedUsers());
+        if (Auth::user()->hasPermissionTo(static::$_permissionBase . ':write')) {
+            $builder->orWhere('created_ok', 0);
+        }
+    }
+
+    public function addOwnerField($tab = null)
+    {
+        $fieldSettings = ['name' => static::$_ownerAttribute,
+            'label' => __('Propriétaire'),
+            'type' => User::class,
+            'column' => true,
+            'can' => static::$_permissionBase . ':admin',
+            'column_attribute' => 'companyWithNameOnTwoLines',
+            'attribute' => 'companyWithName',
+            'default' => Auth::id()
+        ];
+        if (null !== $tab) {
+            $fieldSettings['tab'] = $tab;
+        }
+        $this->addField($fieldSettings);
+    }
+
+    public function addColumnDateFields($tab = null, $type = Hidden::class)
+    {
+        $common = ['type' => $type,
+            'column' => true,
+            'column_type' => 'date',
+            'column_format' => null];
+
+        if (null !== $tab) {
+            $common['tab'] = $tab;
+        }
+
+        $this->addField(
+            array_merge($common,
+                [
+                    'name' => 'created_at',
+                    'label' => __('Crée le'),
+                ]
+            )
+        );
+
+        $this->addField(
+            array_merge($common,
+                [
+                    'name' => 'updated_at',
+                    'label' => __('Mis à jour le')
+                ]
+            )
+        );
+    }
+
+}
index 637f0456ad2e5407960e2ff2257a0800cfb45f3d..22a5cafc1e04cdc7762cc259899a2e3a1ed2767a 100644 (file)
@@ -2,24 +2,31 @@
 
 namespace App\Models;
 
+use App\Models\Base\ToolboxModel;
 use Cubist\Backpack\Magic\Fields\Files;
 use Cubist\Backpack\Magic\Fields\Percent;
-use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
+use Cubist\Backpack\Magic\Fields\Text;
 
-class ELearningMedia extends CubistMagicAbstractModel
+class ELearningMedia extends ToolboxModel
 {
     protected $table = 'elearning_media';
 
-    protected $_options = ['name' => 'elearning_media',
-        'singular' => 'e-learning media',
-        'plural' => 'e-learning media'];
+    protected $_options = ['name' => 'elearning-media',
+        'singular' => 'media',
+        'plural' => 'media'];
 
+    protected static $_permissionBase = 'elearning-media';
 
     public function setFields()
     {
         parent::setFields();
 
-        $this->addField('complete_pct', Percent::class, __('Marquer terminé quand ce pourcentage est lu'));
-        $this->addField('media',Files::class,__('Media'));
+        $this->addField('title', Text::class, __('Titre'));
+
+        $this->addOwnerField();
+        $this->addColumnDateFields();
+
+        $this->addField('complete_pct', Percent::class, __('Marquer terminé quand ce pourcentage est lu'), ['default' => 75]);
+        $this->addField('media', Files::class, __('Media'));
     }
 }
index 965f48b8d8950c897c8ea006bc836d31a5492a55..f7a4bb430482cb5d9da1a5e4c380dae90bb0c3d3 100644 (file)
@@ -3,19 +3,16 @@
 namespace App\Models;
 
 use App\Fields\FluidbookExportVersion;
-use App\Fields\User;
 use App\Http\Controllers\Admin\Operations\FluidbookCollection\DownloadOperation;
+use App\Models\Base\ToolboxModel;
 use App\SubForms\CollectionPublication;
 use App\SubForms\Fluidbook_Setting;
 use Cubist\Backpack\Magic\Fields\BunchOfFieldsMultiple;
 use Cubist\Backpack\Magic\Fields\Checkbox;
 use Cubist\Backpack\Magic\Fields\SelectFromArray;
 use Cubist\Backpack\Magic\Fields\Text;
-use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Support\Facades\Auth;
 
-class FluidbookCollection extends CubistMagicAbstractModel
+class FluidbookCollection extends ToolboxModel
 {
     protected $table = 'fluidbook_collection';
     protected $_options = ['name' => 'fluidbook-collection',
@@ -24,16 +21,7 @@ class FluidbookCollection extends CubistMagicAbstractModel
 
     protected $_operations = [DownloadOperation::class];
 
-    public static function addOwnerClause(Builder $builder)
-    {
-        if (null === backpack_user()) {
-            return;
-        }
-        if (Auth::user()->hasPermissionTo('fluidbook-collection:admin')) {
-            return;
-        }
-        $builder->where('owner', Auth::id());
-    }
+    protected static $_permissionBase = 'fluidbook-collection';
 
     public function setFields()
     {
@@ -41,21 +29,13 @@ class FluidbookCollection extends CubistMagicAbstractModel
 
         $this->addField('title', Text::class, __('Titre de la collection'), ['column' => true]);
 
-        $this->addField(['name' => 'owner',
-                'label' => __('Propriétaire'),
-                'type' => User::class,
-                'column' => true,
-                'can' => 'fluidbook-collection:admin',
-                'column_attribute' => 'companyWithNameOnTwoLines',
-                'attribute' => 'companyWithName',
-                'default' => Auth::id()]
-        );
+        $this->addOwnerField();
 
         $this->addField('type', SelectFromArray::class, __('Type'), ['column' => true, 'options' => ['export' => __('Export'), 'scorm_multilang' => __('SCORM multilingue')]]);
         $this->addField('locale_switch', Checkbox::class, __('Permettre le changement de langue'), ['when' => ['type' => 'scorm_multilang'], 'default' => true]);
         $this->addField('version', FluidbookExportVersion::class, __('Version'), ['when' => ['type' => 'export']]);
         $this->addField('publications', BunchOfFieldsMultiple::class, __('Publications'), ['bunch' => CollectionPublication::class]);
-        $this->addField('override_settings',BunchOfFieldsMultiple::class,__('Redéfinir les paramètres lors de l\'export'),['bunch'=>Fluidbook_Setting::class]);
+        $this->addField('override_settings', BunchOfFieldsMultiple::class, __('Redéfinir les paramètres lors de l\'export'), ['bunch' => Fluidbook_Setting::class]);
     }
 
 
index 8cd0d6eb879403309422911d23444ef72b08579c..a96ff91410e4e2a718b2d3af1a23e1962c8002e1 100644 (file)
@@ -2,33 +2,20 @@
 
 namespace App\Models;
 
-use App\Fields\User;
-use App\Jobs\GenerateThemePreview;
+use App\Models\Base\ToolboxModel;
 use Cubist\Backpack\Magic\Fields\Checkbox;
 use Cubist\Backpack\Magic\Fields\Code;
 use Cubist\Backpack\Magic\Fields\Text;
-use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
 use Cubist\Util\Files\Files;
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Support\Facades\Auth;
 
-class FluidbookIconset extends CubistMagicAbstractModel
+class FluidbookIconset extends ToolboxModel
 {
     protected $table = 'fluidbook_iconset';
     protected $_options = ['name' => 'fluidbook-iconset',
         'singular' => 'icon set',
         'plural' => 'icon sets'];
 
-    public static function addOwnerClause(Builder $builder)
-    {
-        if (null === backpack_user()) {
-            return;
-        }
-        if (Auth::user()->hasPermissionTo('fluidbook-iconset:admin')) {
-            return;
-        }
-        $builder->where('owner', Auth::id())->orWhere('public', 1);
-    }
+    protected static $_permissionBase = 'fluidbook-iconset';
 
     public function setFields()
     {
@@ -39,15 +26,7 @@ class FluidbookIconset extends CubistMagicAbstractModel
             'type' => Text::class,
             'column' => true]);
 
-        $this->addField(['name' => 'owner',
-                'label' => __('Propriétaire'),
-                'type' => User::class,
-                'column' => true,
-                'can' => 'fluidbook-iconset:admin',
-                'column_attribute' => 'companyWithNameOnTwoLines',
-                'attribute' => 'companyWithName',
-                'default' => Auth::id()]
-        );
+        $this->addOwnerField();
 
         $this->addField(['name' => 'public',
             'label' => __('Publique'),
index 07d6c01cac0dfa3d16e76dd56bb06a88a6c6231f..fec94edad1f00f18195776837f22cc4d546c8283 100644 (file)
@@ -8,6 +8,7 @@ use App\Fields\FluidbookLocale;
 use App\Fields\FluidbookSignature;
 use App\Fields\FluidbookTitle;
 use App\Fields\User;
+use App\Models\Base\ToolboxModel;
 use Cubist\Backpack\Magic\Fields\Code;
 use Cubist\Backpack\Magic\Fields\Datetime;
 use Cubist\Backpack\Magic\Fields\Hidden;
@@ -15,11 +16,8 @@ use Cubist\Backpack\Magic\Fields\Integer;
 use Cubist\Backpack\Magic\Fields\LongText;
 use Cubist\Backpack\Magic\Fields\SelectFromArray;
 use Cubist\Backpack\Magic\Fields\Textarea;
-use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Support\Facades\Auth;
 
-class FluidbookPublication extends CubistMagicAbstractModel
+class FluidbookPublication extends ToolboxModel
 {
     protected $table = 'fluidbook_publication';
     protected $_options = ['name' => 'fluidbook-publication',
@@ -30,15 +28,8 @@ class FluidbookPublication extends CubistMagicAbstractModel
 
     protected $_enableTrackNonDefaultValues = true;
 
-    protected $_syncDbSchema=false;
+    protected $_syncDbSchema = false;
 
-    public static function addOwnerClause(Builder $builder)
-    {
-        if (Auth::user()->hasPermissionTo('fluidbook-quote:admin')) {
-            return;
-        }
-        $builder->where('owner', Auth::id());
-    }
 
     public function setFields()
     {
@@ -49,20 +40,11 @@ class FluidbookPublication extends CubistMagicAbstractModel
             'type' => FluidbookTitle::class,
             'label' => __('Titre de la publication'),
             'default' => '',
-            'column'=>true,
+            'column' => true,
             'translatable' => false,
         ]);
 
-        $this->addField(['name' => 'owner',
-                'label' => __('Propriétaire'),
-                'type' => User::class,
-                'column' => true,
-                'can' => 'fluidbook-publication:admin',
-                'column_attribute' => 'companyWithNameOnTwoLines',
-                'attribute' => 'companyWithName',
-                'default' => Auth::id(),
-            ]
-        );
+        $this->addOwnerField();
 
         $this->addField(['name' => 'c_admin',
                 'label' => __('Administrateur'),
@@ -116,7 +98,7 @@ class FluidbookPublication extends CubistMagicAbstractModel
             'type' => FluidbookDevelopmentVersion::class,
             'label' => __('Version logicielle'),
             'default' => 'stable',
-            'can'=>'fluidbook-publication:admin',
+            'can' => 'fluidbook-publication:admin',
             'column' => true,
             'filter' => true,
             'translatable' => false,
index 88e21f97c27b98613d0c35d8308349826d2a36c0..ee960f94e1805abee1bc54b14d00777357276f87 100644 (file)
@@ -8,15 +8,12 @@ use App\Fields\FluidbookUser;
 use App\Http\Controllers\Admin\Operations\FluidbookQuote\AssignOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookQuote\ConfirmAssignmentOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookQuote\CreateFromWebsite;
+use App\Models\Base\ToolboxModel;
 use App\Widgets;
-use Cubist\Backpack\Http\Controllers\Operations\ShowOperation;
 use Cubist\Backpack\Magic\Fields\Integer;
 use Cubist\Backpack\Magic\Fields\Number;
-use Cubist\Backpack\Magic\Fields\ReadOnlyValue;
-use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
-use Illuminate\Database\Eloquent\Builder;
 
-class FluidbookQuote extends CubistMagicAbstractModel
+class FluidbookQuote extends ToolboxModel
 {
     protected $table = 'fluidbook_quote';
     protected $_options = ['name' => 'fluidbook-quote',
@@ -29,13 +26,8 @@ class FluidbookQuote extends CubistMagicAbstractModel
     protected $_enableCreation = false;
     protected $_enableBulk = false;
 
-    public static function addOwnerClause(Builder $builder)
-    {
-        if (backpack_user()->hasPermissionTo('fluidbook-quote:admin')) {
-            return;
-        }
-        $builder->where('reseller', backpack_user()->id);
-    }
+    protected static $_permissionBase = 'fluidbook-quote';
+    protected static $_ownerAttribute = 'reseller';
 
     public function setFields()
     {
index 1ce8677de6383da5512d94484721277f13d4ce6a..1ffa3ad0de299c068b96e628f7d16ac5b9b92093 100644 (file)
@@ -3,20 +3,14 @@
 
 namespace App\Models;
 
-
-use App\Fields\User;
 use App\Jobs\GenerateThemePreview;
 use App\Jobs\UpdateWS2ThemeTable;
+use App\Models\Base\ToolboxModel;
 use Cubist\Backpack\Magic\Fields\Color;
 use Cubist\Backpack\Magic\Fields\Files;
 use Cubist\Backpack\Magic\Fields\SelectFromModel;
-use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\DB;
-use Spatie\MediaLibrary\MediaCollections\Models\Media;
 
-class FluidbookTheme extends CubistMagicAbstractModel
+class FluidbookTheme extends ToolboxModel
 {
     protected $table = 'fluidbook_theme';
     protected $_options = ['name' => 'fluidbook-theme',
@@ -32,30 +26,13 @@ class FluidbookTheme extends CubistMagicAbstractModel
 
     public static $updateWS2ViewOnChange = true;
 
-    public static function addOwnerClause(Builder $builder)
-    {
-        if (null === backpack_user()) {
-            return;
-        }
-        if (Auth::user()->hasPermissionTo('fluidbook-theme:admin')) {
-            return;
-        }
-        $builder->where('owner', Auth::id());
-    }
+    protected static $_permissionBase ='fluidbook-theme';
 
     public function setFields()
     {
         parent::setFields();
 
-        $this->addField(['name' => 'owner',
-                'label' => __('Propriétaire'),
-                'type' => User::class,
-                'column' => true,
-                'can' => 'fluidbook-publication:admin',
-                'column_attribute' => 'companyWithNameOnTwoLines',
-                'attribute' => 'companyWithName',
-                'default' => Auth::id()]
-        );
+        $this->addOwnerField();
 
         $this->addField('name', 'Text', __('Nom'), ['column' => true]);
         $this->addField('preview', 'NoValue', __('Preview'), ['column' => true, 'column_type' => 'model_function', 'column_function_name' => 'getPreviewImage', 'column_limit' => -1]);
index a778b12150095754d0dd66938a8d6acc85cbba55..0cc1751daf0a488bd9ac2b01f84dfd48119ccae0 100644 (file)
@@ -4,16 +4,12 @@
 namespace App\Models;
 
 use App\Http\Controllers\Admin\Base\QuizController;
-use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
+use App\Models\Base\ToolboxModel;
 use Cubist\Util\Files\Files;
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Support\Facades\App;
-use Illuminate\Support\Facades\Artisan;
 use Spatie\MediaLibrary\MediaCollections\Models\Media;
 use Spatie\Image\Manipulations;
-use App\Fields\User;
 
-class Quiz extends CubistMagicAbstractModel
+class Quiz extends ToolboxModel
 {
     protected $_baseController = QuizController::class;
 
@@ -25,6 +21,8 @@ class Quiz extends CubistMagicAbstractModel
 
     protected $_enableBulk = false;
 
+    protected static $_permissionBase = 'quiz';
+
     public $registerMediaConversionsUsingModelInstance = false;
 
     protected static function _getColors()
@@ -81,30 +79,8 @@ class Quiz extends CubistMagicAbstractModel
             'column_label' => __('Projet'),
             'tab' => __('Projet')]);
 
-        $this->addField(['name' => 'created_at',
-            'label' => __('Crée le'),
-            'type' => 'Datetime',
-            'column' => true,
-            'column_type' => 'date',
-            'column_format' => null,
-            'tab' => __('Projet')]);
-
-        $this->addField(['name' => 'updated_at',
-            'label' => __('Mis à jour le'),
-            'type' => 'Hidden',
-            'column' => true,
-            'column_type' => 'date',
-            'column_format' => null,
-            'tab' => __('Projet')]);
-
-        $this->addField(['name' => 'owner',
-            'label' => __('Propriétaire'),
-            'type' => User::class,
-            'column' => true,
-            'can' => 'quiz:admin',
-            'column_attribute' => 'companyWithNameOnTwoLines',
-            'attribute' => 'companyWithName',
-            'tab' => __('Projet')]);
+        $this->addColumnDateFields(__('Projet'));
+        $this->addOwnerField(__('Projet'));
 
         $this->addField(['name' => 'title',
             'label' => __('Titre du quiz'),
@@ -386,10 +362,4 @@ class Quiz extends CubistMagicAbstractModel
         return parent::create($data);
     }
 
-    public static function addOwnerClause(Builder $builder)
-    {
-        if (null !== backpack_user()) {
-            $builder->whereIn('owner', backpack_user()->getManagedUsers());
-        }
-    }
 }
index 23d308efcb889c0f54157c41742b8fba6a6967fa..ed85f60f5bc6b7e426fafa936984e6f503630e58 100644 (file)
@@ -2,7 +2,7 @@
             class='nav-icon la la-dashboard'></i>{{ trans('backpack::base.dashboard') }}
     </a></li>
 
-@canany(['quiz:read','quiztranslation:read'])
+@canany(['quiz:read','quiztranslation:read','elearning_media:read'])
     <li class='nav-item nav-dropdown open'><a class='nav-link nav-dropdown-toggle' href='#'><i
                 class='nav-icon la la-chalkboard-teacher'></i>{{__('e-Learning')}}</a>
         <ul class='nav-dropdown-items'>
@@ -10,8 +10,8 @@
                 <li class="nav-item"><a class="nav-link" href="{{ backpack_url('quiz') }}"><i
                             class="la la-question nav-icon"></i> {{__('Quiz')}}</a></li>
             @endcan
-            @can('elearning_media:read')
-                <li class="nav-item"><a class="nav-link" href="{{ backpack_url('elearning_media') }}"><i
+            @can('elearning-media:read')
+                <li class="nav-item"><a class="nav-link" href="{{ backpack_url('elearning-media') }}"><i
                             class="la la-photo-video nav-icon"></i> {{__('Media')}}</a></li>
             @endcan
             @can('quiztranslation:read')