Index: event.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/event.module,v
retrieving revision 1.193
diff -u -r1.193 event.module
--- event.module	28 Mar 2006 02:58:57 -0000	1.193
+++ event.module	8 Apr 2006 13:13:05 -0000
@@ -2011,3 +2011,346 @@
       return t('This is a listing of all the event system\'s time zones, sorted by daylight savings time regions, and thier respective offsets from GMT in seconds. Time zones in the \'None\' region do not observe daylight savings time. If you believe there is an error, please first search for the locale on %timeanddate and confirm it. If there is indeed an error please submit a %bugreport on drupal.org so we can fix it.', array('%timeanddate' => l('http://timeanddate.com/worldclock/search.html', 'http://timeanddate.com/worldclock/search.html'), '%bugreport' => l('bug report', 'http://drupal.org/node/add/project_issue/event')));
   }
 }
+
+
+/**
+ * For operation with the views.module.
+ */
+function event_views_tables() {
+  
+  $months  = array();
+  $years   = array();
+  $days    = array();
+  $current = array('current' => t('<Current>'));
+  $all     = array('' => t('<All>'));
+  $years   = ($current + $all + drupal_map_assoc(range(intval(date("Y", time()) - 3), intval(date("Y", time()) + 3))));
+  $months  = ($current + $all + array(1 => t('January'), 2=> t('February'), 3 => t('March'), 4 => t('April'), 5 => t('May'), 6 => t('June'), 7 => t('July'), 8 => t('August'), 9 => t('September'), 10 => t('October'), 11 => t('November'), 12 => t('December')));
+  $days    = ($current + $all + 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'), 
+        'handler' => array(
+          'views_handler_field_date_small'=>t('short date'),
+          'views_handler_field_date'=>t('medium date'),
+          'views_handler_field_date_large'=>t('long date')
+        ),
+        'sortable' => true,
+      ),
+      'event_end' => array(
+        'name' => t('Event: End Time'), 
+        'handler' => array(
+          'views_handler_field_date_small'=>t('short date'),
+          'views_handler_field_date'=>t('medium date'),
+          'views_handler_field_date_large'=>t('long date')
+        ),
+        'sortable' => true,
+      ),
+      'timezone' => array(
+        'name' => t('Event: Timezone'),
+        'handler' => 'event_timezone_display_handler',
+        'sortable' => true,
+      ),
+    ),
+    'sorts' => array(
+      'event_start' => array('name' => t('Event: Start Time')),
+      'event_end' => array('name' => t('Event: End Time')),
+    ),
+    'filters' => array(
+      'event_start1' => array(
+        'field' => 'event_start',
+        'name' => t('Event: Start Year'),
+        'operator' => array(
+          '' => t('<All>'),
+          '>' => t('>'),
+          '>=' => t('>='),
+          '=' => t('='),
+          '<=' => t('<='),
+          '<' => t('<'),
+        ),
+        'list' => $years,
+        'list-type' => 'select',
+        'handler' => 'event_views_handler_filter_event',
+        'cacheable' => 'no',
+        'type' => 'year',
+      ),
+      'event_start2' => array(
+        'field' => 'event_start',
+        'name' => t('Event: Start Month'),
+        'operator' => array(
+          '' => t('<All>'),
+          '>' => t('>'),
+          '>=' => t('>='),
+          '=' => t('='),
+          '<=' => t('<='),
+          '<' => t('<'),
+        ),
+        'list' => $months,
+        'list-type' => 'select',
+        'handler' => 'event_views_handler_filter_event',
+        'cacheable' => 'no',
+        'type' => 'month',
+      ),
+      'event_start3' => array(
+        'field' => 'event_start',
+        'name' => t('Event: Start Day'),
+        'operator' => array(
+          '' => t('<All>'),
+          '>' => t('>'),
+          '>=' => t('>='),
+          '=' => t('='),
+          '<=' => t('<='),
+          '<' => t('<'),
+        ),
+        'list' => $days,
+        'list-type' => 'select',
+        'handler' => 'event_views_handler_filter_event',
+        'cacheable' => 'no',
+        'type' => 'day',
+      ),
+    )
+  );
+  
+  return $tables;
+}
+
+/*
+ * Custom display for timezone, swap timezone name in for offset
+ */
+function event_views_timezone_display_handler($fieldinfo, $fielddata, $value, $data) {
+  if (!$value) return;
+  $zones = event_zonelist();
+  return $zones[$value];
+}
+
+/*
+ * Custom filter for date
+ */
+function event_views_handler_filter_event($op, $filter, $filterinfo, &$query) {
+  switch($filter[value]) {
+    case(''):
+      //$query->ensure_table('event');
+      //$query->add_where(strtoupper($filterinfo['type']) ."(FROM_UNIXTIME(event.event_start)) > 0");
+      return;
+      break;
+    case('current'):
+      switch ($filterinfo['type']) {
+        case ('year'):
+          $filter[value] = date("Y", time());
+          break;
+        case ('month'):
+          $filter[value] = date("n", time());
+          break;
+        case ('day'):
+          $filter[value] = date("j", time());
+          break;
+      }
+    break;
+  }
+  switch($filter['operator']) {
+    case (''):
+      //$query->ensure_table('event');
+      //$query->add_where(strtoupper($filterinfo['type']) ."(FROM_UNIXTIME(event.event_start)) > 0");
+      return;
+      break;
+    case (check_plain('>')):
+      $filter['operator'] = '>';
+      break;
+    case (check_plain('>=')):
+      $filter['operator'] = '>=';
+      break;
+    case (check_plain('<')):
+      $filter['operator'] = '<';
+      break;
+    case (check_plain('<=')):
+      $filter['operator'] = '<=';
+      break;
+  }
+  $query->ensure_table('event');
+  $query->add_where(strtoupper($filterinfo['type']) ."(FROM_UNIXTIME(event.event_start)) $filter[operator] $filter[value]");
+}
+
+
+/**
+ *  Create default event views
+ */
+function event_views_default_views() {
+
+  $event_node_types = array_merge(event_get_types('all'), event_get_types('solo'));
+  
+  for ($i = 1; $i <= 1; $i++) {
+    switch ($i) {
+    case (1):
+      $name = t('event table');
+      $type = t('table');
+      $date_handler = 'views_handler_field_date_small';
+      $description = t('User selectable table of events.');
+      break;
+    case (2):
+      $name = t('event list');
+      $type = t('list');
+      $date_handler = 'views_handler_field_date_long';
+      $description = t('User selectable bulleted list of events.');
+      break;
+    case (3):
+      $name = t('event teasers');
+      $type = t('teaser');
+      $date_handler = 'views_handler_field_date_long';
+      $description = t('User selectable teaser list of events.');
+      break;
+    }
+
+    $view = new stdClass();
+    $view->name = $name;
+    $view->description = $description;
+    $view->access = array (
+      );
+    $view->view_args_php = '';
+    $view->page = TRUE;
+    $view->page_title = $name;
+    $view->page_header = '';
+    $view->page_header_format = '1';
+    $view->page_footer = '';
+    $view->page_footer_format = '1';
+    $view->page_empty = '';
+    $view->page_empty_format = '1';
+    $view->page_type = $type;
+    $view->url = 'event/views/'. $type;
+    $view->use_pager = TRUE;
+    $view->nodes_per_page = '10';
+    $view->menu = TRUE;
+    $view->menu_title = t('event %s', array('%s' => $type));
+    $view->menu_tab = FALSE;
+    $view->menu_tab_default = FALSE;
+    $view->menu_weight = '';
+    $view->sort = array (
+      );
+    $view->argument = array (
+      );
+    $view->field = array (
+      array (
+        'tablename' => 'node',
+        'field' => 'title',
+        //'label' => '',
+        'handler' => 'views_handler_field_nodelink',
+        'sortable' => '1',
+        ),
+      array (
+        'tablename' => 'event',
+        'field' => 'event_start',
+        'label' => 'Start Time:',
+        'handler' => $date_handler,
+        'sortable' => '1',
+        'defaultsort' => 'ASC',
+        ),
+      array (
+        'tablename' => 'event',
+        'field' => 'event_end',
+        'label' => 'End Time:',
+        'handler' => $date_handler,
+        'sortable' => '1',
+        ),
+      );
+    $view->filter = array (
+      array (
+        'tablename' => 'node',
+        'field' => 'status',
+        'operator' => '=',
+        'options' => '',
+        'value' => '1',
+        ),
+      array (
+        'tablename' => 'node',
+        'field' => 'type',
+        'operator' => 'OR',
+        'options' => '',
+        'value' => $event_node_types,
+        ),
+      array (
+        'tablename' => 'term_node',
+        'field' => 'tid',
+        'operator' => 'OR',
+        'options' => '',
+        'value' => array (
+          ),
+        ),
+      array (
+        'tablename' => 'event',
+        'label' => t('Start Year:'),
+        'field' => 'event_start1',
+        'operator' => '=',
+        'options' => '',
+        'value' => 'current',
+        ),
+      array (
+        'tablename' => 'event',
+        'label' => t('Start Month:'),
+        'field' => 'event_start2',
+        'operator' => '>=',
+        'options' => '',
+        'value' => 'current',
+        ),
+      array (
+        'tablename' => 'event',
+        'label' => t('Start Day:'),
+        'field' => 'event_start3',
+        'operator' => '=',
+        'options' => '',
+        'value' => '',
+        ),
+      );
+    $view->exposed_filter = array(
+      array (
+        'tablename' => 'term_node',
+        'label' => t('Category:'),
+        'field' => 'tid',
+        'optional' => 1,
+        'is_default' => 0,
+        'single' => 1,
+        'position' => 0,
+        ),
+      array (
+        'tablename' => 'event',
+        'label' => t('Start Year:'),
+        'field' => 'event_start1',
+        'optional' => 0,
+        'is_default' => 0,
+        'single' => 1,
+        'position' => 1,
+        ),
+      array (
+        'tablename' => 'event',
+        'label' => t('Start Month:'),
+        'field' => 'event_start2',
+        'optional' => 0,
+        'is_default' => 0,
+        'single' => 1,
+        'position' => 2,
+        ),
+      array (
+        'tablename' => 'event',
+        'label' => t('Start Day:'),
+        'field' => 'event_start3',
+        'optional' => 0,
+        'is_default' => 0,
+        'single' => 1,
+        'position' => 3,
+        ),
+    );
+    $view->requires = array(node, event, term_node);
+    $views[$view->name] = $view;
+  }
+  return $views;
+}
+
