mirror of
https://github.com/silverstripe/silverstripe-reports
synced 2024-10-22 11:05:53 +02:00
Merge pull request #1132 from kinglozzer/pulls/virtualpage-casting
FIX: VirtualPages use correct casting for 'virtual' database fields
This commit is contained in:
commit
cabd8bbab9
@ -450,6 +450,22 @@ class VirtualPage extends Page {
|
||||
if(parent::hasMethod($method)) return true;
|
||||
return $this->copyContentFrom()->hasMethod($method);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the "casting helper" (a piece of PHP code that when evaluated creates a casted value object) for a field
|
||||
* on this object.
|
||||
*
|
||||
* @param string $field
|
||||
* @return string
|
||||
*/
|
||||
public function castingHelper($field) {
|
||||
if($this->copyContentFrom()) {
|
||||
return $this->copyContentFrom()->castingHelper($field);
|
||||
} else {
|
||||
return parent::castingHelper($field);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -591,6 +591,19 @@ class VirtualPageTest extends SapphireTest {
|
||||
'No field copying from previous original after page type changed'
|
||||
);
|
||||
}
|
||||
|
||||
public function testVirtualPageFindsCorrectCasting() {
|
||||
$page = new VirtualPageTest_ClassA();
|
||||
$page->CastingTest = "Some content";
|
||||
$page->write();
|
||||
$virtual = new VirtualPage();
|
||||
$virtual->CopyContentFromID = $page->ID;
|
||||
$virtual->write();
|
||||
|
||||
$this->assertEquals('VirtualPageTest_TestDBField', $virtual->castingHelper('CastingTest'));
|
||||
$this->assertEquals('SOME CONTENT', $virtual->obj('CastingTest')->forTemplate());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class VirtualPageTest_ClassA extends Page implements TestOnly {
|
||||
@ -599,6 +612,7 @@ class VirtualPageTest_ClassA extends Page implements TestOnly {
|
||||
'MyInitiallyCopiedField' => 'Text',
|
||||
'MyVirtualField' => 'Text',
|
||||
'MyNonVirtualField' => 'Text',
|
||||
'CastingTest' => 'VirtualPageTest_TestDBField'
|
||||
);
|
||||
|
||||
private static $allowed_children = array('VirtualPageTest_ClassB');
|
||||
@ -616,6 +630,12 @@ class VirtualPageTest_NotRoot extends Page implements TestOnly {
|
||||
private static $can_be_root = false;
|
||||
}
|
||||
|
||||
class VirtualPageTest_TestDBField extends Varchar implements TestOnly {
|
||||
public function forTemplate() {
|
||||
return strtoupper($this->XML());
|
||||
}
|
||||
}
|
||||
|
||||
class VirtualPageTest_VirtualPageSub extends VirtualPage implements TestOnly {
|
||||
private static $db = array(
|
||||
'MyProperty' => 'Varchar',
|
||||
|
Loading…
Reference in New Issue
Block a user