function ief_table_view_mode_inline_entity_form_table_fields_alter in Inline Entity Form Table View Mode 7
Same name and namespace in other branches
- 8 ief_table_view_mode.module \ief_table_view_mode_inline_entity_form_table_fields_alter()
Implements hook_inline_entity_form_table_fields_alter().
File
- ./
ief_table_view_mode.module, line 16 - Defines a view mode to set up the columns of the table for the IEF widget.
Code
function ief_table_view_mode_inline_entity_form_table_fields_alter(&$fields, $context) {
$entity_type = $context['entity_type'];
$original_fields = $fields;
$old_fields = array();
$change_apply = FALSE;
// Get the instance of the field.
$instance = field_info_instance($context['parent_entity_type'], $context['field_name'], $context['parent_bundle']);
$allowed_bundles = isset($instance['widget']['settings']['type_settings']['ief_table_view_mode']['bundles']) ? $instance['widget']['settings']['type_settings']['ief_table_view_mode']['bundles'] : array();
$filter_bundle = FALSE;
if (!empty($allowed_bundles)) {
$allowed_bundles_count_values = array_count_values($allowed_bundles);
if (count($allowed_bundles_count_values) != 1) {
$filter_bundle = TRUE;
}
}
foreach ($context['allowed_bundles'] as $bundle) {
if ($filter_bundle && isset($allowed_bundles[$bundle]) && !$allowed_bundles[$bundle]) {
continue;
}
$view_mode = field_view_mode_settings($entity_type, $bundle);
if (isset($view_mode[IEF_TABLE_VIEW_MODE_NAME]) && $view_mode[IEF_TABLE_VIEW_MODE_NAME]['custom_settings']) {
$change_apply = TRUE;
$old_fields = $fields;
$fields = array();
// Checking fields instances.
$fields_instance = field_info_instances($entity_type, $bundle);
$fields_hidden = array();
foreach ($fields_instance as $field_name => $field_instance) {
if ($field_instance['display'][IEF_TABLE_VIEW_MODE_NAME]['type'] == 'hidden') {
$fields_hidden[$field_name] = $field_name;
continue;
}
$field_label = module_exists('i18n_field') ? i18n_field_translate_property($field_instance, 'label') : $field_instance['label'];
$fields[$field_name] = array(
'type' => 'field',
'label' => $field_label,
'formatter' => $field_instance['display'][IEF_TABLE_VIEW_MODE_NAME]['type'],
'settings' => $field_instance['display'][IEF_TABLE_VIEW_MODE_NAME]['settings'],
'weight' => $field_instance['display'][IEF_TABLE_VIEW_MODE_NAME]['weight'],
);
}
$settings = field_bundle_settings($entity_type, $bundle);
// Default settings maybe has not registered any extra field.
foreach ($old_fields as $old_field_name => $old_field) {
// If this field is a property and this not exists in the settings.
if ($old_field['type'] == 'property' && !isset($settings['extra_fields']['display'][$old_field_name])) {
$settings['extra_fields']['display'][$old_field_name][IEF_TABLE_VIEW_MODE_NAME] = array(
'weight' => $old_field['weight'],
'visible' => TRUE,
);
}
// An old field is added if it is not added in $fields variable.
if ($old_field['type'] == 'field' && !isset($fields_hidden[$old_field_name]) && !isset($fields[$old_field_name])) {
$fields[$old_field_name] = $old_field;
}
}
$old_fields = array();
// Properties are added as configured from the UI.
foreach ($settings['extra_fields']['display'] as $name => $extra_field) {
if (isset($extra_field[IEF_TABLE_VIEW_MODE_NAME]['visible']) && !$extra_field[IEF_TABLE_VIEW_MODE_NAME]['visible'] || !isset($original_fields[$name])) {
continue;
}
$fields[$name] = array(
'type' => 'property',
'label' => $original_fields[$name]['label'],
'weight' => $extra_field[IEF_TABLE_VIEW_MODE_NAME]['weight'],
);
}
}
}
if ($change_apply) {
drupal_alter('ief_table_view_mode_fields', $fields, $original_fields, $context);
}
}