]> _ Git - cubist_cms-back.git/commitdiff
#2843
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 20 Jun 2019 16:10:06 +0000 (18:10 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 20 Jun 2019 16:10:06 +0000 (18:10 +0200)
src/app/Magic/Fields/CMSTemplate.php
src/app/Magic/Fields/SelectFromArray.php
src/app/Magic/Models/CMSPage.php
src/app/Template/TemplateAbstract.php

index 65d5bb2f4c1b846704e966cc70620cd1525eb2b9..e06cdf014bc1c0bd2e971fd369f483c30bdc0304 100644 (file)
@@ -10,6 +10,8 @@ use Illuminate\Support\Str;
 class CMSTemplate extends SelectFromArray
 {
 
+    protected $_allowNull = false;
+
     protected function _postSetAttributes()
     {
         parent::_postSetAttributes();
index ee4721b7b68eb974d2d3351dafe566f5774ef067..bb1ed2b91a9abc88148dfe998087705105cbd651 100644 (file)
@@ -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()
index 5d895a6c3a7e9bef4fec4b0f9067196d7c92f1ff..e8f0f807456c0e01086b0e646f06b1ca4a79213d 100644 (file)
@@ -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();
index cbadaf9939d7c76374aeee180e4d49198c573c1f..e3864773c915fb3f777cd022e060580cd701a5ea 100644 (file)
@@ -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;
+    }
 }