Index: contrib/event_views/event_views.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/event/contrib/event_views/event_views.module,v
retrieving revision 1.21
diff -u -r1.21 event_views.module
--- contrib/event_views/event_views.module	23 Aug 2007 20:46:36 -0000	1.21
+++ contrib/event_views/event_views.module	6 Oct 2007 01:16:34 -0000
@@ -31,7 +31,7 @@
   }
 
   // Use this to default to current time.
-  $current = array('***CURRENT_TIME***' => t('now'));
+  $current = array('***CURRENT_DATETIME***' => t('now'));
 
   // Limit years to years that have events.
   $range_prev = variable_get('event_range_prev', array('year' => date('%Y')));
@@ -39,30 +39,30 @@
   $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', 
+    'name' => 'event',
     'join' => array(
       'left' => array(
         'table' => 'node',
         'field' => 'nid'
-      ), 
+      ),
       'right' => array(
         'field' => 'nid'
-      ), 
+      ),
     ),
     'fields' => array(
       'event_start' => array(
-        'name' => t('Event: Start Time'), 
+        'name' => t('Event: Start Time'),
         'sortable' => true,
-        'handler' => views_handler_field_dates(),
+        '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' => views_handler_field_dates(),
+        'handler' => event_views_handler_field_dates_iso(),
         'option' => 'string',
         'addlfields' => array('event_start', 'event_end', 'timezone'),
         ),
@@ -84,7 +84,7 @@
         'operator' => 'views_handler_operator_gtlt',
         'value' => views_handler_filter_date_value_form(),
         'option' => 'string',
-        'handler' => 'event_views_handler_filter_timestamp',
+        'handler' => 'event_views_handler_filter_datetime',
         'help' => t('This filter allows events to be filtered by their start date. Enter dates in the format: CCYY-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(
@@ -93,7 +93,7 @@
         'operator' => 'views_handler_operator_gtlt',
         'value' => views_handler_filter_date_value_form(),
         'option' => 'string',
-        'handler' => 'event_views_handler_filter_timestamp',
+        'handler' => 'event_views_handler_filter_datetime',
         'help' => t('This filter allows events to be filtered by their end date. Enter dates in the format: CCYY-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(
@@ -128,18 +128,18 @@
       ),
     ),
   );
-  
+
   // add a pseudo table to set up additional fields and filters for node table
   $tables['event_views'] = array(
-    'name' => 'node', 
+    '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(
@@ -188,16 +188,13 @@
 }
 
 /**
- *  Handle a timestamp filter. 
+ *  Handle a timestamp filter.
  *  would use version in views.module except we have to ensure the events table is in the query
  */
-function event_views_handler_filter_timestamp($op, $filter, $filterinfo, &$query) {
-  $value = $filter['value'] == 'now' ? "***CURRENT_TIME***" : strtotime($filter['value']);
-  
+function event_views_handler_filter_datetime($op, $filter, $filterinfo, &$query) {
+  $value = $filter['value'] == 'now' ? "***CURRENT_DATETIME***" : strtotime($filter['value']);
+
   $field = $filter['field'];
-  if ($filterinfo['from_unixtime']) {
-    $field = "from_UNIXTIME($field)";
-  }
   $query->add_where("%s %s (%s + %d)", $field, $filter['operator'], $value, $filter['options']);
   $query->ensure_table('event');
 }
@@ -215,13 +212,13 @@
  *  A handler to insert substitute date values into the calendar query
  */
 function event_views_calendar_query_handler(&$field, &$fieldinfo, &$query) {
-  
+
   $option = event_views_get_field($field['options']);
-  
+
   // make sure the table is joined into the query and have the selected field serve AS the calendar date
   $query->ensure_table($option['table']);
   $query->add_field($option['field'] ." AS ". $field[field] ."", $option['table']);
-  
+
 }
 
 /*
@@ -231,13 +228,13 @@
  * @param $filterinfo[type] is year, month, or day
  */
 function event_views_handler_filter_ymd($op, $filter, $filterinfo, &$query) {
-  
+
   switch(trim($filter[value])) {
     case(''):
     case('all'):
       return;
       break;
-    case('***CURRENT_TIME***'):
+    case('***CURRENT_DATETIME***'):
       $compare = strtoupper($filterinfo['type'])."($filter[value])";
       break;
     default:
@@ -250,6 +247,13 @@
 }
 
 /**
+* Substitute current time; this works with cached queries.
+*/
+function event_views_views_query_substitutions($view) {
+  return array('***CURRENT_DATETIME***' => gmdate('Y-m-d H:i', time()));
+}
+
+/**
  *  Custom views handlers for the events arguments
  */
 
@@ -266,9 +270,9 @@
   return event_views_handler_arg_type($op, $query, $argtype, $arg, 'event_week', 'WEEK');
 }
 function event_views_handler_arg_type($op, &$query, $argtype, $arg, $field_name, $field_type) {
-  
+
   $timezone = _views_get_timezone();
-  
+
   switch ($field_type) {
   case ('MONTH'):
     $month = $arg ? $arg : $query->event_month ? $query->event_month : '';
@@ -283,13 +287,13 @@
     $sql_adj = '';
     break;
   }
-  
+
   if ($title == '') $title = t('N/A');
 
   // not yet postgres compatible, goal is to get it working reliably, then try to figure out
   // postgres support
   $sql = "$field_type(event.event_start$sql_adj)";
-  
+
   switch($op) {
     case 'summary':
       $fieldinfo['field'] = $sql;
@@ -321,12 +325,12 @@
  *   Create default event views
  */
 function event_views_views_default_views() {
-  
+
   // avoid miscellaneous problems by forcing the cache to clear before creating a default view
   views_invalidate_cache();
 
   $event_node_types = array_merge(event_get_types('all'), event_get_types('solo'));
-  
+
   $view = new stdClass();
   $view->name = t('event_select');
   $view->description = t('Events list filtered by drop-down date selector.');
@@ -398,14 +402,14 @@
       'field' => 'year',
       'operator' => '=',
       'options' => '',
-      'value' => '***CURRENT_TIME***',
+      'value' => '***CURRENT_DATETIME***',
     ),
     array (
       'tablename' => 'event',
       'field' => 'month',
       'operator' => '>=',
       'options' => '',
-      'value' => '***CURRENT_TIME***',
+      'value' => '***CURRENT_DATETIME***',
     ),
     array (
       'tablename' => 'event',
@@ -414,7 +418,7 @@
       'options' => '',
       'value' => '1',
     ),
- 
+
    );
   $view->exposed_filter = array (
      array (
@@ -644,12 +648,25 @@
   );
   $view->requires = array(node, event);
   $views[$view->name] = $view;
-  
+
    return $views;
 
 }
 
-function views_handler_field_date_iso($fieldinfo, $fielddata, $value, $data) {
+/**
+* Provide a list of all standard supported iso date output handlers.
+*/
+function event_views_handler_field_dates_iso() {
+  return array(
+    'event_views_handler_field_date_small_iso'  => t('As Short Date'),
+    'event_views_handler_field_date_iso'        => t('As Medium Date'),
+    'event_views_handler_field_date_large_iso'  => t('As Long Date'),
+    'event_views_handler_field_date_custom_iso' => t('As Custom Date'),
+    'event_views_handler_field_since_iso'       => t('As Time Ago')
+  );
+}
+
+function event_views_handler_field_date_iso($fieldinfo, $fielddata, $value, $data) {
   return $value ? event_format_date($value) : theme('views_nodate');
 }
 
@@ -657,20 +674,20 @@
 /**
  * Format a date using small representation.
  */
-function views_handler_field_date_small_iso($fieldinfo, $fielddata, $value, $data) {
+function event_views_handler_field_date_small_iso($fieldinfo, $fielddata, $value, $data) {
   return $value ? event_format_date($value, 'small') : theme('views_nodate');
 }
 
 /**
  * Format a date using large representation.
  */
-function views_handler_field_date_large_iso($fieldinfo, $fielddata, $value, $data) {
+function event_views_handler_field_date_large_iso($fieldinfo, $fielddata, $value, $data) {
   return $value ? event_format_date($value, 'large') : theme('views_nodate');
 }
 
 /**
  * Format a date using custom representation.
  */
-function views_handler_field_date_custom_iso($fieldinfo, $fielddata, $value, $data) {
+function event_views_handler_field_date_custom_iso($fieldinfo, $fielddata, $value, $data) {
   return $value ? event_format_date($value, 'custom', $fielddata['options']) : theme('views_nodate');
-}
+}
\ No newline at end of file
