import_ical.php from the WebCalendar project. Author: Daniel Westermann-Clark Author URI: http://dev.webadmin.ufl.edu/~dwc/ */ require('import_ical.php'); if (! class_exists('ICalEvents')) { class ICalEvents { /* * Display up to the specified number of events that fall within * the specified range on the specified calendar. All * constraints are optional. */ function display_events($url, $gmt_start = null, $gmt_end = null, $number_of_events = null, $date_format = '%a %b %e', $time_format = '%l:%M %p', $before = '
$cache_path) needs to be writable for this plugin to work. Double-check it. Deactivate the iCal Events plugin.");
}
}
return $cache_path;
}
/*
* Cache the specified URL and return the name of the
* destination file.
*/
function cache_url($url) {
$filename = ICalEvents::get_cache_path() . basename($url);
if (! file_exists($filename) or time() - filemtime($filename) >= 24 * 60 * 60) {
$src = fopen($url, 'r') or die("Error opening $url");
$dest = fopen($filename, 'w') or die("Error opening $filename");
while ($data = fread($src, 8192)) {
fwrite($dest, $data);
}
fclose($src);
fclose($dest);
}
return $filename;
}
/*
* Constrain the list of events to those which fall between the
* specified start and end time, up to the specified number of
* events.
*/
function constrain($ical, $gmt_start = null, $gmt_end = null, $number_of_events = null) {
$events = array();
$ical = ICalEvents::sort_by_key($ical, 'StartTime');
$count = 0;
foreach ($ical as $event) {
if ((! $gmt_start or $event['StartTime'] >= $gmt_start)
and (! $gmt_end or $event['EndTime'] <= $gmt_end)
and ++$count <= $number_of_events) {
$events[] = $event;
}
}
return $events;
}
/*
* Sort the specified associative array by the specified key.
* Originally from
* http://us2.php.net/manual/en/function.usort.php.
*/
function sort_by_key($data, $key) {
// Reverse sort
$compare = create_function('$a, $b', 'if ($a["' . $key . '"] == $b["' . $key . '"]) { return 0; } else { return ($a["' . $key . '"] < $b["' . $key . '"]) ? -1 : 1; }');
usort($data, $compare);
return $data;
}
/*
* Return a string representing the specified date range.
*/
function format_date_range($gmt_start, $gmt_end, $date_format, $time_format, $separator = ' - ') {
$output = '';
if (ICalEvents::is_today($gmt_start)) {
$output .= strftime($time_format, $gmt_start);
}
else {
$output .= strftime("$date_format $time_format", $gmt_start);
}
if ($gmt_start != $gmt_end) {
$output .= $separator;
if (ICalEvents::is_today($gmt_end) or ICalEvents::is_same_day($gmt_start, $gmt_end)) {
$output .= strftime($time_format, $gmt_end);
}
else {
$output .= strftime("$date_format $time_format", $gmt_end);
}
}
return $output;
}
/*
* Given a time value (as seconds since the epoch), return true
* iff the time falls on the current day.
*/
function is_today($gmt) {
return ICalEvents::is_same_day(time(), $gmt);
}
/*
* Return true iff the two times span exactly 24 hours, from
* midnight one day to midnight the next.
*/
function is_all_day($gmt1, $gmt2) {
$local1 = localtime(($gmt1 <= $gmt2 ? $gmt1 : $gmt2), 1);
$local2 = localtime(($gmt1 <= $gmt2 ? $gmt2 : $gmt1), 1);
return (abs($gmt2 - $gmt1) == 24 * 60 * 60
and $local1['tm_hour'] == $local2['tm_hour']
and $local1['tm_hour'] == 0
and $local1['tm_year'] == $local2['tm_year']);
}
/*
* Return true iff the two specified times fall on the same day.
*/
function is_same_day($gmt1, $gmt2) {
$local1 = localtime($gmt1, 1);
$local2 = localtime($gmt2, 1);
return ($local1['tm_mday'] == $local2['tm_mday']
and $local1['tm_mon'] == $local2['tm_mon']
and $local1['tm_year'] == $local2['tm_year']);
}
/*
* Return a string describing an event with the specified
* summary and description.
*/
function format_event_description($summary, $description, $ignore_tokens = ', . "') {
$output = '';
$clean_summary = str_replace(explode(' ', $ignore_tokens), ' ', $summary);
$clean_description = str_replace(explode(' ', $ignore_tokens), ' ', $description);
if ($description) {
$output .= ": ";
if (strpos($clean_description, $clean_summary) === false) {
$output .= $summary . ". ";
}
$output .= $description;
}
else {
$output .= ": " . $summary;
}
return $output;
}
}
}
?>