Merge branch '3.5' into 3.6

This commit is contained in:
Daniel Hensby 2017-07-18 15:44:13 +01:00
commit 8e2695f140
No known key found for this signature in database
GPG Key ID: B00D1E9767F0B06E
4 changed files with 29 additions and 11 deletions

View File

@ -419,7 +419,7 @@ class VirtualPage extends Page {
return $this->CopyContentFrom()->$field;
}
}
/**
* Allow attributes on the master page to pass
@ -514,10 +514,8 @@ class VirtualPage_Controller extends Page_Controller {
}
public function getViewer($action) {
$originalClass = get_class($this->CopyContentFrom());
if ($originalClass == 'SiteTree') $name = 'Page_Controller';
else $name = $originalClass."_Controller";
$controller = new $name();
$object = $this->CopyContentFrom();
$controller = ModelAsController::controller_for($object, $action);
return $controller->getViewer($action);
}
@ -556,11 +554,8 @@ class VirtualPage_Controller extends Page_Controller {
*/
public function hasMethod($method) {
$haveIt = parent::hasMethod($method);
if (!$haveIt) {
$originalClass = get_class($this->CopyContentFrom());
if ($originalClass == 'SiteTree') $name = 'ContentController';
else $name = $originalClass."_Controller";
$controller = new $name($this->dataRecord->CopyContentFrom());
if (!$haveIt) {
$controller = ModelAsController::controller_for($this->CopyContentFrom());
$haveIt = $controller->hasMethod($method);
}
return $haveIt;

View File

@ -9,7 +9,7 @@ class VirtualPageTest extends FunctionalTest {
'VirtualPageTest_ClassA',
'VirtualPageTest_ClassB',
'VirtualPageTest_VirtualPageSub',
'VirtualPageTest_PageWithAllowedChildren'
'VirtualPageTest_PageWithAllowedChildren',
);
protected $illegalExtensions = array(
@ -667,6 +667,27 @@ class VirtualPageTest extends FunctionalTest {
$this->assertEquals(301, $response->getStatusCode());
$this->assertEquals('http://google.com', $response->getHeader('Location'));
}
public function testVirtualPageRendersCorrectTemplate() {
$self = $this;
$this->useDraftSite(true);
$this->useTestTheme(dirname(__FILE__), 'virtualpagetest', function() use ($self) {
$page = new VirtualPageTest_ClassA();
$page->Title = 'Test Page';
$page->Content = 'NotThisContent';
$page->MyInitiallyCopiedField = 'TestContent';
$page->write();
$vp = new VirtualPage();
$vp->CopyContentFromID = $page->ID;
$vp->write();
$response = $self->get($vp->Link());
$self->assertEquals(200, $response->getStatusCode());
$self->assertContains('TestContent', $response->getBody());
$self->assertNotContains('NotThisContent', $response->getBody());
});
}
}
class VirtualPageTest_ClassA extends Page implements TestOnly {

View File

@ -0,0 +1 @@
<div>$Content</div>

View File

@ -0,0 +1 @@
<div>$MyInitiallyCopiedField</div>