From: Vincent Vanwaelscappel Date: Mon, 20 Nov 2023 08:53:56 +0000 (+0100) Subject: wait #6487 @1.5 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=82ad22191c1806c7381013430fe6d5d79e07884d;p=fluidbook-toolbox.git wait #6487 @1.5 --- diff --git a/app/Fluidbook/Compiler/Compiler.php b/app/Fluidbook/Compiler/Compiler.php index cbabd2ca5..0889dda6a 100644 --- a/app/Fluidbook/Compiler/Compiler.php +++ b/app/Fluidbook/Compiler/Compiler.php @@ -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 index 000000000..074b9f62a --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/ChangestatusOperation.php @@ -0,0 +1,38 @@ +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(); + } +} diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php index 583a6f8a6..87e49f1a1 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php @@ -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')) { diff --git a/app/Jobs/UpdateWS2ThemeTable.php b/app/Jobs/UpdateWS2ThemeTable.php index 912e8a0d3..a38a97e7a 100644 --- a/app/Jobs/UpdateWS2ThemeTable.php +++ b/app/Jobs/UpdateWS2ThemeTable.php @@ -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) diff --git a/app/Models/Base/ToolboxModel.php b/app/Models/Base/ToolboxModel.php index 449110ba0..601ba4b07 100644 --- a/app/Models/Base/ToolboxModel.php +++ b/app/Models/Base/ToolboxModel.php @@ -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 index 83470753a..000000000 --- a/app/Models/Base/ToolboxSettingsModel.php +++ /dev/null @@ -1,43 +0,0 @@ - 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 index 000000000..0c2b26113 --- /dev/null +++ b/app/Models/Base/ToolboxStatusModel.php @@ -0,0 +1,51 @@ +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; + } +} diff --git a/app/Models/FluidbookCollection.php b/app/Models/FluidbookCollection.php index ce9d86d1a..918b3d9b6 100644 --- a/app/Models/FluidbookCollection.php +++ b/app/Models/FluidbookCollection.php @@ -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() diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index a90166995..eeef3ebcf 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -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() + { } } diff --git a/app/Models/FluidbookTheme.php b/app/Models/FluidbookTheme.php index fe9ae4d35..3c944d2cc 100644 --- a/app/Models/FluidbookTheme.php +++ b/app/Models/FluidbookTheme.php @@ -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 index 000000000..5232af65c --- /dev/null +++ b/app/Models/Traits/ToolboxSettings.php @@ -0,0 +1,43 @@ + 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)); + } +}