function double_field_field_widget_form in Double Field 7.2
Same name and namespace in other branches
- 7 double_field.module \double_field_field_widget_form()
Implements hook_field_widget_form().
File
- ./
double_field.module, line 642 - Defines "Double field" field type.
Code
function double_field_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$settings = $instance['widget']['settings'];
$i18n_context_prefix = double_field_i18n_strings_prefix($instance) . ':widget-settings-';
$subfield_types = explode('_&_', $instance['widget']['type']);
$double_field = array(
'#theme_wrappers' => array(
'container',
'form_element',
),
'#attributes' => array(
'class' => array(
'double-field-elements',
),
),
);
foreach (array(
'first',
'second',
) as $key => $subfield) {
$prefix = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-general-prefix', $settings[$subfield]['general']['prefix']);
$suffix = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-general-suffix', $settings[$subfield]['general']['suffix']);
$double_field[$subfield] = array(
'#type' => $subfield_types[$key],
'#prefix' => $prefix,
'#suffix' => $suffix,
'#default_value' => isset($items[$delta][$subfield]) ? $items[$delta][$subfield] : NULL,
'#title' => $instance['label'],
'#title_display' => 'invisible',
'#subfield_settings' => $field['settings'][$subfield],
);
$field_type = $field['settings'][$subfield]['type'];
// Avoid PDOException: String data, right truncated.
if ($field_type == 'varchar') {
$double_field[$subfield]['#maxlength'] = $field['settings'][$subfield]['maxlength'];
}
elseif ($field_type == 'int' || $field_type == 'float' || $field_type == 'decimal') {
$double_field[$subfield]['#element_validate'][] = 'double_field_validate_number';
}
switch ($subfield_types[$key]) {
case 'textfield':
$double_field[$subfield]['#size'] = $settings[$subfield]['textfield']['size'];
if ($settings[$subfield]['textfield']['placeholder']) {
$double_field[$subfield]['#attributes']['placeholder'] = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-textfield-placeholder', $settings[$subfield]['textfield']['placeholder']);
}
break;
case 'checkbox':
$double_field[$subfield]['#element_validate'][] = 'double_field_checkbox_to_storage';
$double_field[$subfield]['#on_value'] = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-checkbox-on_value', $settings[$subfield]['checkbox']['on_value']);
$double_field[$subfield]['#off_value'] = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-checkbox-off_value', $settings[$subfield]['checkbox']['off_value']);
$double_field[$subfield]['#off_value'] = $settings[$subfield]['checkbox']['off_value'];
$double_field[$subfield]['#default_value'] = $double_field[$subfield]['#default_value'] == $double_field[$subfield]['#on_value'];
break;
case 'select':
$allowed_values = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-select-allowed_values', $settings[$subfield]['select']['allowed_values']);
$label = $settings[$subfield]['general']['required'] ? t('- Select a value -') : t('- None -');
$double_field[$subfield]['#options'] = array(
'' => $label,
) + $allowed_values;
break;
case 'textarea':
$double_field[$subfield]['#cols'] = $settings[$subfield]['textarea']['cols'];
$double_field[$subfield]['#rows'] = $settings[$subfield]['textarea']['rows'];
$double_field[$subfield]['#resizable'] = $settings[$subfield]['textarea']['resizable'];
if ($settings[$subfield]['textarea']['placeholder']) {
$double_field[$subfield]['#attributes']['placeholder'] = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-textarea-placeholder', $settings[$subfield]['textarea']['placeholder']);
}
break;
}
}
if ($settings['inline']) {
$double_field['#attributes']['class'][] = 'container-inline';
}
return $element + $double_field;
}