Event views event.event_end logic

averemey - December 16, 2006 - 00:35
Project:Event Views
Component:Code
Category:bug report
Priority:normal
Assigned:Unassigned
Status:active
Description

Current event_views module does not take event.event_end into consideration.
Here's an example: event starts on November 30 and ends on December 2.
When an event view is requested for the month of December, the event above is not displayed.
event_views module makes the following SQL query:
SELECT DISTINCT(node.nid), node.title AS node_title, node.changed AS node_changed, event.event_start AS event_event_start, event.event_end AS event_event_end FROM node node LEFT JOIN node event_views ON node.nid = event_views.nid LEFT JOIN term_node term_node ON node.nid = term_node.nid LEFT JOIN event event ON node.nid = event.nid WHERE (node.status = '1') AND (event_views.type IN ('flexinode-1')) AND (term_node.tid IN ('41')) AND (YEAR(from_UNIXTIME(event.event_start)) = 2006) AND (MONTH(from_UNIXTIME(event.event_start)) = 12) LIMIT 0, 99;

The correct query should be:
SELECT DISTINCT(node.nid), node.title AS node_title, node.changed AS node_changed, event.event_start AS event_event_start, event.event_end AS event_event_end FROM node node LEFT JOIN node event_views ON node.nid = event_views.nid LEFT JOIN term_node term_node ON node.nid = term_node.nid LEFT JOIN event event ON node.nid = event.nid WHERE (node.status = '1') AND (event_views.type IN ('flexinode-1')) AND (term_node.tid IN ('41')) AND ((YEAR(from_UNIXTIME(event.event_start)) = 2006) OR (YEAR(from_UNIXTIME(event.event_end)) = 2006)) AND ((MONTH(from_UNIXTIME(event.event_start)) = 12) OR (MONTH(from_UNIXTIME(event.event_end)) = 12)) LIMIT 0, 99;

Note the logic EITHER event starts on date OR event ends on date.

My quick patch for function event_views_handler_arg_type looks like the following:

606 case 'filter':
607 $event_year = intval($arg);
608 if ($field_type == 'MONTH') {
609 $query->add_where("($sql = ". $arg . ") OR (MONTH(from_UNIXTIME(event.event_end)) = " . $arg . ")");
610 }
611 elseif ($field_type == 'YEAR') {
612 $query->add_where("($sql = ". $arg . ") OR (YEAR(from_UNIXTIME(event.event_end)) = " . $arg . ")");
613 }
614 else {
615 $query->add_where("$sql = ". $arg);
616 }
617 $query->ensure_table($table[0]);
618 break;

Please suggest a better way to do it.

Thanks!

 
 

Drupal is a registered trademark of Dries Buytaert.