From bc345803d558328c13be6b027ab2c6ffc31d7b0a Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Fri, 12 Oct 2012 09:57:11 +1300 Subject: [PATCH] BUG Fixing model not being set before populateDefaults() In cases where a getter on a DataObject calls getComponent() or other relational getter, $this->model won't have been set at this point, and a fatal error is triggered. This fixes it so $this->model is set *before* populateDefaults() in DataObject::__construct() and the getters can operate normally. --- model/DataObject.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/model/DataObject.php b/model/DataObject.php index dc5097249..114808240 100644 --- a/model/DataObject.php +++ b/model/DataObject.php @@ -312,7 +312,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity * Singletons don't have their defaults set. */ public function __construct($record = null, $isSingleton = false, $model = null) { - parent::__construct(); // Set the fields data. @@ -366,6 +365,10 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity HTTP::register_modification_date($record['LastEdited']); } + // this must be called before populateDefaults(), as field getters on a DataObject + // may call getComponent() and others, which rely on $this->model being set. + $this->model = $model ? $model : DataModel::inst(); + // Must be called after parent constructor if(!$isSingleton && (!isset($this->record['ID']) || !$this->record['ID'])) { $this->populateDefaults(); @@ -373,8 +376,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity // prevent populateDefaults() and setField() from marking overwritten defaults as changed $this->changed = array(); - - $this->model = $model ? $model : DataModel::inst(); } /** @@ -1303,7 +1304,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity if($joinID) { $component = $this->model->$class->byID($joinID); } - + if(!isset($component) || !$component) { $component = $this->model->$class->newObject(); }