public function schema($request) { // TODO Hardcoding schema until we can get GridField to generate a schema dynamically $treeClassJS = Convert::raw2js($this->config()->tree_class); $adminURL = Convert::raw2js(AdminRootController::admin_url()); $json = <<<JSON { \t"id": "{$adminURL}campaigns\\/schema\\/EditForm", \t"schema": { \t\t"name": "EditForm", \t\t"id": "Form_EditForm", \t\t"action": "schema", \t\t"method": "GET", \t\t"attributes": { \t\t\t"id": "Form_EditForm", \t\t\t"action": "{$adminURL}campaigns\\/EditForm", \t\t\t"method": "POST", \t\t\t"enctype": "multipart\\/form-data", \t\t\t"target": null \t\t}, \t\t"data": [], \t\t"fields": [{ \t\t\t"name": "ID", \t\t\t"id": "Form_EditForm_ID", \t\t\t"type": "Hidden", \t\t\t"component": null, \t\t\t"holderId": null, \t\t\t"title": false, \t\t\t"source": null, \t\t\t"extraClass": "hidden form-group--no-label", \t\t\t"description": null, \t\t\t"rightTitle": null, \t\t\t"leftTitle": null, \t\t\t"readOnly": false, \t\t\t"disabled": false, \t\t\t"customValidationMessage": "", \t\t\t"attributes": [], \t\t\t"data": [] \t\t}, { \t\t\t"name": "ChangeSets", \t\t\t"id": "Form_EditForm_ChangeSets", \t\t\t"type": "Custom", \t\t\t"component": "GridField", \t\t\t"holderId": null, \t\t\t"title": "Campaigns", \t\t\t"source": null, \t\t\t"extraClass": null, \t\t\t"description": null, \t\t\t"rightTitle": null, \t\t\t"leftTitle": null, \t\t\t"readOnly": false, \t\t\t"disabled": false, \t\t\t"customValidationMessage": "", \t\t\t"attributes": [], \t\t\t"data": { \t\t\t\t"recordType": "{$treeClassJS}", \t\t\t\t"collectionReadEndpoint": { \t\t\t\t\t"url": "{$adminURL}campaigns\\/sets", \t\t\t\t\t"method": "GET" \t\t\t\t}, \t\t\t\t"itemReadEndpoint": { \t\t\t\t\t"url": "{$adminURL}campaigns\\/set\\/:id", \t\t\t\t\t"method": "GET" \t\t\t\t}, \t\t\t\t"itemUpdateEndpoint": { \t\t\t\t\t"url": "{$adminURL}campaigns\\/set\\/:id", \t\t\t\t\t"method": "PUT" \t\t\t\t}, \t\t\t\t"itemCreateEndpoint": { \t\t\t\t\t"url": "{$adminURL}campaigns\\/set\\/:id", \t\t\t\t\t"method": "POST" \t\t\t\t}, \t\t\t\t"itemDeleteEndpoint": { \t\t\t\t\t"url": "{$adminURL}campaigns\\/set\\/:id", \t\t\t\t\t"method": "DELETE" \t\t\t\t}, \t\t\t\t"editFormSchemaEndpoint": "{$adminURL}campaigns\\/schema\\/DetailEditForm", \t\t\t\t"columns": [ \t\t\t\t\t{"name": "Title", "field": "Name"}, \t\t\t\t\t{"name": "Changes", "field": "ChangesCount"}, \t\t\t\t\t{"name": "Description", "field": "Description"} \t\t\t\t] \t\t\t} \t\t}, { \t\t\t"name": "SecurityID", \t\t\t"id": "Form_EditForm_SecurityID", \t\t\t"type": "Hidden", \t\t\t"component": null, \t\t\t"holderId": null, \t\t\t"title": "Security ID", \t\t\t"source": null, \t\t\t"extraClass": "hidden", \t\t\t"description": null, \t\t\t"rightTitle": null, \t\t\t"leftTitle": null, \t\t\t"readOnly": false, \t\t\t"disabled": false, \t\t\t"customValidationMessage": "", \t\t\t"attributes": [], \t\t\t"data": [] \t\t}], \t\t"actions": [] \t} } JSON; $formName = $request->param('ID'); if ($formName == 'EditForm') { $response = $this->getResponse(); $response->addHeader('Content-Type', 'application/json'); $response->setBody($json); return $response; } else { return parent::schema($request); } }
/** * Gets a JSON schema representing the current edit form. * * WARNING: Experimental API. * * @param HTTPRequest $request * @return HTTPResponse */ public function schema($request) { $formName = $request->param('FormName'); if ($formName !== 'fileHistoryForm') { return parent::schema($request); } // Get schema for history form // @todo Eventually all form scaffolding will be based on context rather than record ID // See https://github.com/silverstripe/silverstripe-framework/issues/6362 $itemID = $request->param('ItemID'); $version = $request->param('OtherItemID'); $form = $this->getFileHistoryForm(['RecordID' => $itemID, 'RecordVersion' => $version]); // Respond with this schema $response = $this->getResponse(); $response->addHeader('Content-Type', 'application/json'); $schemaID = $this->getRequest()->getURL(); return $this->getSchemaResponse($schemaID, $form); }