From 7357954c84cad019552d6f8b097caf4ecd2b6b15 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Tue, 4 Nov 2014 12:33:38 +1100 Subject: [PATCH] Proposed fix for handling defaults when parsing external properties --- modules/cms/classes/Controller.php | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/modules/cms/classes/Controller.php b/modules/cms/classes/Controller.php index a1de966fe..df630b05d 100644 --- a/modules/cms/classes/Controller.php +++ b/modules/cms/classes/Controller.php @@ -399,8 +399,6 @@ class Controller extends BaseController { $manager = ComponentManager::instance(); - $properties = $this->setComponentPropertiesFromParameters($properties, []); - if ($addToLayout) { if (!$componentObj = $manager->makeComponent($name, $this->layoutObj, $properties)) { throw new CmsException(Lang::get('cms::lang.component.not_found', ['name'=>$name])); @@ -418,6 +416,7 @@ class Controller extends BaseController $this->vars[$alias] = $this->page->components[$alias] = $componentObj; } + $this->setComponentPropertiesFromParameters($componentObj); $componentObj->init(); $componentObj->onInit(); // Deprecated: Remove ithis line if year >= 2015 return $componentObj; @@ -786,8 +785,6 @@ class Controller extends BaseController ? explode(' ', $component) : [$component, $component]; - $properties = $this->setComponentPropertiesFromParameters($properties, $parameters, []); - if (!$componentObj = $manager->makeComponent($name, $this->pageObj, $properties)) { throw new CmsException(Lang::get('cms::lang.component.not_found', ['name'=>$name])); } @@ -800,6 +797,7 @@ class Controller extends BaseController 'obj' => $componentObj ]); + $this->setComponentPropertiesFromParameters($componentObj, $parameters); $componentObj->init(); $componentObj->onInit(); // Deprecated: Remove ithis line if year >= 2015 } @@ -1103,16 +1101,15 @@ class Controller extends BaseController } /** - * Sets component property values from partial parameters. + * Sets component property values from partial parameters. * The property values should be defined as {{ param }}. - * @param array &$properties Specifies the component properties loaded from the partial. + * @param ComponentBase $component The component object. * @param array $parameters Specifies the partial parameters. * @return Returns updated properties. */ - protected function setComponentPropertiesFromParameters(&$properties, $parameters) + protected function setComponentPropertiesFromParameters($component, $parameters = []) { - $result = []; - + $properties = $component->getProperties(); $routerParameters = $this->router->getParameters(); foreach ($properties as $propertyName => $propertyValue) { @@ -1122,21 +1119,19 @@ class Controller extends BaseController if (substr($paramName, 0, 1) == ':') { $paramName = substr($paramName, 1); - $result[$propertyName] = array_key_exists($paramName, $routerParameters) + $newPropertyValue = array_key_exists($paramName, $routerParameters) ? $routerParameters[$paramName] : null; + } else { - $result[$propertyName] = array_key_exists($paramName, $parameters) + $newPropertyValue = array_key_exists($paramName, $parameters) ? $parameters[$paramName] : null; } - } - else { - $result[$propertyName] = $propertyValue; + + $component->setProperty($propertyName, $newPropertyValue); } } - - return $result; } }