aboutsummaryrefslogtreecommitdiff
path: root/views/default/input/checkboxes.php
diff options
context:
space:
mode:
Diffstat (limited to 'views/default/input/checkboxes.php')
-rw-r--r--views/default/input/checkboxes.php109
1 files changed, 77 insertions, 32 deletions
diff --git a/views/default/input/checkboxes.php b/views/default/input/checkboxes.php
index fa7c0c34c..088a97709 100644
--- a/views/default/input/checkboxes.php
+++ b/views/default/input/checkboxes.php
@@ -2,52 +2,97 @@
/**
* Elgg checkbox input
* Displays a checkbox input field
+ * NB: This also includes a hidden input with the same name as the checkboxes
+ * to make sure something is sent to the server. The default value is 0.
+ * If using JS, be specific to avoid selecting the hidden default value:
+ * $('input[type=checkbox][name=internalname])
*
* @package Elgg
* @subpackage Core
* @author Curverider Ltd
* @link http://elgg.org/
*
- * @uses $vars['value'] The current value, if any
- * @uses $vars['js'] Any Javascript to enter into the input tag
- * @uses $vars['internalname'] The name of the input field
- * @uses $vars['options'] An array of strings representing the label => options for the checkbox field
+ * @uses string $vars['internalname'] The name of the input fields (Forced to an array by appending [])
+ * @uses array $vars['options'] An array of strings representing the label => option for the each checkbox field
+ * @uses string $vars['internalid'] The id for each input field. Optional (Only use this with a single value.)
+ * @uses string $vars['default'] The default value to send if nothing is checked. Optional, defaults to 0.
+ * @uses bool $vars['disabled'] Make all input elements disabled. Optional.
+ * @uses string $vars['value'] The current value. Optional.
+ * @uses string $vars['class'] The class of each input element. Optional.
+ * @uses string $vars['js'] Any Javascript to enter into the input tag. Optional.
*
*/
-$class = $vars['class'];
-if (!$class) {
- $class = "input_checkboxes";
+if (!isset($vars['value']) || $vars['value'] === FALSE) {
+ $vars['value'] = elgg_get_sticky_value($vars['internalname']);
}
-if (!isset($vars['value']) || $vars['value'] === FALSE) {
- $vars['value'] = elgg_get_sticky_value($vars['internalname']);
-}
+$class = (isset($vars['class'])) ? $vars['class'] : 'input_checkboxes';
+$value = (isset($vars['value'])) ? $vars['value'] : NULL;
+$value_array = (is_array($value)) ? array_map('strtolower', $value) : array(strtolower($value));
+$internalname = (isset($vars['internalname'])) ? $vars['internalname'] : '';
+$options = (isset($vars['options']) && is_array($vars['options'])) ? $vars['options'] : array();
+$default = (isset($vars['default'])) ? $vars['default'] : 0;
-foreach($vars['options'] as $label => $option) {
- //if (!in_array($option,$vars['value'])) {
- if (is_array($vars['value'])) {
- $valarray = $vars['value'];
- $valarray = array_map('strtolower', $valarray);
- if (!in_array(strtolower($option),$valarray)) {
- $selected = "";
- } else {
- $selected = "checked = \"checked\"";
+$id = (isset($vars['internalid'])) ? $vars['internalid'] : '';
+$disabled = (isset($vars['disabled'])) ? $vars['disabled'] : FALSE;
+$js = (isset($vars['js'])) ? $vars['js'] : '';
+
+if ($options) {
+ // include a default value so if nothing is checked 0 will be passed.
+ if ($internalname) {
+ echo "<input type=\"hidden\" name=\"$internalname\" value=\"$default\">";
+ }
+
+ foreach($options as $label => $option) {
+ // @hack - This sorta checks if options is not an assoc array and then
+ // ignores the label (because it's just the index) and sets the value ($option)
+ // as the label.
+ // Wow.
+ $labelint = (int) $label;
+
+ if ("{$label}" == "{$labelint}") {
+ $label = $option;
}
- } else {
- if (strtolower($option) != strtolower($vars['value'])) {
- $selected = "";
+
+ if (!in_array(strtolower($option), $value_array)) {
+ $selected = FALSE;
} else {
- $selected = "checked = \"checked\"";
+ $selected = TRUE;
+ }
+
+ $attr = array(
+ 'type="checkbox"',
+ 'value="' . htmlentities($option, ENT_QUOTES, 'UTF-8') . '"'
+ );
+
+ if ($id) {
+ $attr[] = "id=\"$id\"";
}
- }
- $labelint = (int) $label;
- if ("{$label}" == "{$labelint}") {
- $label = $option;
- }
- if (isset($vars['internalid'])) $id = "id=\"{$vars['internalid']}\"";
- $disabled = "";
- if ($vars['disabled']) $disabled = ' disabled="yes" ';
- echo "<label><input type=\"checkbox\" $id $disabled {$vars['js']} name=\"{$vars['internalname']}[]\" value=\"".htmlentities($option, ENT_QUOTES, 'UTF-8')."\" {$selected} class=\"$class\" />{$label}</label><br />";
+ if ($class) {
+ $attr[] = "class=\"$class\"";
+ }
+
+ if ($disabled) {
+ $attr[] = 'disabled="yes"';
+ }
+
+ if ($selected) {
+ $attr[] = 'checked = "checked"';
+ }
+
+ if ($js) {
+ $attr[] = $js;
+ }
+
+ if ($internalname) {
+ // @todo this really, really should only add the []s if there are > 1 element in options.
+ $attr[] = "name=\"{$internalname}[]\"";
+ }
+
+ $attr_str = implode(' ', $attr);
+
+ echo "<label><input $attr_str />$label</label><br />";
+ }
} \ No newline at end of file