You are here

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
  1. 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);
  }
}