", 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));
?>
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 '
';
}
}
}
/* 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),
);
}
?>