Event Calendar

<?php function get_cal_data($timestamp,$allEvents) { $return = array(); //get all relevant date information $return['cal_month'] = date("n",$timestamp); $return['cal_year'] = date("Y",$timestamp); $return['cal_month_name'] = date("F",$timestamp); $return['first_day_ts'] = mktime(0, 0, 0, $return['cal_month'], 1, $return['cal_year']); $return['last_day_ts'] = mktime(23, 59, 59, $return['cal_month']+1, 0, $return['cal_year']); $return['first_week_day'] = date("w", $return['first_day_ts']); $return['last_day'] = date("j", $return['last_day_ts']); $return['events'] = array(); foreach($allEvents as $event) { $startts = strtotime($event['start_date']); $endts = strtotime($event['end_date']); $enddayts = mktime(23,59,59,date("n",$endts),date("j",$endts),date("Y",$endts)); list($title_place, $title_desc) = split(":",$event['title'],2); if($startts > $return['first_day_ts'] && $startts < $return['last_day_ts']) { //event falls into this month (at least the start of it) //now need to mark each day of the event... $this_date = $startts; while($this_date <= $enddayts && $this_date < $return['last_day_ts']) { $event_day = date("j",$this_date); $stuff = '
  • '.l($title_place.' '.$title_desc, 'civicrm/event/info', array('query'=>'reset=1&id='.$event['id'])).'
  • '; if(isset($return['events'][$event_day]['content'])) $return['events'][$event_day]['content'] .= $stuff; else $return['events'][$event_day]['content'] = $stuff; $this_date+=86400; } } } return($return); } function cmp_date($a,$b) { if ($a['start_date'] > $b['start_date']) return 1; if ($a['start_date'] < $b['start_date']) return -1; return 0; } //get timestamp if(!isset($timestamp)) $timestamp = (empty($_GET['d']) || !is_numeric($_GET['d'])) ? time() : $_GET['d']; $this_month_start = mktime(0,0,0,date('n'),1,date('Y')); $allEvents = array(); if (module_exists('civicrm')) { civicrm_initialize(TRUE); require_once 'api/v2/Event.php'; // This example limits listing to public and active events $params = array ('is_public' => 1, 'is_active' => 1); $myEvents = civicrm_event_search( $params ); if ($myEvents) { $count = 0; $last = ''; $now = date('Y-m-d H:i:s',$this_month_start); usort($myEvents,'cmp_date'); foreach ($myEvents as $event) { if ($now > $event['start_date']) continue; $startdate = date('D M j Y',strtotime($event['start_date'])); $enddate = date('D M j Y',strtotime($event['end_date'])); $allEvents[] = $event; $count++; $last = $startdate; } } } //setup calendar $months = array(); $months[0] = get_cal_data($timestamp,$allEvents); //next month $next_month_ts = mktime(0, 0, 0, $months[0]['cal_month']+1, 1, $months[0]['cal_year']); //prev month $prev_month_ts = mktime(0, 0, 0, $months[0]['cal_month']-1, 1,$months[0]['cal_year']); ?> <?php for($i=0; $i ">next <?php if($prev_month_ts >= $this_month_start) { ?> ">prev <?php } ?> <?php echo $month['cal_month_name'] . " " . $month['cal_year']; ?> Su M Tu W Th F Sa "> <?php $day = 1; $start = 0; $weeks = 1; while($weeks<7) { for($weekday=0; $weekday < 7; $weekday++) { if($weekday==0) { ?> <?php } if($weekday >= $month['first_week_day']) $start = 1; if($start == 1 && $day <= $month['last_day']) { $day_num = $day; $class = ""; $day++; if($weekday == 0) $class .= " first_day"; ?> " class="day_box<?php echo $class; ?> border"><?php echo $day_num; ?><?php if(isset($month['events'][$day_num]['content'])) { echo '
      '.$month['events'][$day_num]['content'].'
    '; } ?> <?php } else { ?> <?php } if($weekday == 6) { ?> <?php } } if($day > $month['last_day']) break; $weeks++; } ?> <?php } ?>