--- event_views.module.orig 2007-10-31 17:20:55.000000000 -0400 +++ event_views.module 2007-10-31 17:21:10.000000000 -0400 @@ -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'))); @@ -55,14 +55,14 @@ 'event_start' => array( '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( @@ -191,14 +191,11 @@ * 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->add_where("%s %s DATE_ADD('%s', INTERVAL %d SECOND)", $field, $filter['operator'], $value, $filter['options']); $query->ensure_table('event'); } @@ -237,7 +234,7 @@ 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 */ @@ -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', @@ -649,7 +653,20 @@ } -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'); }