From 75ce4413480ab79315c5cb8938042780b379f11c Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Thu, 19 May 2011 21:26:09 +1200 Subject: [PATCH] ENHANCEMENT Redirecting to cms preview in ContentController if user is logged in --- code/controller/ContentController.php | 6 ++++++ tests/controller/ContentControllerPermissionsTest.php | 11 +++++++---- tests/model/SiteTreePermissionsTest.php | 8 ++++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/code/controller/ContentController.php b/code/controller/ContentController.php index ea3f2f18..de7c3652 100755 --- a/code/controller/ContentController.php +++ b/code/controller/ContentController.php @@ -120,6 +120,12 @@ class ContentController extends Controller { return Security::permissionFailure($this, sprintf($message, Controller::join_links($link, "?stage=Live"))); } } + + // Redirect to admin UI if user is logged in + if($this->URLSegment != 'Security' && Permission::check('CMS_ACCESS_CMSMain') && !$this->request->getVar('cms-preview-disabled')) { + $cmsController = singleton('CMSPageEditController'); + return Director::redirect(Controller::join_links($cmsController->Link('show'), $this->dataRecord->ID, '?cms-preview-expanded=1')); + } // Use theme from the site config if(($config = SiteConfig::current_site_config()) && $config->Theme) { diff --git a/tests/controller/ContentControllerPermissionsTest.php b/tests/controller/ContentControllerPermissionsTest.php index 48f0e0c1..bc01740f 100644 --- a/tests/controller/ContentControllerPermissionsTest.php +++ b/tests/controller/ContentControllerPermissionsTest.php @@ -16,19 +16,22 @@ class ContentControllerPermissionTest extends FunctionalTest { $page->publish('Stage', 'Live'); $response = $this->get('/testpage'); - $this->assertEquals($response->getStatusCode(), 200); + $this->assertEquals($response->getStatusCode(), 200, 'Doesnt require login for implicit live stage'); $response = $this->get('/testpage/?stage=Live'); - $this->assertEquals($response->getStatusCode(), 200); + $this->assertEquals($response->getStatusCode(), 200, 'Doesnt require login for explicit live stage'); $response = $this->get('/testpage/?stage=Stage'); // should redirect to login - $this->assertEquals($response->getStatusCode(), 302); + $this->assertEquals($response->getStatusCode(), 302, 'Redirects to login page when not logged in for draft stage'); + $this->assertContains('Security/login', $response->getHeader('Location')); $this->logInWithPermission('CMS_ACCESS_CMSMain'); $response = $this->get('/testpage/?stage=Stage'); - $this->assertEquals($response->getStatusCode(), 200); + $this->assertEquals($response->getStatusCode(), 302, 'Redirects to page view in CMS when logged in for draft stage'); + $this->assertNotContains('Security/login', $response->getHeader('Location')); + $this->assertContains('admin/page/edit/show/' . $page->ID, $response->getHeader('Location')); } diff --git a/tests/model/SiteTreePermissionsTest.php b/tests/model/SiteTreePermissionsTest.php index 72e2222f..5c911943 100755 --- a/tests/model/SiteTreePermissionsTest.php +++ b/tests/model/SiteTreePermissionsTest.php @@ -54,6 +54,7 @@ class SiteTreePermissionsTest extends FunctionalTest { // should be prompted for a login $response = $this->get($page->URLSegment . '?stage=Stage'); $this->assertEquals($response->getStatusCode(), '302'); + $this->assertContains('Security/login', $response->getHeader('Location')); $this->logInWithPermission('ADMIN'); @@ -61,7 +62,9 @@ class SiteTreePermissionsTest extends FunctionalTest { $this->assertEquals($response->getStatusCode(), '404'); $response = $this->get($page->URLSegment . '?stage=Stage'); - $this->assertEquals($response->getStatusCode(), '200'); + $this->assertEquals($response->getStatusCode(), '302'); + $this->assertNotContains('Security/login', $response->getHeader('Location')); + $this->assertContains('admin/page/edit/show/' . $page->ID, $response->getHeader('Location')); $response = $this->get($page->URLSegment . '?stage='); $this->assertEquals($response->getStatusCode(), '404'); @@ -330,9 +333,10 @@ class SiteTreePermissionsTest extends FunctionalTest { $response = $this->get($childPage->RelativeLink()); $this->assertEquals( $response->getStatusCode(), - 200, + 302, 'Authenticated members can view a page marked as "Viewable by these groups" if theyre in the listed groups by inherited permission' ); + $this->assertContains('admin/page/edit/show/' . $childPage->ID, $response->getHeader('Location')); $this->session()->inst_set('loggedInAs', null); }