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
This commit is contained in:
Sam Minnee 2009-04-27 00:49:39 +00:00
parent 819601de63
commit 2e4dfa3dc1
3 changed files with 16 additions and 4 deletions

View File

@ -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);
}

View File

@ -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');
?>
?>

View File

@ -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