diff --git a/lib/form/button.php b/lib/form/button.php index 1ce5c34809d..fdbb4ffe1ea 100644 --- a/lib/form/button.php +++ b/lib/form/button.php @@ -41,7 +41,9 @@ require_once('templatable_form_element.php'); */ class MoodleQuickForm_button extends HTML_QuickForm_button implements templatable { - use templatable_form_element; + use templatable_form_element { + export_for_template as export_for_template_base; + } /** @var string html for help button, if empty then no help */ var $_helpbutton=''; @@ -49,6 +51,17 @@ class MoodleQuickForm_button extends HTML_QuickForm_button implements templatabl /** @var bool if true label will be hidden. */ protected $_hiddenLabel = false; + /** + * Any class apart from 'btn' would be overridden with this content. + * + * By default, buttons will utilize the btn-secondary class. However, there are cases where we + * require a button with different stylings (e.g. btn-primary). In these cases, $customclassoverride will override + * the defaults mentioned previously and utilize the provided class(es). + * + * @var null|string $customclassoverride Custom class override for the input element + */ + protected $customclassoverride; + /** * constructor * @@ -56,9 +69,14 @@ class MoodleQuickForm_button extends HTML_QuickForm_button implements templatabl * @param string $value (optional) value for the button * @param mixed $attributes (optional) Either a typical HTML attribute string * or an associative array + * @param array $options Options to further customise the button. Currently accepted options are: + * customclassoverride String The CSS class to use for the button instead of the standard + * btn-primary and btn-secondary classes. */ - public function __construct($elementName=null, $value=null, $attributes=null) { + public function __construct($elementName=null, $value=null, $attributes=null, $options = []) { parent::__construct($elementName, $value, $attributes); + + $this->customclassoverride = $options['customclassoverride'] ?? null; } /** @@ -101,4 +119,13 @@ class MoodleQuickForm_button extends HTML_QuickForm_button implements templatabl public function setHiddenLabel($hiddenLabel) { $this->_hiddenLabel = $hiddenLabel; } + + public function export_for_template(renderer_base $output) { + $context = $this->export_for_template_base($output); + + if ($this->customclassoverride) { + $context['customclassoverride'] = $this->customclassoverride; + } + return $context; + } } diff --git a/lib/form/templates/element-button-inline.mustache b/lib/form/templates/element-button-inline.mustache index 3806649ae43..af194983cc0 100644 --- a/lib/form/templates/element-button-inline.mustache +++ b/lib/form/templates/element-button-inline.mustache @@ -2,7 +2,9 @@ {{$element}} {{^element.frozen}}