mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
5c9044a007
API Introduce HTMLFragment as casting helper for HTMLText with shortcodes disabled API Introduce DBField::CDATA for XML file value encoding API RSSFeed now casts from the underlying model rather than by override API Introduce CustomMethods::getExtraMethodConfig() to allow metadata to be queried BUG Remove _call hack from VirtualPage API Remove FormField::$dontEscape API Introduce HTMLReadonlyField for non-editable readonly HTML API FormField::Field() now returns string in many cases rather than DBField instance. API Remove redundant *_val methods from ViewableData API ViewableData::obj() no longer has a $forceReturnObject parameter as it always returns an object BUG Fix issue with ViewableData caching incorrect field values after being modified. API Remove deprecated DB class methods API Enforce plain text left/right formfield titles
206 lines
4.3 KiB
PHP
206 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* The action buttons are <input type="submit"> as well as <button> tags.
|
|
*
|
|
* Upon clicking the button below will redirect the user to doAction under the current controller.
|
|
*
|
|
* <code>
|
|
* new FormAction (
|
|
* // doAction has to be a defined controller member
|
|
* $action = "doAction",
|
|
* $title = "Submit button"
|
|
* )
|
|
* </code>
|
|
*
|
|
* @package forms
|
|
* @subpackage actions
|
|
*/
|
|
class FormAction extends FormField {
|
|
|
|
/**
|
|
* @config
|
|
* @var array
|
|
*/
|
|
private static $casting = [
|
|
'ButtonContent' => 'HTMLFragment',
|
|
];
|
|
|
|
/**
|
|
* Action name, normally prefixed with 'action_'
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $action;
|
|
|
|
/**
|
|
* Enables the use of <button> instead of <input>
|
|
* in {@link Field()} - for more customizeable styling.
|
|
*
|
|
* @var boolean
|
|
*/
|
|
public $useButtonTag = false;
|
|
|
|
/**
|
|
* Literal button content, used when useButtonTag is true.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $buttonContent = null;
|
|
|
|
/**
|
|
* Should validation be skipped when performing this action?
|
|
*
|
|
* @var bool
|
|
*/
|
|
protected $validationExempt = false;
|
|
|
|
/**
|
|
* Create a new action button.
|
|
*
|
|
* @param string $action The method to call when the button is clicked
|
|
* @param string $title The label on the button. This should be plain text, not escaped as HTML.
|
|
* @param Form form The parent form, auto-set when the field is placed inside a form
|
|
*/
|
|
public function __construct($action, $title = "", $form = null) {
|
|
$this->action = "action_$action";
|
|
$this->setForm($form);
|
|
|
|
parent::__construct($this->action, $title);
|
|
}
|
|
|
|
/**
|
|
* Get the action name
|
|
*
|
|
* @return string
|
|
*/
|
|
public function actionName() {
|
|
return substr($this->name, 7);
|
|
}
|
|
|
|
/**
|
|
* Set the full action name, including action_
|
|
* This provides an opportunity to replace it with something else
|
|
*
|
|
* @param string $fullAction
|
|
* @return $this
|
|
*/
|
|
public function setFullAction($fullAction) {
|
|
$this->action = $fullAction;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @param array $properties
|
|
* @return string
|
|
*/
|
|
public function Field($properties = array()) {
|
|
$properties = array_merge(
|
|
$properties,
|
|
array(
|
|
'Name' => $this->action,
|
|
'Title' => ($this->description && !$this->useButtonTag) ? $this->description : $this->Title(),
|
|
'UseButtonTag' => $this->useButtonTag
|
|
)
|
|
);
|
|
|
|
return parent::Field($properties);
|
|
}
|
|
|
|
/**
|
|
* @param array $properties
|
|
* @return string
|
|
*/
|
|
public function FieldHolder($properties = array()) {
|
|
return $this->Field($properties);
|
|
}
|
|
|
|
public function Type() {
|
|
return 'action';
|
|
}
|
|
|
|
public function getAttributes() {
|
|
$type = (isset($this->attributes['src'])) ? 'image' : 'submit';
|
|
|
|
return array_merge(
|
|
parent::getAttributes(),
|
|
array(
|
|
'disabled' => ($this->isReadonly() || $this->isDisabled()),
|
|
'value' => $this->Title(),
|
|
'type' => $type,
|
|
'title' => ($this->useButtonTag) ? $this->description : null,
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Add content inside a button field. This should be pre-escaped raw HTML and should be used sparingly.
|
|
*
|
|
* @param string $content
|
|
* @return $this
|
|
*/
|
|
public function setButtonContent($content) {
|
|
$this->buttonContent = (string) $content;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Gets the content inside the button field. This is raw HTML, and should be used sparingly.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getButtonContent() {
|
|
return $this->buttonContent;
|
|
}
|
|
|
|
/**
|
|
* Enable or disable the rendering of this action as a <button />
|
|
*
|
|
* @param boolean
|
|
* @return $this
|
|
*/
|
|
public function setUseButtonTag($bool) {
|
|
$this->useButtonTag = $bool;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Determine if this action is rendered as a <button />
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function getUseButtonTag() {
|
|
return $this->useButtonTag;
|
|
}
|
|
|
|
/**
|
|
* Set whether this action can be performed without validating the data
|
|
*
|
|
* @param bool $exempt
|
|
* @return $this
|
|
*/
|
|
public function setValidationExempt($exempt = true) {
|
|
$this->validationExempt = $exempt;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get whether this action can be performed without vaidating the data
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function getValidationExempt() {
|
|
return $this->validationExempt;
|
|
}
|
|
|
|
/**
|
|
* Does not transform to readonly by purpose.
|
|
* Globally disabled buttons would break the CMS.
|
|
*/
|
|
public function performReadonlyTransformation() {
|
|
$clone = clone $this;
|
|
$clone->setReadonly(true);
|
|
return $clone;
|
|
}
|
|
|
|
}
|