Support for React-driven "add to campaign"

This commit is contained in:
Ingo Schommer 2016-08-25 21:30:53 +12:00
parent c411c500a5
commit 93d7197aad
2 changed files with 94 additions and 34 deletions

View File

@ -22,7 +22,6 @@ use SilverStripe\Admin\AdminRootController;
use SilverStripe\Admin\LeftAndMain;
use SilverStripe\Admin\CMSBatchActionHandler;
use SilverStripe\Admin\CMSPreviewable;
use SilverStripe\Admin\AddToCampaignHandler;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\CMS\Model\RedirectorPage;
use SilverStripe\CMS\Model\CurrentPageIdentifier;
@ -102,7 +101,6 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
private static $page_length = 15;
private static $allowed_actions = array(
'AddToCampaignForm',
'archive',
'deleteitems',
'DeleteItemsForm',
@ -1310,38 +1308,6 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
return $this->getResponseNegotiator()->respond($this->getRequest());
}
/**
* Action handler for adding pages to a campaign
*
* @param SS_HTTPRequest
* @return DBHTMLText|SS_HTTPResponse
*/
public function AddToCampaignForm($request) {
$data = $request->postVars();
if (!$data['Campaign']) {
$this->httpError(400, _t(
'AddToCampaign.ErrorCampaignNotSelected',
'There was no campaign selected to be added to'
));
return null;
}
$handler = AddToCampaignHandler::create($this, $data);
return $handler->handle();
}
/**
* Action handler for adding pages to a campaign
*
* @param array $data
* @param Form $form
* @return DBHTMLText|SS_HTTPResponse
*/
public function addtocampaign($data, $form) {
$handler = AddToCampaignHandler::create($this, $data);
return $handler->handle();
}
/**
* Batch Actions Handler
*/

View File

@ -2,6 +2,10 @@
namespace SilverStripe\CMS\Controllers;
use Convert;
use SilverStripe\Admin\AddToCampaignHandler;
use SS_HTTPResponse;
/**
* @package cms
*/
@ -15,4 +19,94 @@ class CMSPageEditController extends CMSMain {
private static $required_permission_codes = 'CMS_ACCESS_CMSMain';
private static $allowed_actions = array(
'AddToCampaignForm',
);
public function getClientConfig()
{
return array_merge( parent::getClientConfig(), [
'form' => [
'AddToCampaignForm' => [
'schemaUrl' => $this->Link('schema/AddToCampaignForm')
],
],
]);
}
/**
* Action handler for adding pages to a campaign
*
* @param array $data
* @param Form $form
* @return DBHTMLText|SS_HTTPResponse
*/
public function addtocampaign($data, $form)
{
$id = $data['ID'];
$record = \Page::get()->byID($id);
$handler = AddToCampaignHandler::create($this, $record);
$results = $handler->addToCampaign($record, $data['Campaign']);
if (!is_null($results)) {
$request = $this->getRequest();
if($request->getHeader('X-Formschema-Request')) {
$handler->setShowTitle(false);
$data = $this->getSchemaForForm($handler->Form($record));
$data['message'] = $results;
$response = new SS_HTTPResponse(Convert::raw2json($data));
$response->addHeader('Content-Type', 'application/json');
return $response;
}
return $results;
}
}
/**
* Url handler for add to campaign form
*
* @param SS_HTTPRequest $request
* @return Form
*/
public function AddToCampaignForm($request)
{
// Get ID either from posted back value, or url parameter
$id = $request->param('ID') ?: $request->postVar('ID');
return $this->getAddToCampaignForm($id);
}
/**
* @param int $id
* @return Form
*/
public function getAddToCampaignForm($id)
{
// Get record-specific fields
$record = \Page::get()->byID($id);
if (!$record) {
$this->httpError(404, _t(
'AssetAdmin.ErrorNotFound',
'That {Type} couldn\'t be found',
'',
['Type' => _t('SiteTree.SINGULARNAME')]
));
return null;
}
if (!$record->canView()) {
$this->httpError(403, _t(
'AssetAdmin.ErrorItemPermissionDenied',
'It seems you don\'t have the necessary permissions to add {ObjectTitle} to a campaign',
'',
['ObjectTitle' => _t('SiteTree.SINGULARNAME')]
));
return null;
}
$handler = AddToCampaignHandler::create($this, $record);
$handler->setShowTitle(false);
return $handler->Form($record);
}
}