You are here

function entityreference_filter_views_data_alter in Views Reference Filter 7

Same name and namespace in other branches
  1. 8 entityreference_filter.views.inc \entityreference_filter_views_data_alter()

Implements hook_views_data_alter().

File

./entityreference_filter.views.inc, line 11
Views Reference Filter views integration.

Code

function entityreference_filter_views_data_alter(&$data) {
  foreach ($data as $table_name => $table_info) {
    foreach ($table_info as $field_name => $field_info) {

      // Apply to entity reference and term reference fields,
      // and node, term and user identifier fields only.
      $base_table = NULL;
      if ($field_name === 'nid') {
        $base_table = 'node';
      }
      elseif ($field_name === 'uid') {
        $base_table = 'users';
      }
      elseif ($field_name === 'tid') {
        $base_table = 'taxonomy_term_data';
      }
      elseif ($field_name === 'product_id') {
        $base_table = 'commerce_product';
      }
      elseif (substr($field_name, -4) === '_tid') {
        if (isset($field_info['filter']['field_name'])) {
          $field = field_info_field($field_info['filter']['field_name']);
          if (!empty($field['type']) && $field['type'] === 'taxonomy_term_reference') {
            $base_table = 'taxonomy_term_data';
          }
        }
      }
      elseif (substr($field_name, -10) === '_target_id') {
        if (isset($field_info['filter']['field_name'])) {
          $field = field_info_field($field_info['filter']['field_name']);
          if (!empty($field['settings']['target_type'])) {
            $entity_info = entity_get_info($field['settings']['target_type']);
            if (!empty($entity_info['base table'])) {
              $base_table = $entity_info['base table'];
            }
          }
        }
      }
      if (empty($base_table)) {
        continue;
      }
      if (!empty($field_info['filter']['handler']) && $field_info['filter']['handler'] != 'entityreference_filter_view_result') {
        $filter = $field_info;
        $filter['title'] = (!empty($field_info['filter']['title']) ? $field_info['filter']['title'] : $field_info['title']) . ' (reference filter)';
        $filter['filter']['handler'] = 'entityreference_filter_view_result';
        $filter['filter']['proxy'] = $field_info['filter']['handler'];
        $filter['filter']['field'] = $field_name;
        $filter['filter']['filter_base_table'] = $base_table;

        // Organic Groups module uses non-standard fields.
        if (isset($filter['filter']['table']) && $filter['filter']['table'] === 'og_membership') {
          $filter['filter']['field'] = $field_info['filter']['field'];
        }
        unset($filter['argument'], $filter['field'], $filter['relationship'], $filter['sort'], $filter['filter']['title'], $filter['aliases']);
        $data[$table_name][$field_name . '_entityreference_filter'] = $filter;
      }
    }
  }
}