From 2e4dfa3dc1502e5add442c60316ee0978ac1094e Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Mon, 27 Apr 2009 00:49:39 +0000 Subject: [PATCH] BUGFIX #3919: Fix DataObject::dbObject() for decorated fields (Merged from r75150) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.3@75151 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- core/ViewableData.php | 6 +++--- tests/DataObjectDecoratorTest.php | 10 +++++++++- tests/DataObjectDecoratorTest.yml | 4 ++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/core/ViewableData.php b/core/ViewableData.php index 72535f953..669118df8 100644 --- a/core/ViewableData.php +++ b/core/ViewableData.php @@ -208,19 +208,19 @@ class ViewableData extends Object implements IteratorAggregate { public function buildCastingHelperCache(&$cache) { $class = $this->class ? $this->class : get_class($this); $classes = ClassInfo::ancestry($class); - + foreach($classes as $componentClass) { if($componentClass == "ViewableData") $isViewableData = true; if($componentClass == "DataObject") $isDataObject = true; if(isset($isDataObject) && $isDataObject) { - $fields = eval("return {$componentClass}::\$db;"); + $fields = Object::uninherited_static($componentClass, 'db'); if($fields) foreach($fields as $fieldName => $fieldSchema) { $cache[$fieldName] = ViewableData::castingObjectCreatorPair($fieldSchema); } } if(isset($isViewableData) && $isViewableData) { - $fields = eval("return {$componentClass}::\$casting;"); + $fields = Object::uninherited_static($componentClass, 'casting'); if($fields) foreach($fields as $fieldName => $fieldSchema) { $cache[$fieldName] = ViewableData::castingObjectCreatorPair($fieldSchema); } diff --git a/tests/DataObjectDecoratorTest.php b/tests/DataObjectDecoratorTest.php index a950a6901..8743debeb 100644 --- a/tests/DataObjectDecoratorTest.php +++ b/tests/DataObjectDecoratorTest.php @@ -56,6 +56,14 @@ class DataObjectDecoratorTest extends SapphireTest { } + /** + * Test that DataObject::dbObject() works for fields applied by a decorator + */ + function testDbObjectOnDecoratedFields() { + $member = $this->objFromFixture('DataObjectDecoratorTest_Member', 'member1'); + $this->assertNotNull($member->dbObject('Website')); + $this->assertType('Text', $member->dbObject('Website')); + } } class DataObjectDecoratorTest_Member extends DataObject implements TestOnly { @@ -161,4 +169,4 @@ class DataObjectDecoratorTest_Ext2 extends DataObjectDecorator implements TestOn DataObject::add_extension('DataObjectDecoratorTest_MyObject', 'DataObjectDecoratorTest_Ext1'); DataObject::add_extension('DataObjectDecoratorTest_MyObject', 'DataObjectDecoratorTest_Ext2'); -?> \ No newline at end of file +?> diff --git a/tests/DataObjectDecoratorTest.yml b/tests/DataObjectDecoratorTest.yml index 09b4f41a4..f9ead9b80 100644 --- a/tests/DataObjectDecoratorTest.yml +++ b/tests/DataObjectDecoratorTest.yml @@ -33,6 +33,10 @@ Member: Groups: =>Group.admingroup websiteuser: Email: websiteuser@test.com +DataObjectDecoratorTest_Member: + member1: + Name: Sam + Website: http://www.example.org DataObjectDecoratorTest_MyObject: object1: Title: Object 1 \ No newline at end of file