From: Vincent Vanwaelscappel Date: Thu, 20 Jun 2019 16:10:06 +0000 (+0200) Subject: #2843 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=7533ecee61db727f8743ac1e806ac84357cdef3e;p=cubist_cms-back.git #2843 --- diff --git a/src/app/Magic/Fields/CMSTemplate.php b/src/app/Magic/Fields/CMSTemplate.php index 65d5bb2..e06cdf0 100644 --- a/src/app/Magic/Fields/CMSTemplate.php +++ b/src/app/Magic/Fields/CMSTemplate.php @@ -10,6 +10,8 @@ use Illuminate\Support\Str; class CMSTemplate extends SelectFromArray { + protected $_allowNull = false; + protected function _postSetAttributes() { parent::_postSetAttributes(); diff --git a/src/app/Magic/Fields/SelectFromArray.php b/src/app/Magic/Fields/SelectFromArray.php index ee4721b..bb1ed2b 100644 --- a/src/app/Magic/Fields/SelectFromArray.php +++ b/src/app/Magic/Fields/SelectFromArray.php @@ -13,10 +13,11 @@ class SelectFromArray extends Field protected $_columnViewNamespace = CubistBackpackServiceProvider::NAMESPACE . '::columns'; protected $_databaseType = 'string'; protected $_multiple = false; + protected $_allowNull=true; public function getDefaultAttributes() { - return array_merge(parent::getDefaultAttributes(), ['options' => [], 'allows_null' => true, 'allows_multiple' => $this->_multiple]); + return array_merge(parent::getDefaultAttributes(), ['options' => [], 'allows_null' => $this->_allowNull, 'allows_multiple' => $this->_multiple]); } public function getColumnData() diff --git a/src/app/Magic/Models/CMSPage.php b/src/app/Magic/Models/CMSPage.php index 5d895a6..e8f0f80 100644 --- a/src/app/Magic/Models/CMSPage.php +++ b/src/app/Magic/Models/CMSPage.php @@ -96,32 +96,45 @@ class CMSPage extends CubistMagicModel public function onBeforeCreate($controller) { + $this->useTemplate(request('template')); parent::onBeforeCreate($controller); } public function onBeforeEdit($controller, $id) { + $template = request('template'); + // if the template in the GET parameter is missing, figure it out from the db + if ($template == false) { + $entry = self::findOrFail($id); + $template = $entry->template; + } + $this->useTemplate($template); parent::onBeforeEdit($controller, $id); } public function onBeforeStore($controller, $request) { + $this->useTemplate(\Request::input('template')); parent::onBeforeStore($controller, $request); } public function onBeforeUpdate($controller, $request) { + $this->useTemplate(\Request::input('template')); parent::onBeforeUpdate($controller, $request); } /** - * @param $template + * @param $template TemplateAbstract * @throws \Exception */ protected function useTemplate($template) { if (is_string($template)) { - $template = new $template(); + $template = TemplateAbstract::getTemplateIntanceByName($template); + } + if (null === $template) { + return; } $fields = $template->getFields(); diff --git a/src/app/Template/TemplateAbstract.php b/src/app/Template/TemplateAbstract.php index cbadaf9..e386477 100644 --- a/src/app/Template/TemplateAbstract.php +++ b/src/app/Template/TemplateAbstract.php @@ -16,6 +16,11 @@ class TemplateAbstract protected $_fields = []; + public function __construct() + { + $this->init(); + } + public function init() { @@ -76,7 +81,7 @@ class TemplateAbstract } $e = explode('.', $file); $classname = '\\App\\Templates\\' . $e[0]; - self::$_templates[$e[0]] = new $classname(); + self::$_templates[Str::snake($e[0])] = new $classname(); } if (!count(self::$_templates)) { @@ -85,4 +90,19 @@ class TemplateAbstract } return self::$_templates; } + + + /** + * @param $name + * @return TemplateAbstract|null + */ + public static function getTemplateIntanceByName($name) + { + $name = Str::snake($name); + $list = self::getTemplates(); + if (isset($list[$name])) { + return $list[$name]; + } + return null; + } }