Skip to content

Commit

Permalink
Merge pull request #51 from helpfulrobot/convert-to-psr-2
Browse files Browse the repository at this point in the history
Converted to PSR-2
  • Loading branch information
Damian Mooyman committed Dec 17, 2015
2 parents 5103574 + 77dc581 commit 8b783b5
Show file tree
Hide file tree
Showing 8 changed files with 392 additions and 369 deletions.
236 changes: 120 additions & 116 deletions code/controllers/ShareDraftController.php
@@ -1,119 +1,123 @@
<?php

class ShareDraftController extends Controller {
/**
* Controller for rendering draft pages.
*
* @config
*
* @var string
*/
private static $controller = 'Page_Controller';

/**
* @var array
*/
private static $allowed_actions = array(
'preview'
);

/**
* @var array
*/
private static $url_handlers = array(
'$Key/$Token' => 'preview'
);

/**
* @param SS_HTTPRequest $request
*
* @return string|HTMLText
*/
public function preview(SS_HTTPRequest $request) {
$key = $request->param('Key');
$token = $request->param('Token');

/**
* @var ShareToken $shareToken
*/
$shareToken = ShareToken::get()->filter('token', $token)->first();

if(!$shareToken) {
return $this->errorPage();
}

$page = Versioned::get_one_by_stage(
'SiteTree',
'Stage',
sprintf('"SiteTree"."ID" = \'%d\'', $shareToken->PageID)
);

$latest = Versioned::get_latest_version('SiteTree', $shareToken->PageID);

$controller = $this->getControllerFor($page);

if(!$shareToken->isExpired() && $page->generateKey($shareToken->Token) === $key) {
Requirements::css(SHAREDRAFTCONTENT_DIR . '/css/top-bar.css');

// Temporarily un-secure the draft site and switch to draft
$oldSecured = Session::get('unsecuredDraftSite');
$oldMode = Versioned::get_reading_mode();
$restore = function() use ($oldSecured, $oldMode) {
Session::set('unsecuredDraftSite', $oldSecured);
Versioned::set_reading_mode($oldMode);
};

// Process page inside an unsecured draft container
try {
Session::set('unsecuredDraftSite', true);
Versioned::reading_stage('Stage');

// Create mock request; Simplify request to single top level reqest
$pageRequest = new SS_HTTPRequest('GET', $page->URLSegment);
$pageRequest->match('$URLSegment//$Action/$ID/$OtherID', true);
$rendered = $controller->handleRequest($pageRequest, $this->model);

// Render draft heading
$data = new ArrayData(array(
'Page' => $page,
'Latest' => $latest,
));
$include = (string) $data->renderWith('Includes/TopBar');
} catch(Exception $ex) {
$restore();
throw $ex;
}
$restore();

return str_replace('</body>', $include . '</body>', (string) $rendered->getBody());
} else {
return $this->errorPage();
}
}

/**
* @return HTMLText
*/
protected function errorPage() {
Requirements::css(SHAREDRAFTCONTENT_DIR . '/css/error-page.css');

return $this->renderWith('ShareDraftContentError');
}

/**
* @param mixed $page
*
* @return mixed
*/
protected function getControllerFor($page) {
$config = Config::inst()->forClass('ShareDraftController');

$controller = $config->controller;

if (!$controller || !class_exists($controller)) {
return new ContentController($page);
}

return new $controller($page);
}
class ShareDraftController extends Controller
{
/**
* Controller for rendering draft pages.
*
* @config
*
* @var string
*/
private static $controller = 'Page_Controller';

/**
* @var array
*/
private static $allowed_actions = array(
'preview'
);

/**
* @var array
*/
private static $url_handlers = array(
'$Key/$Token' => 'preview'
);

/**
* @param SS_HTTPRequest $request
*
* @return string|HTMLText
*/
public function preview(SS_HTTPRequest $request)
{
$key = $request->param('Key');
$token = $request->param('Token');

/**
* @var ShareToken $shareToken
*/
$shareToken = ShareToken::get()->filter('token', $token)->first();

if (!$shareToken) {
return $this->errorPage();
}

$page = Versioned::get_one_by_stage(
'SiteTree',
'Stage',
sprintf('"SiteTree"."ID" = \'%d\'', $shareToken->PageID)
);

$latest = Versioned::get_latest_version('SiteTree', $shareToken->PageID);

$controller = $this->getControllerFor($page);

if (!$shareToken->isExpired() && $page->generateKey($shareToken->Token) === $key) {
Requirements::css(SHAREDRAFTCONTENT_DIR . '/css/top-bar.css');

// Temporarily un-secure the draft site and switch to draft
$oldSecured = Session::get('unsecuredDraftSite');
$oldMode = Versioned::get_reading_mode();
$restore = function () use ($oldSecured, $oldMode) {
Session::set('unsecuredDraftSite', $oldSecured);
Versioned::set_reading_mode($oldMode);
};

// Process page inside an unsecured draft container
try {
Session::set('unsecuredDraftSite', true);
Versioned::reading_stage('Stage');

// Create mock request; Simplify request to single top level reqest
$pageRequest = new SS_HTTPRequest('GET', $page->URLSegment);
$pageRequest->match('$URLSegment//$Action/$ID/$OtherID', true);
$rendered = $controller->handleRequest($pageRequest, $this->model);

// Render draft heading
$data = new ArrayData(array(
'Page' => $page,
'Latest' => $latest,
));
$include = (string) $data->renderWith('Includes/TopBar');
} catch (Exception $ex) {
$restore();
throw $ex;
}
$restore();

return str_replace('</body>', $include . '</body>', (string) $rendered->getBody());
} else {
return $this->errorPage();
}
}

/**
* @return HTMLText
*/
protected function errorPage()
{
Requirements::css(SHAREDRAFTCONTENT_DIR . '/css/error-page.css');

return $this->renderWith('ShareDraftContentError');
}

/**
* @param mixed $page
*
* @return mixed
*/
protected function getControllerFor($page)
{
$config = Config::inst()->forClass('ShareDraftController');

$controller = $config->controller;

if (!$controller || !class_exists($controller)) {
return new ContentController($page);
}

return new $controller($page);
}
}
55 changes: 29 additions & 26 deletions code/extensions/ShareDraftContentControllerExtension.php
@@ -1,32 +1,35 @@
<?php

class ShareDraftContentControllerExtension extends Extension {
/**
* @var array
*/
private static $allowed_actions = array(
'MakeShareDraftLink',
);
class ShareDraftContentControllerExtension extends Extension
{
/**
* @var array
*/
private static $allowed_actions = array(
'MakeShareDraftLink',
);

/**
* @return mixed
*/
public function MakeShareDraftLink() {
if ($member = Member::currentUser()) {
if($this->owner->hasMethod('CurrentPage') && $this->owner->CurrentPage()->canEdit($member)) {
return $this->owner->CurrentPage()->ShareTokenLink();
} elseif ($this->owner->hasMethod('canEdit') && $this->owner->canEdit($member)) {
return $this->owner->ShareTokenLink();
}
}
/**
* @return mixed
*/
public function MakeShareDraftLink()
{
if ($member = Member::currentUser()) {
if ($this->owner->hasMethod('CurrentPage') && $this->owner->CurrentPage()->canEdit($member)) {
return $this->owner->CurrentPage()->ShareTokenLink();
} elseif ($this->owner->hasMethod('canEdit') && $this->owner->canEdit($member)) {
return $this->owner->ShareTokenLink();
}
}

return Security::permissionFailure();
}
return Security::permissionFailure();
}

/**
* @return string
*/
public function getShareDraftLinkAction() {
return $this->owner->Link('MakeShareDraftLink');
}
/**
* @return string
*/
public function getShareDraftLinkAction()
{
return $this->owner->Link('MakeShareDraftLink');
}
}
18 changes: 10 additions & 8 deletions code/extensions/ShareDraftContentRequirementsExtension.php
@@ -1,11 +1,13 @@
<?php

class ShareDraftContentRequirementsExtension extends DataExtension {
/**
* @inheritdoc
*/
public function init() {
Requirements::css(SHAREDRAFTCONTENT_DIR . '/css/share-component.css');
Requirements::javascript(SHAREDRAFTCONTENT_DIR . '/javascript/main.js');
}
class ShareDraftContentRequirementsExtension extends DataExtension
{
/**
* @inheritdoc
*/
public function init()
{
Requirements::css(SHAREDRAFTCONTENT_DIR . '/css/share-component.css');
Requirements::javascript(SHAREDRAFTCONTENT_DIR . '/javascript/main.js');
}
}

0 comments on commit 8b783b5

Please sign in to comment.