Skip to content

Instantly share code, notes, and snippets.

@mooror
Created August 27, 2018 01:11
Show Gist options
  • Save mooror/e558ef9d40111f7f9075325df7a5857a to your computer and use it in GitHub Desktop.
Save mooror/e558ef9d40111f7f9075325df7a5857a to your computer and use it in GitHub Desktop.
The save method that triggers the green alert box.
<?php
// ...
/**
* Save handler
*
* @param array $data
* @param Form $form
* @return HTTPResponse
*/
public function save($data, $form)
{
$request = $this->getRequest();
$className = $this->config()->get('tree_class');
// Existing or new record?
$id = $data['ID'];
if (is_numeric($id) && $id > 0) {
$record = DataObject::get_by_id($className, $id);
if ($record && !$record->canEdit()) {
return Security::permissionFailure($this);
}
if (!$record || !$record->ID) {
$this->httpError(404, "Bad record ID #" . (int)$id);
}
} else {
if (!singleton($this->config()->get('tree_class'))->canCreate()) {
return Security::permissionFailure($this);
}
$record = $this->getNewItem($id, false);
}
// save form data into record
$form->saveInto($record, true);
$record->write();
$this->extend('onAfterSave', $record);
$this->setCurrentPageID($record->ID);
$message = _t(__CLASS__ . '.SAVEDUP', 'Saved.');
if ($this->getSchemaRequested()) {
$schemaId = Controller::join_links($this->Link('schema/DetailEditForm'), $id);
// Ensure that newly created records have all their data loaded back into the form.
$form->loadDataFrom($record);
$form->setMessage($message, 'good');
$response = $this->getSchemaResponse($schemaId, $form);
} else {
$response = $this->getResponseNegotiator()->respond($request);
}
$response->addHeader('X-Status', rawurlencode($message));
return $response;
}
// ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment