Event views event.event_end logic
| Project: | Event Views |
| Component: | Code |
| Category: | bug report |
| Priority: | normal |
| Assigned: | Unassigned |
| Status: | active |
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!
