$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');
$this->config->seoArticles = $this->seoArticles;
}
+ protected function checkPageLabels()
+ {
+
+ }
+
public function log($step)
{
--- /dev/null
+<?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();
+ }
+}
{
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')) {
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
$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)
);
}
+ 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;
+ }
+
+
}
+++ /dev/null
-<?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));
- }
-}
--- /dev/null
+<?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;
+ }
+}
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;
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;
'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';
$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);
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()
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;
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;
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',
DeletefbOperation::class,
EditOperation::class,
ChangeownerOperation::class,
+ ChangestatusOperation::class,
// Services
SocialImageOperation::class,
ExportPdfOperation::class,
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();
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) {
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) {
}
- 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()
{
return $list;
}
- public function hasIssue(){
+ public function hasIssue()
+ {
}
}
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;
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;
protected $_operations = [ChangeownerOperation::class];
+ use ToolboxSettings;
public function setFields()
{
parent::setFields();
]);
$this->addField(['name' => 'interfaceFont',
- 'type'=>FluidbookFont::class,
+ 'type' => FluidbookFont::class,
'default' => 'OpenSans',
'label' => __('Police de caractères'),
'translatable' => false,
--- /dev/null
+<?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));
+ }
+}