<?php /** * Initialises the versioned stage when a request is made. * * @package framework * @subpackage control */ class VersionedRequestFilter implements RequestFilter { public function preRequest(SS_HTTPRequest $request, Session $session, DataModel $model) { // Bootstrap session so that Session::get() accesses the right instance $dummyController = new Controller(); $dummyController->setSession($session); $dummyController->setRequest($request); $dummyController->pushCurrent(); // Block non-authenticated users from setting the stage mode if(!Versioned::can_choose_site_stage($request)) { $permissionMessage = sprintf( _t( "ContentController.DRAFT_SITE_ACCESS_RESTRICTION", 'You must log in with your CMS password in order to view the draft or archived content. '. '<a href="%s">Click here to go back to the published site.</a>' ), Convert::raw2xml(Controller::join_links(Director::baseURL(), $request->getURL(), "?stage=Live")) ); // Force output since RequestFilter::preRequest doesn't support response overriding $response = Security::permissionFailure($dummyController, $permissionMessage); $session->inst_save(); $dummyController->popCurrent(); // Prevent output in testing if(class_exists('SapphireTest', false) && SapphireTest::is_running_test()) { throw new SS_HTTPResponse_Exception($response); } $response->output(); die; } Versioned::choose_site_stage(); $dummyController->popCurrent(); return true; } public function postRequest(SS_HTTPRequest $request, SS_HTTPResponse $response, DataModel $model) { return true; } }