function event_views_views_tables in Event Views 5.2
Same name and namespace in other branches
- 5 event_views.module \event_views_views_tables()
- 6.2 event_views.module \event_views_views_tables()
Implementation of hook_views_tables(). Expose event fields and filters to the views module.
File
- ./
event_views.module, line 24 - Views-enables the event module.
Code
function event_views_views_tables() {
// Create an option list of event content types.
$event_node_types = array_merge(event_get_types('all'), event_get_types('solo'));
$type_options = array();
foreach ($event_node_types as $type) {
$type_options[$type] = node_get_types('name', $type);
}
// Use this to default to current time.
$current = array(
'***CURRENT_DATETIME***' => t('now'),
);
// Limit years to years that have events.
$range_prev = variable_get('event_range_prev', array(
'year' => date('%Y'),
));
$range_next = variable_get('event_range_next', array(
'year' => date('%Y'),
));
$years = $current + drupal_map_assoc(range(intval($range_prev['year']), intval($range_next['year'])));
$months = $current + drupal_map_assoc(range(1, 12), 'map_month');
$days = $current + drupal_map_assoc(range(1, 31));
$tables['event'] = array(
'name' => 'event',
'join' => array(
'left' => array(
'table' => 'node',
'field' => 'nid',
),
'right' => array(
'field' => 'nid',
),
),
'fields' => array(
'event_start' => array(
'name' => t('Event: Start Time'),
'sortable' => true,
'handler' => event_views_handler_field_dates_iso(),
'option' => 'string',
'addlfields' => array(
'event_start',
'event_end',
'timezone',
),
),
'event_end' => array(
'name' => t('Event: End Time'),
'sortable' => true,
'handler' => event_views_handler_field_dates_iso(),
'option' => 'string',
'addlfields' => array(
'event_start',
'event_end',
'timezone',
),
),
'timezone' => array(
'name' => t('Event: Timezone'),
'handler' => 'event_views_timezone_display_handler',
'query_handler' => 'event_views_query_handler',
'sortable' => true,
),
),
'sorts' => array(
'event_start' => array(
'name' => t('Event: Start Time'),
),
'event_end' => array(
'name' => t('Event: End Time'),
),
),
'filters' => array(
'event_start' => array(
'field' => 'event_start',
'name' => t('Event: Start Date'),
'operator' => 'views_handler_operator_gtlt',
'value' => views_handler_filter_date_value_form(),
'option' => 'string',
'handler' => 'event_views_handler_filter_datetime',
'help' => t('This filter allows events to be filtered by their start date. Enter dates in the format: YYYY-MM-DD HH:MM:SS. Enter \'now\' to use the current time. You may enter a delta (in seconds) to the option that will be added to the time; this is most useful when combined with now. If you have the jscalendar module from jstools installed, you can use a popup date picker here.'),
),
'event_end' => array(
'field' => 'event_end',
'name' => t('Event: End Date'),
'operator' => 'views_handler_operator_gtlt',
'value' => views_handler_filter_date_value_form(),
'option' => 'string',
'handler' => 'event_views_handler_filter_datetime',
'help' => t('This filter allows events to be filtered by their end date. Enter dates in the format: YYYY-MM-DD HH:MM:SS. Enter \'now\' to use the current time. You may enter a delta (in seconds) to the option that will be added to the time; this is most useful when combined with now. If you have the jscalendar module from jstools installed, you can use a popup date picker here.'),
),
'year' => array(
'field' => 'event_start',
'name' => t('Event: Start Year'),
'operator' => 'views_handler_operator_gtlt',
'list' => $years,
'list-type' => 'select',
'handler' => 'event_views_handler_filter_ymd',
'type' => 'YEAR',
'help' => t('Filter by year. Use the option to select the date field to filter on.'),
),
'month' => array(
'field' => 'event_start',
'name' => t('Event: Start Month'),
'operator' => 'views_handler_operator_gtlt',
'list' => $months,
'list-type' => 'select',
'handler' => 'event_views_handler_filter_ymd',
'type' => 'MONTH',
'help' => t('Filter by month. Use the option to select the date field to filter on.'),
),
'day' => array(
'field' => 'event_start',
'name' => t('Event: Start Day'),
'operator' => 'views_handler_operator_gtlt',
'list' => $days,
'list-type' => 'select',
'handler' => 'event_views_handler_filter_ymd',
'type' => 'DAYOFMONTH',
'help' => t('Filter by day. Use the option to select the date field to filter on.'),
),
),
);
// add a pseudo table to set up additional fields and filters for node table
$tables['event_views'] = array(
'name' => 'node',
'join' => array(
'left' => array(
'table' => 'node',
'field' => 'nid',
),
'right' => array(
'field' => 'nid',
),
),
// here's a filter that is limited to event content types to be used for exposed filters that should not contain other values
'filters' => array(
'event_type' => array(
'field' => 'type',
'name' => t('Event: Type'),
'list' => $type_options,
'list-type' => 'list',
'operator' => 'views_handler_operator_or',
'value-type' => 'array',
'help' => t('A node type selector that is limited to event-enabled node types. Use as exposed filter that only contains event node types.'),
),
),
);
return $tables;
}