summaryrefslogtreecommitdiff
path: root/modules/field/modules/options/options.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field/modules/options/options.module')
-rw-r--r--modules/field/modules/options/options.module21
1 files changed, 16 insertions, 5 deletions
diff --git a/modules/field/modules/options/options.module b/modules/field/modules/options/options.module
index d4d05eca2..3862ba778 100644
--- a/modules/field/modules/options/options.module
+++ b/modules/field/modules/options/options.module
@@ -79,8 +79,11 @@ function options_field_widget_form(&$form, &$form_state, $field, $instance, $lan
$has_value = isset($items[0][$value_key]);
$properties = _options_properties($type, $multiple, $required, $has_value);
+ $entity_type = $element['#entity_type'];
+ $entity = $element['#entity'];
+
// Prepare the list of options.
- $options = _options_get_options($field, $instance, $properties);
+ $options = _options_get_options($field, $instance, $properties, $entity_type, $entity);
// Put current field values in shape.
$default_value = _options_storage_to_form($items, $options, $value_key, $properties);
@@ -102,10 +105,18 @@ function options_field_widget_form(&$form, &$form_state, $field, $instance, $lan
reset($options);
$default_value = array(key($options));
}
+
+ // If this is a single-value field, take the first default value, or
+ // default to NULL so that the form element is properly recognized as
+ // not having a default value.
+ if (!$multiple) {
+ $default_value = $default_value ? reset($default_value) : NULL;
+ }
+
$element += array(
'#type' => $multiple ? 'checkboxes' : 'radios',
// Radio buttons need a scalar value.
- '#default_value' => $multiple ? $default_value : reset($default_value),
+ '#default_value' => $default_value,
'#options' => $options,
);
break;
@@ -200,7 +211,7 @@ function _options_properties($type, $multiple, $required, $has_value) {
if (!$required) {
$properties['empty_option'] = 'option_none';
}
- else if (!$has_value) {
+ elseif (!$has_value) {
$properties['empty_option'] = 'option_select';
}
}
@@ -229,9 +240,9 @@ function _options_properties($type, $multiple, $required, $has_value) {
/**
* Collects the options for a field.
*/
-function _options_get_options($field, $instance, $properties) {
+function _options_get_options($field, $instance, $properties, $entity_type, $entity) {
// Get the list of options.
- $options = (array) module_invoke($field['module'], 'options_list', $field, $instance);
+ $options = (array) module_invoke($field['module'], 'options_list', $field, $instance, $entity_type, $entity);
// Sanitize the options.
_options_prepare_options($options, $properties);