/**
  * Takes the action at /customaction/my-action-name and feeds it to the DataObject.
  * Checks to see if the method is allowed to be invoked first.
  *
  * @param  SS_HTTPRequest $r
  * @return SS_HTTPResponse
  */
 public function handleCustomAction(SS_HTTPRequest $r)
 {
     $action = $r->param('Action');
     if (!$this->record->isCustomActionAllowed($action)) {
         return $this->httpError(403);
     }
     $formAction = $this->record->findActionByName($action);
     if (!$formAction) {
         return $this->httpError(403, "Action {$action} doesn't exist");
     }
     $message = $this->record->{$action}($formAction, $this->controller, $r);
     Controller::curr()->getResponse()->addHeader("X-Pjax", "Content");
     Controller::curr()->getResponse()->addHeader('X-Status', $message);
     if ($formAction->getRedirectURL()) {
         return Controller::curr()->redirect($formAction->getRedirectURL());
     }
     if ($formAction->getRedirectType() == BetterButtonCustomAction::GOBACK) {
         return Controller::curr()->redirect(preg_replace('/\\?.*/', '', $this->parent->getBackLink()));
     }
     return Controller::curr()->redirect($this->controller->getEditLink($this->record->ID));
 }