You are here

function noderelationships_get_noderef_view_overrides in Node Relationships 6

Get overrides for search and reference views.

Parameters

$view:

$referrer_field:

See also

noderelationships_customize_noderef_view()

1 call to noderelationships_get_noderef_view_overrides()
noderelationships_customize_noderef_view in ./noderelationships.inc
Apply custom configuration to the given search and reference view.

File

./noderelationships.inc, line 1019
Common functions for the noderelationships module.

Code

function noderelationships_get_noderef_view_overrides($view, $referrer_field) {
  $view_overrides = array();

  // Customize view fields.
  $new_view_fields = array();
  $new_view_fields['noderelationships_nid'] = array(
    'id' => 'noderelationships_nid',
    'table' => 'node',
    'field' => 'nid',
    'label' => 'X-NodeRelationships-Nid',
    'relationship' => 'none',
  );
  $new_view_fields['noderelationships_title'] = array(
    'id' => 'noderelationships_title',
    'table' => 'node',
    'field' => 'title',
    'label' => 'X-NodeRelationships-Title',
    'relationship' => 'none',
  );
  $existing_view_fields = $view->display_handler
    ->get_option('fields');
  if (!empty($existing_view_fields)) {
    $new_view_fields = array_merge($new_view_fields, $existing_view_fields);
  }
  $view_overrides['fields'] = $new_view_fields;

  // Customize view filters.
  $referenceable_types = isset($referrer_field['referenceable_types']) ? array_filter($referrer_field['referenceable_types']) : array();
  if (!empty($referenceable_types)) {
    $new_view_filters = $view->display_handler
      ->get_option('filters');
    if (empty($new_view_filters)) {
      $new_view_filters = array();
    }

    // Make sure we have a filter by content type.
    if (isset($new_view_filters['type'])) {
      $new_view_filters['type']['value'] = $referenceable_types;

      // If the type filter is exposed, give it a unique identifier.
      if (isset($new_view_filters['type']['exposed'])) {
        $new_view_filters['type']['expose']['identifier'] = 'type_' . $referrer_field['field_name'];
      }

      // If this is the default noderef view AND it has not been overridden,
      // then we want to control if the filter is exposed or not depending
      // on number of referenceable types.
      if ($view->name == NODERELATIONSHIPS_NODEREF_VIEW_NAME && $view->type == t('Default')) {
        $new_view_filters['type']['exposed'] = count($referenceable_types) > 1 ? TRUE : FALSE;
      }
    }
    else {
      $new_view_filters['type'] = array(
        'id' => 'type',
        'table' => 'node',
        'field' => 'type',
        'operator' => 'in',
        'value' => $referenceable_types,
        'group' => '0',
        'exposed' => FALSE,
        'relationship' => 'none',
      );
      if (count($referenceable_types) > 1) {
        $new_view_filters['type']['exposed'] = TRUE;
        $new_view_filters['type']['expose'] = array(
          'use_operator' => 0,
          'operator' => 'type_op',
          'identifier' => 'type_' . $referrer_field['field_name'],
          'label' => 'Type',
          'optional' => 0,
          'single' => 0,
          'remember' => 1,
          'reduce' => 1,
        );
      }
    }
    $view_overrides['filters'] = $new_view_filters;
  }

  // Dynamic customization dependent on active style plugin.
  $style_plugin = $view->display_handler
    ->get_option('style_plugin');
  if ($style_plugin == 'table') {
    $style_options = $view->display_handler
      ->get_option('style_options');
    $new_style_columns = array(
      'noderelationships_nid' => 'noderelationships_nid',
      'noderelationships_title' => 'noderelationships_title',
    );
    if (!empty($style_options['columns'])) {
      $new_style_columns = array_merge($new_style_columns, $style_options['columns']);
    }
    $style_options['columns'] = $new_style_columns;
    $new_style_info = array(
      'noderelationships_nid' => array(
        'sortable' => 0,
        'separator' => ':',
      ),
      'noderelationships_title' => array(
        'sortable' => 0,
        'separator' => '',
      ),
    );
    if (!empty($style_options['info'])) {
      $new_style_info = array_merge($new_style_info, $style_options['info']);
    }
    $style_options['info'] = $new_style_info;
    $view_overrides['style_options'] = $style_options;
  }

  // Make sure Views AJAX is enabled, also disable the Views "more" button.
  $view_overrides['use_ajax'] = TRUE;
  $view_overrides['use_more'] = 0;

  // Customize the view path.
  $view_overrides['path'] = 'noderelationships/search/%/%';
  return $view_overrides;
}