mirror of
https://github.com/silverstripe/silverstripe-reports
synced 2024-10-22 11:05:53 +02:00
BUGFIX: ticket #5239 - Infinite loop: live subpage of draft page redirects onto itself when called just by url segment
This commit is contained in:
parent
abc87a4f8f
commit
f7b6f1de5a
@ -159,7 +159,11 @@ class ModelAsController extends Controller implements NestedController {
|
||||
'SiteTree',
|
||||
"\"URLSegment\" = '$URLSegment'" . ($useParentIDFilter ? ' AND "ParentID" = ' . (int)$parentID : '')
|
||||
);
|
||||
if($pages && $pages->Count() == 1) return $pages->First();
|
||||
|
||||
if($pages && $pages->Count() == 1 && ($page = $pages->First())) {
|
||||
$parent = $page->ParentID ? $page->Parent() : $page;
|
||||
if($parent->isPublished()) return $page;
|
||||
}
|
||||
}
|
||||
|
||||
// Get an old version of a page that has been renamed.
|
||||
@ -175,8 +179,9 @@ class ModelAsController extends Controller implements NestedController {
|
||||
$record = $query->execute()->first();
|
||||
|
||||
if($record && ($oldPage = DataObject::get_by_id('SiteTree', $record['RecordID']))) {
|
||||
$oldParent = $oldPage->ParentID ? $oldPage->Parent() : $oldPage;
|
||||
// Run the page through an extra filter to ensure that all extensions are applied.
|
||||
if(SiteTree::get_by_link($oldPage->RelativeLink())) return $oldPage;
|
||||
if(SiteTree::get_by_link($oldPage->RelativeLink()) && $oldParent->isPublished()) return $oldPage;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -233,5 +233,33 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
$response = ModelAsController::find_old_page('oldpage2',$page2->ID);
|
||||
$this->assertEquals(false, $response );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* go to a page that's been published but is child of an unpublished page
|
||||
*
|
||||
* NOTE: This test requires nested_urls
|
||||
*/
|
||||
function testChildOfDraft() {
|
||||
RootURLController::reset();
|
||||
SiteTree::enable_nested_urls();
|
||||
|
||||
$draft = new Page();
|
||||
$draft->Title = 'Root Leve Draft Page';
|
||||
$draft->URLSegment = 'root';
|
||||
$draft->write();
|
||||
|
||||
$published = new Page();
|
||||
$published->Title = 'Published Page Under Draft Page';
|
||||
$published->URLSegment = 'sub-root';
|
||||
$published->write();
|
||||
$published->publish('Stage', 'Live');
|
||||
$response = $this->get('root/sub-root');
|
||||
|
||||
$this->assertEquals(
|
||||
$response->getStatusCode(),
|
||||
404,
|
||||
'The page should not be found since its parent has not been published, in this case http://<yousitename>/root/sub-root or http://<yousitename>/sub-root'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user