You are here

function event_views_views_tables in Event Views 5.2

Same name and namespace in other branches
  1. 5 event_views.module \event_views_views_tables()
  2. 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;
}