diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php
index 89308f965..029915f05 100644
--- a/e107_handlers/form_handler.php
+++ b/e107_handlers/form_handler.php
@@ -2527,15 +2527,15 @@ class e_form
return $text;
}
-
-
-
-
-
-
-
+
+
+
+
+
+
+
/**
- * Admin Button - for front-end, use button();
+ * Admin Button - for front-end, use button();
* @param string $name
* @param string $value
* @param string $action [optional] default is submit
@@ -2546,8 +2546,10 @@ class e_form
function admin_button($name, $value, $action = 'submit', $label = '', $options = array())
{
$btype = 'submit';
- if(strpos($action, 'action') === 0) $btype = 'button';
-
+ if(strpos($action, 'action') === 0)
+ {
+ $btype = 'button';
+ }
if(isset($options['loading']) && ($options['loading'] == false))
{
@@ -2560,72 +2562,145 @@ class e_form
}
$options = $this->format_options('admin_button', $name, $options);
-
+
$options['class'] = vartrue($options['class']);
- $options['class'] .= ' btn '.$action.' ';//shorthand
- if(empty($label)) $label = $value;
-
+ $options['class'] .= ' btn ' . $action;
+
+ if(empty($label))
+ {
+ $label = $value;
+ }
+
+ // Ability to use any kind of button class for the selected action.
+ if (!$this->defaultButtonClassExists($options['class']))
+ {
+ $options['class'] .= ' ' . $this->getDefaultButtonClassByAction($action);
+ }
+
switch ($action)
+ {
+ case 'checkall':
+ $options['class'] .= ' btn-mini btn-xs';
+ break;
+
+ case 'delete':
+ case 'danger':
+ $options['other'] = 'data-confirm="'.LAN_JSCONFIRM.'"';
+ break;
+
+ case 'batch':
+ case 'batch e-hide-if-js':
+ // FIXME hide-js shouldn't be here.
+ break;
+
+ case 'filter':
+ case 'filter e-hide-if-js':
+ // FIXME hide-js shouldn't be here.
+ break;
+ }
+
+ return "";
+ }
+
+ /**
+ * Helper function to check if a (CSS) class already contains a button class?
+ *
+ * @param string $class
+ * The class we want to check.
+ *
+ * @return bool
+ * True if $class already contains a button class. Otherwise false.
+ */
+ function defaultButtonClassExists($class = '')
+ {
+ // Bootstrap button classes.
+ // @see http://getbootstrap.com/css/#buttons-options
+ $btnClasses = array(
+ 'btn-default',
+ 'btn-primary',
+ 'btn-success',
+ 'btn-info',
+ 'btn-warning',
+ 'btn-danger',
+ 'btn-link',
+ );
+
+ foreach($btnClasses as $btnClass) {
+ if(strpos($class, $btnClass, 0) !== false)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Helper function to get default button class by action.
+ *
+ * @param string $action
+ * Action for a button. See button().
+ *
+ * @return string $class
+ * Default button class.
+ */
+ function getDefaultButtonClassByAction($action)
+ {
+ switch($action)
{
case 'update':
case 'create':
case 'import':
case 'submit':
case 'success':
- $options['class'] .= 'btn-success';
- break;
-
+ $class = 'btn-success';
+ break;
+
case 'checkall':
- $options['class'] .= 'btn-default btn-mini btn-xs';
- break;
-
+ $class = 'btn-default';
+ break;
+
case 'cancel':
- $options['class'] .= 'btn-default';
- // use this for neutral colors.
- break;
+ $class = 'btn-default';
+ break;
case 'delete':
case 'danger':
- $options['class'] .= 'btn-danger';
- $options['other'] = 'data-confirm="'.LAN_JSCONFIRM.'"';
- break;
+ $class = 'btn-danger';
+ break;
case 'execute':
- $options['class'] .= 'btn-success';
- break;
-
+ $class = 'btn-success';
+ break;
+
case 'other':
- case 'login':
+ case 'login':
case 'primary':
- $options['class'] .= 'btn-primary';
- break;
-
+ $class = 'btn-primary';
+ break;
+
case 'warning':
- case 'confirm':
- $options['class'] .= 'btn-warning';
- break;
-
+ case 'confirm':
+ $class = 'btn-warning';
+ break;
+
case 'batch':
- case 'batch e-hide-if-js': // FIXME hide-js shouldn't be here.
- $options['class'] .= 'btn-primary';
- break;
-
+ case 'batch e-hide-if-js':
+ $class = 'btn-primary';
+ break;
+
case 'filter':
- case 'filter e-hide-if-js': // FIXME hide-js shouldn't be here.
- $options['class'] .= 'btn-primary';
- break;
+ case 'filter e-hide-if-js':
+ $class = 'btn-primary';
+ break;
case 'default':
default:
- $options['class'] .= 'btn-default';
- break;
- }
+ $class = 'btn-default';
+ break;
+ }
-
-
- return "
-
- ";
+ return $class;
}
function getNext()