mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
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:
parent
819601de63
commit
2e4dfa3dc1
@ -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);
|
||||
}
|
||||
|
@ -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');
|
||||
?>
|
||||
?>
|
||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user