sub('week'); } function calendar_day($kind, &$template) { $template->sub($kind); $template->sub('day'); } # php4 is broken, in that you cannot set a default value for a parameter that # is passed by reference. So, this is set up to use the following screwy # syntax: # # calendar('2006', '12', $events, ref($my_template)) function calendar($year, $month, $events = 0, $template = 0) { if($template === 0) { $template = &$GLOBALS['wfpl_template']; } else { $template = &$template->ref; } if(strlen($year) == 2) { $year = "20$year"; } $start_timestamp = strtotime("$year-$month-01 00:00"); $cell = 0; $template->set('month_year', strftime('%B', $start_timestamp) . " " . $year); # number of non-day slots at the begining of the month $pre_non_days = date('w', $start_timestamp ); # first display empty cells so the 1st can be in the right column while($cell < $pre_non_days) { calendar_day('nonday', $template); $cell++; } # do the days in this month $days_count = date('t', $start_timestamp ); for($day = 1; $day <= $days_count; $day++ ) { $template->set('day_number', $day); if(($cell + 1) % 7 < 2) { $type = 'weekend'; } else { $type = 'day'; } if($events[$day]) { $template->set('day_page', $events[$day]); calendar_day("busy_$type", $template); } else { calendar_day("empty_$type", $template); } $cell++; if($cell % 7 == 0) { calendar_week($template); } } # fill the rest of the row with empty cells if($cell % 7) { while($cell % 7) { calendar_day('nonday', $template); $cell++; } calendar_week($template); } }