function fel_fields_field_attach_form in Form element layout 7
Implements hook_field_attach_form().
Convert field setting for description position to Form API attribute '#description_display' and insert it in the form element tree where the configured field description resides.
File
- modules/
fel_fields/ fel_fields.module, line 106 - Field support for Form element layout (fel.module).
Code
function fel_fields_field_attach_form($entity_type, $entity, &$form, &$form_state, $langcode) {
ctools_include('plugins');
list(, , $bundle) = entity_extract_ids($entity_type, $entity);
$instances = field_info_instances($entity_type, $bundle);
$field_langcodes = field_language($entity_type, $entity, NULL, $langcode);
foreach ($instances as $instance) {
$field_name = $instance['field_name'];
$field_lang = empty($field_langcodes[$field_name]) ? LANGUAGE_NONE : $field_langcodes[$field_name];
if (empty($form[$field_name][$field_lang])) {
continue;
}
$field = field_info_field($field_name);
$default_behavior = field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_DEFAULT;
$multiple = ($field['cardinality'] > 1 or $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED);
$field_form =& $form[$field_name][$field_lang];
// We're unconditionally taking over the theme for rendering fields with
// default behavior, for all fields, all over.
if ($default_behavior) {
$field_form['#theme'] = 'fel_fields_multiple_form';
}
// Add attributes to the root item. For default behavior with single
// values, also add it to $delta = 0. This covers a lot of ground.
_fel_fields_add_attributes($field_form, $instance);
if ($default_behavior and !$multiple) {
_fel_fields_add_attributes($field_form[0], $instance);
}
// The plugin system should run independent of whether descriptions exists
// or not. Some plugins use this to replace themes down the form tree.
$plugin = ctools_get_plugins('fel_fields', 'description_display', $instance['widget']['module']);
if ($plugin) {
$columns = array();
if (!empty($plugin['callback'])) {
$ret = $plugin['callback']($field, $instance, $field_form);
$columns = is_array($ret) ? $ret : array();
}
elseif (!empty($plugin['columns'])) {
$columns = $plugin['columns'];
}
}
if ($default_behavior) {
if ($multiple) {
// This is handled in theme_fel_fields_multiple_form().
continue;
}
// Adapt to field.module's default behavior.
$field_form =& $field_form[0];
}
if ($plugin) {
foreach ($columns as $column) {
_fel_fields_add_attributes($field_form[$column], $instance);
}
}
else {
// Last resort. Do a recursive search for #description and add
// complementary #description_display if found.
fel_fields_assign_layout_deep($field_form, $instance);
}
}
}