ENHANCEMENT: working delete button

This commit is contained in:
Julian Seidenberg 2012-02-27 17:27:03 +13:00 committed by Ingo Schommer
parent 550f75408e
commit 3936909980
2 changed files with 49 additions and 2 deletions

View File

@ -299,6 +299,23 @@ class Controller extends RequestHandler {
return parent::hasAction($action) || $this->hasActionTemplate($action);
}
/**
* Removes all the "action" part of the current URL and returns the result.
* If no action parameter is present, returns the full URL
* @static
* @return String
*/
public function removeAction($fullURL, $action = null) {
if (!$action) $action = $this->getAction(); //default to current action
$returnURL = $fullURL;
if (($pos = strpos($fullURL, $action)) !== false) {
$returnURL = substr($fullURL,0,$pos);
}
return $returnURL;
}
/**
* Returns TRUE if this controller has a template that is specifically designed to handle a specific action.
*

View File

@ -183,10 +183,12 @@ class GridFieldPopupForm_ItemRequest extends RequestHandler {
// WARNING: The arguments passed here are a little arbitrary. This API will need cleanup
$this->record->getCMSFields($this->popupController, $this->popupFormName),
new FieldList(
$saveAction = new FormAction('doSave', _t('GridFieldDetailsForm.Save', 'Save'))
$saveAction = new FormAction('doSave', _t('GridFieldDetailsForm.Save', 'Save')),
$deleteAction = new FormAction('doDelete', _t('GridFieldDetailsForm.Delete', 'Delete'))
)
);
$saveAction->addExtraClass('ss-ui-action-constructive');
$deleteAction->addExtraClass('ss-ui-action-destructive');
$form->loadDataFrom($this->record);
return $form;
}
@ -201,7 +203,7 @@ class GridFieldPopupForm_ItemRequest extends RequestHandler {
$this->gridField->getList()->add($this->record);
} catch(ValidationException $e) {
$form->sessionMessage($e->getResult()->message(), 'bad');
return Director::redirectBack();
return Controller::curr()->redirectBack();
}
// TODO Save this item into the given relationship
@ -217,6 +219,34 @@ class GridFieldPopupForm_ItemRequest extends RequestHandler {
return $this->popupController->redirectBack();
}
function doDelete($data, $form) {
try {
$toDelete = $this->record;
if (!$toDelete->canDelete()) {
throw new ValidationException(_t('GridFieldDetailsForm.DeletePermissionsFailure',"No delete permissions"),0);
}
$toDelete->delete();
} catch(ValidationException $e) {
$form->sessionMessage($e->getResult()->message(), 'bad');
return Director::redirectBack();
}
$message = sprintf(
_t('ComplexTableField.SUCCESSEDIT2', 'Deleted %s %s'),
$this->record->singular_name(),
'<a href="' . $this->Link('edit') . '">"' . htmlspecialchars($this->record->Title, ENT_QUOTES) . '"</a>'
);
$form->sessionMessage($message, 'good');
//when an item is deleted, redirect to the revelant admin section without the action parameter
$controller = Controller::curr();
$noActionURL = $controller->removeAction($data['url']);
return Director::redirect($noActionURL, 302); //redirect back to admin section
}
/**
* @param String
*/