/**
  * This is the action that gets executed when a GridField_AlterAction gets clicked.
  *
  * @param array $data
  * @param Form $form
  * @param HTTPRequest $request
  *
  * @return string
  */
 public function gridFieldAlterAction($data, $form, HTTPRequest $request)
 {
     $data = $request->requestVars();
     // Protection against CSRF attacks
     $token = $this->getForm()->getSecurityToken();
     if (!$token->checkRequest($request)) {
         $this->httpError(400, _t("Form.CSRF_FAILED_MESSAGE", "There seems to have been a technical problem. Please click the back button, " . "refresh your browser, and try again."));
     }
     $name = $this->getName();
     $fieldData = null;
     if (isset($data[$name])) {
         $fieldData = $data[$name];
     }
     $state = $this->getState(false);
     /** @skipUpgrade */
     if (isset($fieldData['GridState'])) {
         $state->setValue($fieldData['GridState']);
     }
     foreach ($data as $dataKey => $dataValue) {
         if (preg_match('/^action_gridFieldAlterAction\\?StateID=(.*)/', $dataKey, $matches)) {
             $stateChange = Session::get($matches[1]);
             $actionName = $stateChange['actionName'];
             $arguments = array();
             if (isset($stateChange['args'])) {
                 $arguments = $stateChange['args'];
             }
             $html = $this->handleAlterAction($actionName, $arguments, $data);
             if ($html) {
                 return $html;
             }
         }
     }
     if ($request->getHeader('X-Pjax') === 'CurrentField') {
         return $this->FieldHolder();
     }
     return $form->forTemplate();
 }
 /**
  * Generate a response object for a form validation error
  *
  * @param Form $form The source form
  * @param ValidationException $e The validation error message
  * @return HTTPResponse
  * @throws HTTPResponse_Exception
  */
 protected function generateValidationResponse($form, $e)
 {
     $controller = $this->getToplevelController();
     $form->sessionMessage($e->getResult()->message(), 'bad', false);
     $responseNegotiator = new PjaxResponseNegotiator(array('CurrentForm' => function () use(&$form) {
         return $form->forTemplate();
     }, 'default' => function () use(&$controller) {
         return $controller->redirectBack();
     }));
     if ($controller->getRequest()->isAjax()) {
         $controller->getRequest()->addHeader('X-Pjax', 'CurrentForm');
     }
     return $responseNegotiator->respond($controller->getRequest());
 }