Skip to content

Commit

Permalink
BUGFIX: ticket #5239 - Infinite loop: live subpage of draft page redi…
Browse files Browse the repository at this point in the history
…rects onto itself when called just by url segment
  • Loading branch information
carlos barberis authored and Hamish Friedlander committed Jul 23, 2012
1 parent abc87a4 commit f7b6f1d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
9 changes: 7 additions & 2 deletions code/controllers/ModelAsController.php
Expand Up @@ -159,7 +159,11 @@ static function find_old_page($URLSegment,$parentID = 0, $ignoreNestedURLs = fal
'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.
Expand All @@ -175,8 +179,9 @@ static function find_old_page($URLSegment,$parentID = 0, $ignoreNestedURLs = fal
$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;
}
}

Expand Down
30 changes: 29 additions & 1 deletion tests/controller/ModelAsControllerTest.php
Expand Up @@ -233,5 +233,33 @@ function testFindOldPage(){
$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'
);
}

}

0 comments on commit f7b6f1d

Please sign in to comment.