From 61f704b200f19cf1bec9cf98354542ba960ce0b4 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Thu, 4 Jul 2019 19:06:15 +0200 Subject: [PATCH] #2843 --- src/app/Magic/Fields/PageInternal.php | 17 ++++++ src/app/Magic/Models/CMSPage.php | 57 +++++++++++++------ .../Magic/Models/CubistMagicAbstractModel.php | 18 ++---- src/app/Template/TemplateAbstract.php | 3 +- src/resources/views/fields/button.blade.php | 10 ++-- 5 files changed, 69 insertions(+), 36 deletions(-) create mode 100644 src/app/Magic/Fields/PageInternal.php diff --git a/src/app/Magic/Fields/PageInternal.php b/src/app/Magic/Fields/PageInternal.php new file mode 100644 index 0000000..b4c1322 --- /dev/null +++ b/src/app/Magic/Fields/PageInternal.php @@ -0,0 +1,17 @@ +setAttribute('options', CMSPage::getPagesList()); + } +} diff --git a/src/app/Magic/Models/CMSPage.php b/src/app/Magic/Models/CMSPage.php index bdaf96c..9a13b09 100644 --- a/src/app/Magic/Models/CMSPage.php +++ b/src/app/Magic/Models/CMSPage.php @@ -7,11 +7,17 @@ use Cubist\Backpack\app\Magic\Controllers\CubistMagicController; use Cubist\Backpack\app\Template\TemplateAbstract; use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Table; +use Illuminate\Support\Facades\DB; class CMSPage extends CubistMagicNestedModel { protected static $_templates = []; + protected $_usedTemplate = null; + protected static $_templatesById = null; + protected static $_pagesList = null; + + protected static $_table = 'cubist_cms_pages'; protected $table = 'cubist_cms_pages'; protected $_options = ['name' => 'page', @@ -20,11 +26,6 @@ class CMSPage extends CubistMagicNestedModel protected $defaultFieldAttributes = ['translatable' => true]; - public static function boot() - { - parent::boot(); - } - public function setFields() { parent::setFields(); @@ -81,7 +82,7 @@ class CMSPage extends CubistMagicNestedModel */ public function onBeforeCreate($controller) { - $this->useTemplate(request('template'), $controller); + $this->useTemplateIfNotSet(request('template'), $controller); parent::onBeforeCreate($controller); } @@ -90,24 +91,26 @@ class CMSPage extends CubistMagicNestedModel $template = request('template'); // if the template in the GET parameter is missing, figure it out from the db if ($template == false) { - /** @var self $entry */ - $controller->data['entry'] = self::findOrFail($id); - $template = $controller->data['entry']->template; + $entry = self::findOrFail($id); + $template = $entry->template; } - $this->useTemplate($template, $controller); + $this->useTemplateIfNotSet($template); + $controller->updateFieldsFromModel($this); parent::onBeforeEdit($controller, $id); } public function onBeforeStore($controller, $request) { - $this->useTemplate(\Request::input('template'), $controller); + $this->useTemplateIfNotSet(\Request::input('template')); + $controller->updateFieldsFromModel($this); parent::onBeforeStore($controller, $request); } public function onBeforeUpdate($controller, $request) { - $this->useTemplate(\Request::input('template'), $controller); + $this->useTemplateIfNotSet(\Request::input('template')); + $controller->updateFieldsFromModel($this); parent::onBeforeUpdate($controller, $request); } @@ -116,15 +119,18 @@ class CMSPage extends CubistMagicNestedModel * @param $controller CubistMagicController * @throws \Exception */ - protected function useTemplate($template, $controller = null) + public function useTemplate($template) { if (is_string($template)) { $template = TemplateAbstract::getTemplateIntanceByName($template); } + if (null === $template) { return; } + $this->_usedTemplate = $template; + $fields = $template->getFields(); if (!count($fields)) { return; @@ -133,8 +139,12 @@ class CMSPage extends CubistMagicNestedModel $attr = array_merge($this->defaultFieldAttributes, $field); $this->addFakeField($attr); } - if (null !== $controller) { - $controller->updateFieldsFromModel(); + } + + public function useTemplateIfNotSet($template) + { + if ($this->_usedTemplate === null) { + $this->useTemplate($template); } } @@ -168,9 +178,22 @@ class CMSPage extends CubistMagicNestedModel return parent::update($attributes, $options); } - public static function getMenu(){ - } + public function setRawAttributes(array $attributes, $sync = false) + { + if (isset($attributes['template']) && null === $this->_usedTemplate) { + $this->useTemplateIfNotSet($attributes['template']); + } + $res = parent::setRawAttributes($attributes, $sync); + return $res; + } + public static function getPagesList() + { + if (null === static::$_pagesList) { + static::$_pagesList = DB::table(self::$_table)->orderBy('lft')->get()->pluck('name', 'id'); + } + return static::$_pagesList; + } } diff --git a/src/app/Magic/Models/CubistMagicAbstractModel.php b/src/app/Magic/Models/CubistMagicAbstractModel.php index de85ba7..0c7df5c 100644 --- a/src/app/Magic/Models/CubistMagicAbstractModel.php +++ b/src/app/Magic/Models/CubistMagicAbstractModel.php @@ -16,6 +16,7 @@ use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Table; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; +use mysql_xdevapi\Exception; use Spatie\MediaLibrary\HasMedia\HasMedia; use Spatie\MediaLibrary\HasMedia\HasMediaTrait; use Spatie\MediaLibrary\Models\Media; @@ -191,11 +192,13 @@ class CubistMagicAbstractModel extends Model implements HasMedia if (!in_array($name, $this->fillable)) { $this->fillable[] = $name; } - //$this->casts[$store_in] = 'array'; - if ($field->getAttribute('translatable')) { + $this->casts[$store_in] = 'array'; + if ($field->getAttribute('translatable') && !in_array($store_in, $this->translatable)) { $this->translatable[] = $store_in; } - $this->fakeColumns[] = $store_in; + if (!in_array($store_in, $this->fakeColumns)) { + $this->fakeColumns[] = $store_in; + } } else { if ($field->getAttribute('fillable')) { $this->fillable[] = $name; @@ -447,15 +450,6 @@ class CubistMagicAbstractModel extends Model implements HasMedia protected function _prepareData($attributes) { return Json::decodeRecursive($attributes, Json::TYPE_ARRAY); - - foreach ($attributes as $key => $attribute) { - if (is_array($attribute) || is_object($attribute)) { - $res[$key] = json_encode($attribute); - } else { - $res[$key] = $attribute; - } - } - return $res; } public function update(array $attributes = [], array $options = []) diff --git a/src/app/Template/TemplateAbstract.php b/src/app/Template/TemplateAbstract.php index b8e97a1..c65f7a0 100644 --- a/src/app/Template/TemplateAbstract.php +++ b/src/app/Template/TemplateAbstract.php @@ -73,9 +73,8 @@ class TemplateAbstract */ public static function getTemplates() { - $exclude = ['App\\Templates\\Base', 'Cubist\\Backpack\\app\\Template\\TemplateAbstract', 'Cubist\\Backpack\\app\\Template\\TemplatePage']; - if (null === self::$_templates) { + $exclude = ['App\\Templates\\Base', 'Cubist\\Backpack\\app\\Template\\TemplateAbstract', 'Cubist\\Backpack\\app\\Template\\TemplatePage']; self::$_templates = []; $roots = [__DIR__ => 'Cubist\\Backpack\\app\\Template', app_path() . '/Templates' => 'App\\Templates']; foreach ($roots as $templates_root => $prefix) { diff --git a/src/resources/views/fields/button.blade.php b/src/resources/views/fields/button.blade.php index 694969f..1e25404 100644 --- a/src/resources/views/fields/button.blade.php +++ b/src/resources/views/fields/button.blade.php @@ -4,7 +4,7 @@ $link_types = ['none' => 'Désactiver', 'page_link' => trans('backpack::crud.page_link'), 'internal_link' => trans('backpack::crud.internal_link'), 'external_link' => trans('backpack::crud.external_link')]; $field['allows_null'] = false; $page_model = $field['page_model']; -$active_pages = $page_model::all(); +$active_pages = \Cubist\Backpack\app\Magic\Models\CMSPage::getPagesList(); $empty = ['label' => '', 'type' => 'page_link', 'link' => '', 'external_link' => '', 'page_id' => '']; $value = old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? []; @@ -84,12 +84,12 @@ $value = array_merge($empty, \Cubist\Util\ArrayUtil::asArray($value)); @if (!count($active_pages)) @else - @foreach ($active_pages as $key => $page) - + >{{ $page }} @endforeach @endif -- 2.39.5