function availability_calendar_field_views_data_views_data_alter in Availability Calendars 7.5
Implements hook_field_views_data_views_data_alter().
Field modules can implement hook_field_views_data_views_data_alter() to alter the views data on a per field basis. This is weirdly named so as not to conflict with the drupal_alter('field_views_data') in field_views_data.
We add:
- reverse relationships on availability calendars to entities that use it.
Based on code copied from views/modules/file.field.inc
Parameters
array $data:
array $field:
File
- views/
availability_calendar.views.inc, line 111 - Views support for Availability Calendar.
Code
function availability_calendar_field_views_data_views_data_alter(&$data, $field) {
// Get some info for easy use later on.
$field_name = $field['field_name'];
$field_table_name = key($field['storage']['details']['sql']['FIELD_LOAD_CURRENT']);
// Define reverse entity relations to entities using calendars via this field
foreach ($field['bundles'] as $entity_type => $bundles) {
$entity_info = entity_get_info($entity_type);
$pseudo_field_name = "reverse_{$field_name}_{$entity_type}";
list($label) = field_views_field_label($field_name);
$entity = $entity_info['label'];
if ($entity == t('Node')) {
$entity = t('Content');
}
$data['availability_calendar_calendar'][$pseudo_field_name]['relationship'] = array(
'title' => t('@entity using @field', array(
'@entity' => $entity,
'@field' => $label,
)),
'help' => t('Relate each @entity with a @field set to this availability calendar.', array(
'@entity' => $entity,
'@field' => $label,
)),
'handler' => 'views_handler_relationship_entity_reverse',
'field_name' => $field_name,
'field table' => $field_table_name,
'field field' => "{$field_name}_cid",
'base' => $entity_info['base table'],
'base field' => $entity_info['entity keys']['id'],
'label' => t('!field_name', array(
'!field_name' => $field_name,
)),
'join_extra' => array(
0 => array(
'field' => 'entity_type',
'value' => $entity_type,
),
1 => array(
'field' => 'deleted',
'value' => 0,
'numeric' => TRUE,
),
),
);
}
}