mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
3bbfca820b
The specific example for this issue is InlineFormField - results in actionName() on non-object error. See #2527 for context. Include parentheses for coding conventions
89 lines
2.0 KiB
PHP
89 lines
2.0 KiB
PHP
<?php
|
|
/**
|
|
* Deals with special form handling in CMS, mainly around {@link PjaxResponseNegotiator}
|
|
*/
|
|
class CMSForm extends Form {
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $validationExemptActions = array();
|
|
|
|
/**
|
|
* Always return true if the current form action is exempt from validation
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function validate() {
|
|
$buttonClicked = $this->buttonClicked();
|
|
return (
|
|
($buttonClicked && in_array($buttonClicked->actionName(), $this->getValidationExemptActions()))
|
|
|| parent::validate()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Route validation error responses through response negotiator,
|
|
* so they return the correct markup as expected by the requesting client.
|
|
*/
|
|
protected function getValidationErrorResponse() {
|
|
$request = $this->getRequest();
|
|
$negotiator = $this->getResponseNegotiator();
|
|
|
|
if($request->isAjax() && $negotiator) {
|
|
$this->setupFormErrors();
|
|
$result = $this->forTemplate();
|
|
|
|
return $negotiator->respond($request, array(
|
|
'CurrentForm' => function() use($result) {
|
|
return $result;
|
|
}
|
|
));
|
|
} else {
|
|
return parent::getValidationErrorResponse();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set actions that are exempt from validation
|
|
*
|
|
* @param array
|
|
*/
|
|
public function setValidationExemptActions($actions) {
|
|
$this->validationExemptActions = $actions;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get a list of actions that are exempt from validation
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getValidationExemptActions() {
|
|
return $this->validationExemptActions;
|
|
}
|
|
|
|
/**
|
|
* Sets the response negotiator
|
|
* @param ResponseNegotiator $negotiator The response negotiator to use
|
|
* @return Form The current form
|
|
*/
|
|
public function setResponseNegotiator($negotiator) {
|
|
$this->responseNegotiator = $negotiator;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Gets the current response negotiator
|
|
* @return ResponseNegotiator|null
|
|
*/
|
|
public function getResponseNegotiator() {
|
|
return $this->responseNegotiator;
|
|
}
|
|
|
|
public function FormName() {
|
|
if($this->htmlID) return $this->htmlID;
|
|
else return 'Form_' . str_replace(array('.', '/'), '', $this->name);
|
|
}
|
|
|
|
} |