Campaign form schema and edit form

Remove once we have a schema-driven GridField in place.
Edit form should be a GridFieldDetailForm, but there's more work to do for schema generation
from this component.
This commit is contained in:
Ingo Schommer 2016-03-23 12:12:48 +13:00
parent d0ffa7771c
commit b0ba742c1f

View File

@ -13,6 +13,8 @@ class CampaignAdmin extends LeftAndMain implements PermissionProvider {
'readCampaign', 'readCampaign',
'updateCampaign', 'updateCampaign',
'deleteCampaign', 'deleteCampaign',
'schema',
'DetailEditForm'
]; ];
private static $menu_priority = 11; private static $menu_priority = 11;
@ -20,6 +22,7 @@ class CampaignAdmin extends LeftAndMain implements PermissionProvider {
private static $menu_title = 'Campaigns'; private static $menu_title = 'Campaigns';
private static $url_handlers = [ private static $url_handlers = [
'GET items' => 'readCampaigns',
'POST item/$ID' => 'createCampaign', 'POST item/$ID' => 'createCampaign',
'GET item/$ID' => 'readCampaign', 'GET item/$ID' => 'readCampaign',
'PUT item/$ID' => 'updateCampaign', 'PUT item/$ID' => 'updateCampaign',
@ -36,13 +39,118 @@ class CampaignAdmin extends LeftAndMain implements PermissionProvider {
} }
public function getClientConfig() { public function getClientConfig() {
// TODO Hardcoding schema until we can get GridField to generate a schema dynamically
$json = <<<JSON
{
"id": "EditForm",
"schema": {
"name": "EditForm",
"id": "EditForm",
"action": "schema",
"method": "GET",
"schema_url": "admin\/campaigns\/schema\/EditForm",
"attributes": {
"id": "Form_EditForm",
"action": "admin\/campaigns\/EditForm",
"method": "POST",
"enctype": "multipart\/form-data",
"target": null,
"class": "cms-edit-form CampaignAdmin LeftAndMain"
},
"data": [],
"fields": [{
"name": "ID",
"id": "Form_EditForm_ID",
"type": "Hidden",
"component": null,
"holder_id": null,
"title": false,
"source": null,
"extraClass": "hidden nolabel",
"description": null,
"rightTitle": null,
"leftTitle": null,
"readOnly": false,
"disabled": false,
"customValidationMessage": "",
"attributes": [],
"data": []
}, {
"name": "ChangeSets",
"id": "Form_EditForm_ChangeSets",
"type": "Custom",
"component": "GridField",
"holder_id": null,
"title": "Campaigns",
"source": null,
"extraClass": null,
"description": null,
"rightTitle": null,
"leftTitle": null,
"readOnly": false,
"disabled": false,
"customValidationMessage": "",
"attributes": [],
"data": {
'collectionReadUrl': {
'url': 'admin\/campaigns\/items',
'method': 'GET'
},
'itemReadUrl': {
'url': 'admin\/campaigns\/item\/:id',
'method': 'GET'
},
'itemUpdateUrl': {
'url': 'admin\/campaigns\/item\/:id',
'method': 'PUT'
},
'itemCreateUrl': {
'url': 'admin\/campaigns\/item\/:id',
'method': 'POST'
},
'itemDeleteUrl': {
'url': 'admin\/campaigns\/item\/:id',
'method': 'DELETE'
},
'editFormSchemaUrl': 'admin\/campaigns\/schema\/DetailEditForm'
}
}, {
"name": "SecurityID",
"id": "Form_EditForm_SecurityID",
"type": "Hidden",
"component": null,
"holder_id": null,
"title": "Security ID",
"source": null,
"extraClass": "hidden",
"description": null,
"rightTitle": null,
"leftTitle": null,
"readOnly": false,
"disabled": false,
"customValidationMessage": "",
"attributes": [],
"data": []
}],
"actions": []
}
}
JSON;
return array_merge(parent::getClientConfig(), [ return array_merge(parent::getClientConfig(), [
'forms' => [ 'forms' => [
'editForm' => $this->schema->getSchema($this->getEditForm()) 'editForm' => [
// TODO Use schemaUrl instead
'schema' => json_decode($json)
]
] ]
]); ]);
} }
public function getEditForm($id = null, $fields = null) {
return '';
}
/** /**
* REST endpoint to create a campaign. * REST endpoint to create a campaign.
* *
@ -58,6 +166,21 @@ class CampaignAdmin extends LeftAndMain implements PermissionProvider {
return $response; return $response;
} }
/**
* REST endpoint to get a list of campaigns.
*
* @param SS_HTTPRequest $request
*
* @return SS_HTTPResponse
*/
public function readCampaigns(SS_HTTPRequest $request) {
$response = new SS_HTTPResponse();
$response->addHeader('Content-Type', 'application/json');
$response->setBody(Convert::raw2json(['campaigns' => 'read']));
return $response;
}
/** /**
* REST endpoint to get a campaign. * REST endpoint to get a campaign.
* *
@ -103,4 +226,23 @@ class CampaignAdmin extends LeftAndMain implements PermissionProvider {
return $response; return $response;
} }
/**
* @todo Use GridFieldDetailForm once it can handle structured data and form schemas
*
* @return Form
*/
public function getDetailEditForm() {
return Form::create(
$this,
'DetailEditForm',
FieldList::create(
TextField::create('Name'),
TextAreaField::create('Description')
),
FieldList::create(
FormAction::create('save', 'Save')
)
);
}
} }