You are here

function availability_calendar_field_views_data_alter in Availability Calendars 7.5

Same name and namespace in other branches
  1. 7.3 availability_calendar.views.inc \availability_calendar_field_views_data_alter()
  2. 7.4 views/availability_calendar.views.inc \availability_calendar_field_views_data_alter()

Implements hook_field_views_data_alter().

The data structure mostly contains correct defaults. So we let Views/field create the array for us first, then we alter it, as opposed to implementing hook_field_views_data() ourselves.

Data added:

  • We add a relationship from field cid to availability_calendar_calendar.
  • We define a filter and argument to filter on availability.

Parameters

array $data:

array $field:

File

views/availability_calendar.views.inc, line 47
Views support for Availability Calendar.

Code

function availability_calendar_field_views_data_alter(&$data, $field) {
  if ($field['type'] === 'availability_calendar') {

    // Get some info for easy use later on.
    $field_name = $field['field_name'];
    $field_table_name = key($field['storage']['details']['sql']['FIELD_LOAD_CURRENT']);

    // field_..._cid is a reference to availability_calendar_calendar.
    $data[$field_table_name]["{$field_name}_cid"]['relationship'] = array(
      'handler' => 'views_handler_relationship',
      'base' => 'availability_calendar_calendar',
      'entity type' => 'availability_calendar_calendar',
      'base field' => 'cid',
      'label' => t('Reference to an availability calendar'),
      // We should only join to the availability_calendar_calendar table when
      // the calendar is enabled at the field level.
      'join extra' => array(
        array(
          'table' => $field_table_name,
          'field' => "{$field_name}_enabled",
          'value' => 1,
          'numeric' => TRUE,
        ),
      ),
    );

    // Define a filter and argument to filter on availability.
    $field_title = $data[$field_table_name][$field_name]['title'];
    $data[$field_table_name]['available'] = array(
      'group' => $data[$field_table_name][$field_name]['group'],
      'title' => t('@field_label is available', array(
        '@field_label' => $field_title,
      )),
      'title short' => t('@field_label available', array(
        '@field_label' => $field_title,
      )),
      'help' => t('Filters on availability during the defined period.'),
      'filter' => array(
        'real field' => "{$field_name}_cid",
        'handler' => 'availability_calendar_handler_filter_availability',
        'default_state' => $field['settings']['default_state'],
        'allocation_type' => $field['settings']['allocation_type'],
      ),
      'argument' => array(
        'real field' => "{$field_name}_cid",
        'handler' => 'availability_calendar_handler_argument_availability',
        'default_state' => $field['settings']['default_state'],
        'allocation_type' => $field['settings']['allocation_type'],
      ),
    );
  }
}