diff options
Diffstat (limited to 'modules/field/modules/options/options.module')
-rw-r--r-- | modules/field/modules/options/options.module | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/modules/field/modules/options/options.module b/modules/field/modules/options/options.module index 743d92454..9fc8b9223 100644 --- a/modules/field/modules/options/options.module +++ b/modules/field/modules/options/options.module @@ -131,13 +131,20 @@ function options_buttons_elements_process($element, &$form_state, $form) { $options = options_options($field, $instance); $multiple = isset($element['#multiple']) ? $element['#multiple'] : $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED; - $value = array(); - foreach ($element['#value'][$field_key] as $key) { - // Multiple (checkboxes) need the default value in the form of an array. + // Incoming #value is an array (checkboxes) or integer (radios). + $keys = $element['#value'][$field_key]; + if (!is_array($keys)) { + $keys = array($keys); + } + + // Multiple (checkboxes) need #default_value to be an array, and + // non-multiple (radios) need a single default value. If #value is + // empty we loop won't run, so initialize $value to the right type. + $value = $multiple ? array() : ''; + foreach ($keys as $key) { if ($multiple) { - $value[$key] = 1; + $value[] = $key; } - // Non-multiple (radios) need single default value. else { $value = $key; break; |