Index: og_calendar.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/og_calendar/Attic/og_calendar.module,v
retrieving revision 1.10.2.1
diff -u -p -r1.10.2.1 og_calendar.module
--- og_calendar.module	23 Feb 2007 19:17:41 -0000	1.10.2.1
+++ og_calendar.module	2 Apr 2007 23:37:51 -0000
@@ -120,7 +120,7 @@ function og_calendar_link($type, $node =
 /**
  * Menu callback; views either all group events or a specific group's calendar.
  */
-function og_calendar_page($gid = NULL) {
+function og_calendar_page($gid = NULL, $year = NULL, $month = NULL, $day = NULL) {
   if ($gid) {
     $group = node_load($gid);
     $nodes = array();
@@ -133,34 +133,66 @@ function og_calendar_page($gid = NULL) {
     // Maintains group theme for og calendar view
   	og_set_theme($gid);
 
-    // View only events from this group
-    $sql = "SELECT e.nid FROM {event} e INNER JOIN {node} n ON n.nid = e.nid";
-    $sql = db_rewrite_sql($sql, 'e', 'nid', array('og_nid' => $gid));
+    // Code to get the parameters for the current month:
+		if (empty($year)) {
+			$year = date('Y', time());
+		}
+    if (empty($month)) {
+      $month = date('m', time());
+    }
+    if (empty($day)) {
+      $day = date('d', time());
+    }
+    $date = mktime(12, 0, 0, $month, $day, $year);
+		$next_year = $year;
+		$next_month = $month + 1;
+		if ($next_month == 13) {
+      $next_month = 1;
+      $next_year = $year + 1;
+		}
+		if ($next_month < 10) {
+      $next_month = '0'. $next_month;
+    }
+    $start_date = mktime(12, 0, 0, $month, 1, $year);
+    $end_date = mktime(12, 0, 0, $next_month, 1, $next_year);
+
+    // View only events from this group limited by above timeframe
+    $sql = "SELECT e.nid, e.event_start, e.event_end FROM {event} e INNER JOIN {node} n ON n.nid = e.nid";
+    $sql = db_rewrite_sql($sql, 'n', 'nid', array('og_nid' => $gid));
     $result = db_query($sql, $gid);
     while ($nid = db_fetch_object($result)) {
       $event = node_load($nid->nid);
-      if (isset($event->nid)) {
-        $nodes[$event->nid] = $event;
+      // We need to get the event start date so we know how to set the timeframe;
+      $event_start = $nid->event_start;
+      $event_end = $nid->event_end;
+      // Get only event nodes that fall within the timeframe
+      if ($event_start >= $start_date && $event_start < $end_date) {
+      	if (isset($event->nid)) {
+        	$nodes[$event->nid] = $event;
+	      }
       }
     }
-    if (count($nodes)) {
-      $output = event_get_calendar('month', $nodes, 'og_calendar', t('@name calendar', array('@name' => $group->title)));
-      $output .= theme('event_ical_link', 'event/ical/'. $node->filter);
-
-      // Add RSS feed and icon to events page
-      drupal_add_link(array(
-        'rel' => 'alternate',
-        'type' => 'application/rss+xml',
-        'title' => t('RSS'),
-        'href' => url('event/feed', NULL, NULL, TRUE)
-      ));
-      $output .= theme('feed_icon', url('event/feed'));
 
-      return $output;
-    }
-    else {
-      return t('No (visible) events for the @name group were found!', array('@name' => $group->title));
+    $prev = _og_calendar_event_nav($date, 'prev', $gid);
+    $next = _og_calendar_event_nav($date, 'next', $gid);
+
+    $output = event_get_calendar('month', $nodes, 'og_calendar', t('!name calendar', array('!name' => $group->title)));
+    if (!empty($prev)) {
     }
+    $output .= $prev .'|'. $next;
+    $output .= "<br>";
+    $output .= theme('event_ical_link', 'event/ical/'. $node->filter);
+
+    // Add RSS feed and icon to events page
+    drupal_add_link(array(
+      'rel' => 'alternate',
+      'type' => 'application/rss+xml',
+      'title' => t('RSS'),
+      'href' => url('event/feed', NULL, NULL, TRUE)
+    ));
+    $output .= theme('feed_icon', url('event/feed'));
+
+    return $output;
   }
   else {
     // Redirect to the main event page
@@ -169,6 +201,35 @@ function og_calendar_page($gid = NULL) {
 }
 
 /**
+ * Our version of _event_nav().
+ */
+function _og_calendar_event_nav($date, $dir, $gid) {
+  $sql = "SELECT MIN(e.event_start) AS event_start, MAX(e.event_end) AS event_end FROM {event} e INNER JOIN {node} n ON n.nid = e.nid";
+  $sql = db_rewrite_sql($sql, 'e', 'nid', array('og_nid' => $gid));
+  $range = db_fetch_object(db_query($sql, $gid));
+
+  // if we are beyond the range of the stored events, dont display navigation
+  if (($dir == 'prev' && $range->event_start < $date) || ($dir == 'next' && $range->event_end > $date)) {
+    $inc = ($dir == 'prev' ? -1 : 1);
+
+    // Increment by $duration*months
+    $date = gmmktime(0, 0, 0, gmdate('m', $date) + $inc, 1, gmdate('Y', $date));
+
+    $url[] = 'og_calendar/'. $gid;
+    $url[] = gmdate('Y', $date);
+    $url[] = gmdate('m', $date);
+    $url[] = gmdate('d', $date);
+
+    if ($inc == -1) {
+      return l('Previous Month ', implode('/', $url));
+    }
+    if ($inc == 1) {
+      return l(' Next Month', implode('/', $url));
+    }
+  }
+}
+
+/**
  * Implementation of hook_og_create_links().
  */
 function og_calendar_og_create_links($group) {
