function availability_calendar_field_views_data_alter in Availability Calendars 7.5
Same name and namespace in other branches
- 7.3 availability_calendar.views.inc \availability_calendar_field_views_data_alter()
- 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'],
),
);
}
}