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'].'
