]> _ Git - fluidbook-toolbox.git/commitdiff
wait #6487 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 20 Nov 2023 08:53:56 +0000 (09:53 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 20 Nov 2023 08:53:56 +0000 (09:53 +0100)
app/Fluidbook/Compiler/Compiler.php
app/Http/Controllers/Admin/Operations/ChangestatusOperation.php [new file with mode: 0644]
app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php
app/Jobs/UpdateWS2ThemeTable.php
app/Models/Base/ToolboxModel.php
app/Models/Base/ToolboxSettingsModel.php [deleted file]
app/Models/Base/ToolboxStatusModel.php [new file with mode: 0644]
app/Models/FluidbookCollection.php
app/Models/FluidbookPublication.php
app/Models/FluidbookTheme.php
app/Models/Traits/ToolboxSettings.php [new file with mode: 0644]

index cbabd2ca5a280ee7d1d44ad7ff9af714671a203a..0889dda6aafcbbafe5e3774f0739ff2b6ce15666 100644 (file)
@@ -552,6 +552,8 @@ class Compiler extends Base implements CompilerInterface
             $this->addContentLock($this->config->maxPages);
         }
 
+        $this->checkPageLabels();
+
         // We need to be able to reference both navOrder and navOrderH so convert both to arrays
         // We also make sure there are no empty items in the arrays (see: http://php.net/manual/en/function.array-filter.php#111091)
         $this->config->navOrder = array_filter(array_map('trim', explode(',', $this->config->navOrder)), 'strlen');
@@ -576,6 +578,11 @@ class Compiler extends Base implements CompilerInterface
         $this->config->seoArticles = $this->seoArticles;
     }
 
+    protected function checkPageLabels()
+    {
+        
+    }
+
 
     public function log($step)
     {
diff --git a/app/Http/Controllers/Admin/Operations/ChangestatusOperation.php b/app/Http/Controllers/Admin/Operations/ChangestatusOperation.php
new file mode 100644 (file)
index 0000000..074b9f6
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations;
+
+use App\Models\FluidbookPublication;
+use Cubist\Backpack\Magic\Controllers\CubistMagicController;
+use Illuminate\Support\Facades\Route;
+use Prologue\Alerts\Facades\Alert;
+
+trait ChangestatusOperation
+{
+    protected function setupChangestatusRoutes($segment, $routeName, $controller)
+    {
+        Route::match(['get'], $segment . '/{id}/changestatus/{status}', $controller . '@changeStatus');
+    }
+
+    protected function changeStatus($id, $newStatus)
+    {
+        /** @var $this CubistMagicController */
+        $class = $this->getModelInstance();
+        if (!$this->getModelInstance()->canAdmin(backpack_user())) {
+            abort(401);
+        }
+        if (!$class::hasPermission($id)) {
+            abort(401);
+        }
+        $instant = $class::find($id);
+        if (!$instant || !$instant->allowsEdit()) {
+            abort(404);
+        }
+        if ($instant->status != $newStatus) {
+            $instant->status = $newStatus;
+            $instant->save();
+        }
+        Alert::add('success', __('Status modifié'))->flash();
+        return back();
+    }
+}
index 583a6f8a6e3cb55a33e498a24073269750afb1a2..87e49f1a18f46339e207566b8e26b3f401520dcd 100644 (file)
@@ -10,30 +10,9 @@ trait EditOperation
 {
     protected function setupEditRoutes($segment, $routeName, $controller)
     {
-        Route::match(['get'], $segment . '/{id}/changestatus/{status}', $controller . '@changeStatus');
         Route::match(['get'], $segment . '/{id}/changeprojectmanager/{status}', $controller . '@changeProjectManager');
     }
 
-    protected function changeStatus($fluidbook_id, $newStatus)
-    {
-        if (!can('fluidbook-publication:admin')) {
-            abort(401);
-        }
-        if (!FluidbookPublication::hasPermission($fluidbook_id)) {
-            abort(401);
-        }
-        $fluidbook = FluidbookPublication::find($fluidbook_id);
-        if (!$fluidbook || !$fluidbook->allowsEdit()) {
-            abort(404);
-        }
-        if ($fluidbook->status != $newStatus) {
-            $fluidbook->status = $newStatus;
-            $fluidbook->save();
-        }
-        Alert::add('success', __('Status de la publication modifié'))->flash();
-        return back();
-    }
-
     protected function changeProjectManager($fluidbook_id, $user)
     {
         if (!can('fluidbook-publication:admin')) {
index 912e8a0d313a47f549f5e61e5f547ee70cb14bc3..a38a97e7ae26037b2a1688596c03c66f54985a71 100644 (file)
@@ -11,6 +11,7 @@ use Cubist\Util\CommandLine\Imagemagick;
 use Cubist\Util\Graphics\Image;
 use Fluidbook\Tools\SVG\SVGTools;
 use Illuminate\Support\Facades\DB;
+use Mockery\Exception;
 use Spatie\MediaLibrary\MediaCollections\Models\Media;
 
 class UpdateWS2ThemeTable extends Base
@@ -73,7 +74,11 @@ class UpdateWS2ThemeTable extends Base
             $data[] = $this->_handleTheme($theme);
             $t->where('theme_id', '=', $this->id)->delete();
         }
-        $t->insert($data);
+        try {
+            $t->insert($data);
+        } catch (Exception $e) {
+
+        }
     }
 
     protected function _handleTheme($theme)
index 449110ba02f54749a58029b9d1663aac3fa86e85..601ba4b07e8d7933884add9fd8da9a774394a446 100644 (file)
@@ -116,4 +116,42 @@ class ToolboxModel extends CubistMagicAbstractModel
         );
     }
 
+    public function allowsDelete()
+    {
+        if (!can('fluidbook-publication:admin')) {
+            return false;
+        }
+        return true;
+    }
+
+    public function allowsUpdate()
+    {
+        if (!can(static::$_permissionBase.':write')) {
+            return false;
+        }
+        return true;
+    }
+
+    public function allowsEdit()
+    {
+        return $this->allowsUpdate();
+    }
+
+    public function allowsClone()
+    {
+        return $this->allowsCreate();
+    }
+
+    public function allowsPreview()
+    {
+        if (can(static::$_permissionBase.':write')) {
+            return true;
+        }
+        if (!can(static::$_permissionBase.':read')) {
+            return false;
+        }
+        return true;
+    }
+
+
 }
diff --git a/app/Models/Base/ToolboxSettingsModel.php b/app/Models/Base/ToolboxSettingsModel.php
deleted file mode 100644 (file)
index 8347075..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-namespace App\Models\Base;
-
-use Cubist\Backpack\Magic\EntityData;
-use Cubist\Backpack\Magic\Fields\Field;
-
-class ToolboxSettingsModel extends ToolboxModel
-{
-    /**
-     * @var EntityData
-     */
-    protected $_settingsData = null;
-
-    protected static array $defaultSettingsAttributes = ['fake' => true, 'translatable' => false, 'store_in' => 'settings', 'default' => ''];
-
-
-    /**
-     * @return EntityData
-     */
-    public function getSettings()
-    {
-        if (null === $this->_settingsData) {
-            $this->_settingsData = $this->getPageData();
-            $this->_settingsData->setOffsetPrefix('settings.');
-        }
-        return $this->_settingsData;
-    }
-
-    /**
-     * @param string|array $name
-     * @param string $type
-     * @param string $label
-     * @param array $attributes
-     * @return Field
-     * @throws \Exception
-     */
-    public function addSettingField($name, $type = 'Text', $label = '', $attributes = [])
-    {
-        $attributes = self::normalizeAttributes($name, $type, $label, $attributes);
-        return $this->addField($name, $type, $label, array_merge(self::$defaultSettingsAttributes, $attributes));
-    }
-}
diff --git a/app/Models/Base/ToolboxStatusModel.php b/app/Models/Base/ToolboxStatusModel.php
new file mode 100644 (file)
index 0000000..0c2b261
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Models\Base;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Facades\Auth;
+
+class ToolboxStatusModel extends ToolboxModel
+{
+    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->where('status', '>', 0);
+        }
+    }
+
+    public function allowsDelete()
+    {
+        if (!parent::allowsDelete()) {
+            return false;
+        }
+        if ($this->status >= 1) {
+            return false;
+        }
+        return true;
+    }
+
+    public function allowsPreview()
+    {
+        if (!can(static::$_permissionBase.':write')) {
+            return true;
+        }
+        if (!can(static::$_permissionBase.':read')) {
+            return false;
+        }
+        if ($this->status == 0) {
+            return false;
+        }
+        return true;
+    }
+}
index ce9d86d1a355912229fdc907a72071c9ddbe61e3..918b3d9b6d2b1231abbdd898adc2ad2dd0e09d40 100644 (file)
@@ -3,10 +3,13 @@
 namespace App\Models;
 
 use App\Fields\FluidbookExportVersion;
+use App\Fields\FluidbookStatus;
 use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
+use App\Http\Controllers\Admin\Operations\ChangestatusOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookCollection\DownloadOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookCollection\PreviewOperation;
 use App\Models\Base\ToolboxModel;
+use App\Models\Base\ToolboxStatusModel;
 use App\Models\Traits\CheckHash;
 use App\Slack\Slack;
 use App\SubForms\CollectionPublication;
@@ -18,9 +21,11 @@ use Cubist\Backpack\Magic\Fields\Integer;
 use Cubist\Backpack\Magic\Fields\SelectFromArray;
 use Cubist\Backpack\Magic\Fields\Text;
 use Cubist\Util\Files\Files;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Facades\Auth;
 
 // __('!! Collections de fluidbooks')
-class FluidbookCollection extends ToolboxModel
+class FluidbookCollection extends ToolboxStatusModel
 {
     use CheckHash;
 
@@ -29,7 +34,12 @@ class FluidbookCollection extends ToolboxModel
         'singular' => 'collection',
         'plural' => 'collections'];
 
-    protected $_operations = [PreviewOperation::class, DownloadOperation::class, ChangeownerOperation::class];
+    protected $_operations = [
+        PreviewOperation::class,
+        DownloadOperation::class,
+        ChangeownerOperation::class,
+        ChangestatusOperation::class
+    ];
 
     protected static $_permissionBase = 'fluidbook-collection';
 
@@ -39,6 +49,15 @@ class FluidbookCollection extends ToolboxModel
 
         $this->addField('title', Text::class, __('Titre de la collection'), ['column' => true]);
 
+        $this->addField('status', FluidbookStatus::class, __('Status'), [
+                'column' => true,
+                'filter' => true,
+                'non_default_tracking' => false,
+                'allows_null' => false,
+                'default' => 0,
+                'searchLogic' => false,
+            ]
+        );
         $this->addOwnerField();
 
         $this->addField('hash', Hidden::class);
@@ -72,7 +91,7 @@ class FluidbookCollection extends ToolboxModel
 
     public function allowsPreview()
     {
-        return !!$this->hash && in_array($this->type, ['export_multilang', 'scorm_multilang']);
+        return parent::allowsPreview() && !!$this->hash && in_array($this->type, ['export_multilang', 'scorm_multilang']);
     }
 
     public function incrementPreviewVisit()
index a90166995394994094b56ec0b4975aff0d309cfe..eeef3ebcf382e507b2ac8a3119cc7bd8d20fc6f6 100644 (file)
@@ -15,6 +15,7 @@ use App\Fluidbook\Farm;
 use App\Fluidbook\Link\Link;
 use App\Fluidbook\Link\LinksData;
 use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
+use App\Http\Controllers\Admin\Operations\ChangestatusOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\AuditOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\CloneOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\CompositionOperation;
@@ -33,10 +34,12 @@ use App\Jobs\FluidbookImagesPreprocess;
 use App\Jobs\FluidbookSocialImage;
 use App\Jobs\GenerateDeliveryThumbnailsPreview;
 use App\Models\Base\ToolboxSettingsModel;
+use App\Models\Base\ToolboxStatusModel;
 use App\Models\Traits\CheckHash;
 use App\Models\Traits\PublicationSettings;
 use App\Models\Traits\PublicationTags;
 use App\Models\Traits\SCORMVersionTrait;
+use App\Models\Traits\ToolboxSettings;
 use App\Slack\Slack;
 use App\SubForms\Link\Base;
 use Cubist\Backpack\Magic\Fields\Checkbox;
@@ -62,7 +65,7 @@ use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 
 // __('!!Paramètres des fluidbooks')
-class FluidbookPublication extends ToolboxSettingsModel
+class FluidbookPublication extends ToolboxStatusModel
 {
     protected $table = 'fluidbook_publication';
     protected $_options = ['name' => 'fluidbook-publication',
@@ -97,6 +100,7 @@ class FluidbookPublication extends ToolboxSettingsModel
         DeletefbOperation::class,
         EditOperation::class,
         ChangeownerOperation::class,
+        ChangestatusOperation::class,
         // Services
         SocialImageOperation::class,
         ExportPdfOperation::class,
@@ -112,29 +116,12 @@ class FluidbookPublication extends ToolboxSettingsModel
 
     protected $_compositionUpdated = false;
 
-
+    use ToolboxSettings;
     use PublicationSettings;
     use PublicationTags;
     use SCORMVersionTrait;
     use CheckHash;
 
-    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->where('status', '>', 0);
-        }
-    }
-
     public function setFields()
     {
         parent::setFields();
@@ -668,21 +655,19 @@ class FluidbookPublication extends ToolboxSettingsModel
 
     public function allowsDelete()
     {
-        if (!can('fluidbook-publication:admin')) {
+        if (!parent::allowsDelete()) {
             return false;
         }
         if ($this->version < 3) {
             return false;
         }
-        if ($this->status >= 1) {
-            return false;
-        }
+
         return true;
     }
 
     public function allowsUpdate()
     {
-        if (!can('fluidbook-publication:write')) {
+        if (!parent::allowsUpdate()) {
             return false;
         }
         if ($this->version < 3) {
@@ -691,19 +676,10 @@ class FluidbookPublication extends ToolboxSettingsModel
         return true;
     }
 
-    public function allowsEdit()
-    {
-        return $this->allowsUpdate();
-    }
-
-    public function allowsAudit()
-    {
-        return $this->allowsUpdate();
-    }
 
     public function allowsUpgrade()
     {
-        if (!can('fluidbook-publication:write')) {
+        if (!can(static::$_permissionBase . ':write')) {
             return false;
         }
         if ($this->version >= 3) {
@@ -713,24 +689,11 @@ class FluidbookPublication extends ToolboxSettingsModel
     }
 
 
-    public function allowsClone()
+    public function allowsAudit()
     {
-        return $this->allowsCreate();
+        return $this->allowsUpdate();
     }
 
-    public function allowsPreview()
-    {
-        if (can('fluidbook-publication:write')) {
-            return true;
-        }
-        if (!can('fluidbook-publication:read')) {
-            return false;
-        }
-        if ($this->status == 0) {
-            return false;
-        }
-        return true;
-    }
 
     public function getTitleForColumn()
     {
@@ -1086,7 +1049,8 @@ class FluidbookPublication extends ToolboxSettingsModel
         return $list;
     }
 
-    public function hasIssue(){
+    public function hasIssue()
+    {
 
     }
 }
index fe9ae4d35497fd79739170ee97d1db79c4787a90..3c944d2cc2108b2285eba55cbcf38091b4e745a4 100644 (file)
@@ -6,10 +6,10 @@ namespace App\Models;
 use App\Fields\FluidbookFont;
 use App\Fields\FluidbookThemeImage;
 use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
-use App\Jobs\GenerateSecondPagePreview;
 use App\Jobs\GenerateThemePreview;
 use App\Jobs\UpdateWS2ThemeTable;
-use App\Models\Base\ToolboxSettingsModel;
+use App\Models\Base\ToolboxModel;
+use App\Models\Traits\ToolboxSettings;
 use Cubist\Backpack\Magic\EntityData;
 use Cubist\Backpack\Magic\Fields\Color;
 use Cubist\Backpack\Magic\Fields\Files;
@@ -19,7 +19,7 @@ use Cubist\Util\CommandLine;
 use Cubist\Util\CommandLine\Imagemagick\Ico;
 
 // __('!!Paramètres des thèmes')
-class FluidbookTheme extends ToolboxSettingsModel
+class FluidbookTheme extends ToolboxModel
 {
     const NONE = 3;
     const STRETCH = 0;
@@ -55,6 +55,7 @@ class FluidbookTheme extends ToolboxSettingsModel
 
     protected $_operations = [ChangeownerOperation::class];
 
+    use ToolboxSettings;
     public function setFields()
     {
         parent::setFields();
@@ -83,7 +84,7 @@ class FluidbookTheme extends ToolboxSettingsModel
         ]);
 
         $this->addField(['name' => 'interfaceFont',
-                'type'=>FluidbookFont::class,
+                'type' => FluidbookFont::class,
                 'default' => 'OpenSans',
                 'label' => __('Police de caractères'),
                 'translatable' => false,
diff --git a/app/Models/Traits/ToolboxSettings.php b/app/Models/Traits/ToolboxSettings.php
new file mode 100644 (file)
index 0000000..5232af6
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Models\Traits;
+
+use Cubist\Backpack\Magic\EntityData;
+use Cubist\Backpack\Magic\Fields\Field;
+
+trait ToolboxSettings
+{
+    /**
+     * @var EntityData
+     */
+    protected $_settingsData = null;
+
+    protected static array $defaultSettingsAttributes = ['fake' => true, 'translatable' => false, 'store_in' => 'settings', 'default' => ''];
+
+
+    /**
+     * @return EntityData
+     */
+    public function getSettings()
+    {
+        if (null === $this->_settingsData) {
+            $this->_settingsData = $this->getPageData();
+            $this->_settingsData->setOffsetPrefix('settings.');
+        }
+        return $this->_settingsData;
+    }
+
+    /**
+     * @param string|array $name
+     * @param string $type
+     * @param string $label
+     * @param array $attributes
+     * @return Field
+     * @throws \Exception
+     */
+    public function addSettingField($name, $type = 'Text', $label = '', $attributes = [])
+    {
+        $attributes = self::normalizeAttributes($name, $type, $label, $attributes);
+        return $this->addField($name, $type, $label, array_merge(self::$defaultSettingsAttributes, $attributes));
+    }
+}