- get selected month
$monthNames = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
if (!isset($_REQUEST["month"])) $_REQUEST["month"] = date("n");
if (!isset($_REQUEST["year"])) $_REQUEST["year"] = date("Y");
$cMonth = $_REQUEST["month"];
$cYear = $_REQUEST["year"];
$prev_year = $cYear;
$next_year = $cYear;
$prev_month = $cMonth-1;
$next_month = $cMonth+1;
if ($prev_month == 0 ) {
$prev_month = 12;
$prev_year = $cYear - 1;
}
if ($next_month == 13 ) {
$next_month = 1;
$next_year = $cYear + 1;
}
//
// find all events which overlap with this month
$this_month_date = sprintf("%04d-%02d-01 00:00:00", $cYear, $cMonth);
$next_month_date = sprintf("%04d-%02d-01 00:00:00", $next_year, $next_month);
list($eventsRecords, ) = getRecords(array(
'tableName' => 'events',
'where' => mysql_escapef("start_date < ? AND IF(end_date != '0000-00-00', end_date >= ?, start_date >= ?)", $next_month_date, $this_month_date, $this_month_date),
));
// go through events and build up a mapping of dates to events, respecting repeated events
$eventsByDay = array();
$this_month_time = strtotime($this_month_date);
$next_month_time = strtotime($next_month_date) - 1;
foreach ($eventsRecords as $record) {
if (strtotime($record['end_date'])) {
$last_day = null;
$current_time = max($this_month_time, strtotime($record['start_date']));
$end_time = min($next_month_time, strtotime($record['end_date']));
while ($current_time < $end_time || date("Y-m-d", $current_time) == date("Y-m-d", $end_time)) {
$skip = false;
$current_day = date("Y-m-d", $current_time);
// skip if we've already seen this day (necessary because we're skipping forward by 23 hours)
if ($current_day == $last_day) { $skip = true; }
// skip if relevant weekday checkbox isn't checked
$current_weekday = strtolower(date('l', $current_time));
if (!$record[$current_weekday]) { $skip = true; }
// add event to this day
if (!$skip) {
$day = intval(date('d', $current_time));
if (!array_key_exists($day, $eventsByDay)) { $eventsByDay[$day] = array(); }
$eventsByDay[$day][] = $record;
}
// advance current_time (but not by 24 hours, lest we skip over a springtime daylight-savings day)
$current_time += 23*60*60;
$last_day = $current_day;
}
}
else {
// no end_date, so this is a single-day event
$day = intval(date('d', strtotime($record['start_date'])));
if (!array_key_exists($day, $eventsByDay)) { $eventsByDay[$day] = array(); }
$eventsByDay[$day][] = $record;
}
}
?>
|
|
Sunday |
Monday |
Tuesday |
Wednesday |
Thursday |
Friday |
Saturday |
\n";
if($i < $startday) {
echo " | \n";
}
else {
$day = $i - $startday + 1;
echo "". $day . " ";
// check if there are any events for this day
if (array_key_exists($day, $eventsByDay)) {
// list all events for this day
foreach ($eventsByDay[$day] as $record) {
?>
\n";
}
if(($i % 7) == 6 ) echo "\n";
}
?>
| |