", date("F j, Y", $date), "\n"; foreach ($events as $event) { display_event($event, 0); } $begun++; } else { $errors[] = "There are no events for the specified date (".date("F j, Y",$date).")."; } } else { $errors[] = "The specified date (".htmlentities("$cy/$cm/$cd").") was not valid."; unset($cm); unset($cd); unset($cy); } } if ($cm && $cy && !checkdate($cm,1,$cy)) { $errors[] = "The specified year and month (".htmlentities("$cy, $cm").") are not valid."; unset($cm); unset($cy); } if (!$cm) $cm = date("m"); if (!$cy) $cy = date("Y"); $date = mktime(0,0,1,$cm,1,$cy); if (!$begun) { commonHeader("Events: ".date("F Y", $date)); ?>

If you would like to suggest an upcoming event to be listed on this calendar, you can use our event submission form.

You can click on each of the events for details, or on the number for a day to get the details for all of the events taking place that day.

', "\n", '', $lm), '', $bom), '', $nm), "\n
%B, %Y', strftime('%B, %Y%B, %Y
\n"; # begin the calendar echo '', "\n",'',"\n"; for ($i = 0; $i < 7; $i++) { echo '\n"; } echo "\n"; # generate the requisite number of blank days to get things started for ($days = $i = date("w",$bom); $i > 0; $i--) { echo ''; } for ($i = 1; $i <= date("t",$bom); $i++) { echo ''; if (++$days % 7 == 0) echo "\n"; } # generate the requisite number of blank days to wrap things up for (; $days % 7; $days++) { echo ''; } echo "\n
', date("l",mktime(0,0,1,4,$i+1,2001)), "
 ',$i,''; display_events_for_day(date("Y-m-",$bom).sprintf("%02d",$i),$events); echo '
 
\n"; commonFooter(); # FUNCTIONS /* generate the date on which a recurring event falls for a given month */ /* $bom and $eom are the first and last day of the month to look at */ function date_for_recur($recur,$day,$bom,$eom) { /* $day == 1 == 'Sunday' == date("w",'some sunday')+1 */ if ($recur > 0) { /* ${recur}th $day of the month */ $bomd = date("w",$bom) + 1; $days = (($day - $bomd + 7) % 7) + (($recur - 1) * 7); return mktime(0,0,1, date("m",$bom), $days + 1, date("Y",$bom)); } else { /* ${recur}th to last $day of the month */ $eomd = date("w",$eom) + 1; $days = (($eomd - $day + 7) % 7) + ((abs($recur) - 1) * 7); return mktime(0,0,1, date("m",$bom)+1, -$days, date("Y",$bom)); } } /* display a
for each of the events that fall on a given day */ function display_events_for_day($day,$events) { global $PHP_SELF,$cm,$cy; foreach ($events as $event) { if (($event['type'] == 2 && $event['start'] <= $day && $event['end'] >= $day) || ($event['start'] == $day)) { echo '
', '', stripslashes(htmlentities($event['sdesc'])), '
'; } } } /* load a single event from the event list, by id */ function load_event($id) { $fp = @fopen("backend/events.csv",'r'); if (!$fp) return; while (!feof($fp)) { $event = read_event($fp); if ($event['id'] == $id) { fclose($fp); return $event; } } fclose($fp); return; } /* load a list of events, either for a particular day or a whole month */ function load_events($from, $whole_month=0) { /* we'll take advantage of the equality behavior of this date format */ $from_date = date("Y-m-d", $from); $bom = mktime(0,0,1,date("m",$from),1,date("Y",$from)); $eom = mktime(0,0,1,date("m",$from)+1,0,date("Y",$from)); $to_date = date("Y-m-d", $whole_month ? $eom : $from); $events = $seen = array(); $fp = @fopen("backend/events.csv",'r'); if (!$fp) return; while (!feof($fp)) { $event = read_event($fp); if ($seen[$event['id']]++) continue; # only want each event once! switch ($event['type']) { case 3: /* recurring event */ $date = date_for_recur($event['recur'],$event['recur_day'],$bom,$eom); $event['start'] = date("Y-m-d", $date); /* falls through: now it is just like a single-day event */ case 1: /* single-day event */ if ($event['start'] >= $from_date && $event['start'] <= $to_date) { $events[] = $event; } break; case 2: /* multi-day event */ if (($event['start'] >= $from_date && $event['start'] <= $to_date) || ($event['end'] >= $from_date && $event['end'] <= $to_date) || ($event['start'] <= $from_date && $event['end'] >= $to_date)) { $events[] = $event; } break; } } fclose($fp); return $events; } /* read an event from the event listing */ function read_event($fp) { list(,,,,$sdesc,$id,$ldesc,$url,$recur,$tipo,$sdato,$edato) = fgetcsv($fp,8192); list($recur,$recur_day) = explode(":",$recur,2); return array( 'id' => $id, 'type' => $tipo, 'start' => $sdato, 'end' => $edato, 'recur' => $recur, 'recur_day' => $recur_day, 'sdesc' => $sdesc, 'url' => $url, 'ldesc' => base64_decode($ldesc), ); } ?>