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