enable_rss != 'yes') {
die ("RSS feeds are not enabled on this site.");
}
include_once(BASE.'functions/date_functions.php');
//set the range of days to return based on the view chosen
$rssview = $phpiCal_config->default_view;
if (isset($_GET['rssview'])) $rssview = $_GET['rssview'];
if (isset($_GET['getdate']) && $_GET['getdate'] !=''){
$getdate = $_GET['getdate'];
}else{
$getdate = date("Ymd");
}
# for all views, $fromdate is the first day to be shown and $todate should be the last day.
switch ($rssview){
case 'day':
$fromdate = $getdate;
$todate = date("Ymd", strtotime($getdate) + 60*60*24);
$theview = $lang['l_day'];
break;
case 'today':
$fromdate = date("Ymd");
$todate = date("Ymd", strtotime('tomorrow'));
$theview = $lang['l_todays'] ;
break;
case 'tomorrow':
$fromdate = date("Ymd",strtotime('tomorrow'));
$todate = date("Ymd", strtotime('tomorrow') + 60*60*24);
$theview = $lang['l_tomorrows'] ;
break;
case 'week':
$fromdate = dateOfWeek($getdate, 'Sunday');
$todate = date("Ymd", strtotime($fromdate) + 6*24*60*60);
$theview = $lang['l_week']." of ".date('n/d/Y',strtotime($fromdate));
break;
case 'month':
$parse_month = date ("Ym", strtotime($getdate));
$fromdate = ($parse_month *100) + 1;
$todate = ($parse_month *100) + date("t",strtotime($getdate));
$theview = date('M Y',strtotime($fromdate));
break;
case 'year':
if(isset($_GET['year'])){
$theyear = $_GET['year'];
}else{
$theyear = substr($getdate,0,4);
}
$fromdate = ($theyear*10000)+101;
$todate = date("Ymd", strtotime($theyear*10000+1231));
$theview = $theyear;
break;
case 'daysfrom':
$fromdate = $getdate;
$todate = date("Ymd", strtotime($getdate) + $_GET['days']*60*60*24);
$theview = $_GET['days']." days from ".date('n/d/Y',strtotime($fromdate));
break;
case 'daysto':
$todate = $getdate;
$fromdate = date("Ymd", strtotime($getdate) - $_GET['days']*60*60*24);
$theview = $_GET['days']." days before ".date('n/d/Y',strtotime($todate));
break;
case 'range':
if(isset($_GET['from'])){
$fromdate = $_GET['from'];
}else{
$fromdate = $getdate;
}
$todate = $_GET['to'];
$theview = date('n/d/Y',strtotime($fromdate)).'-'.date('n/d/Y',strtotime($todate));
break;
default:
#default to week
$fromdate = dateOfWeek($getdate, 'Sunday');
$todate = date("Ymd", strtotime($fromdate) + 6*24*60*60);
$theview = "";
}
#need to give ical_parser the most distant date to correctly set up master_array.
$getdate = $todate;
#echo "from:$fromdate to:$todate";
#Note that ical_parser supplies cal_displayname.
$current_view = 'rss';
$mArray_begin = strtotime($fromdate);
$mArray_end = strtotime($todate);
include(BASE.'functions/ical_parser.php');
$events_count = 0;
// calculate a value for Last Modified and ETag
$cal = implode(",",$cals);
//get filemtime from master array
$filemod = 0; #default to start of unix era, overwrite with most recent mtime from master array
foreach ($master_array['-4'] as $calinfo){
if ($calinfo['mtime'] > $filemod) $filemod = $calinfo['mtime'];
}
$filemodtime = date("r", $filemod);
//send relevant headers
header ("Last-Modified: $filemodtime");
header ("ETag:\"$filemodtime\"");
// checks the user agents headers to see if they kept track of our
// stuff, if so be nice and send back a 304 and exit.
if ( (@$_SERVER['HTTP_IF_MODIFIED_SINCE'] == $filemodtime) || (@$_SERVER['HTTP_IF_NONE_MATCH'] == $filemodtime)){
header ("HTTP/1.1 304 Not Modified");
exit;
}
/* Change languages to ISO 639-1 to validate RSS without changing long version in config.inc.php */
$user_language = array ("english", "polish", "german", "french", "dutch", "italian", "japanese", "norwegian", "spanish", "swedish", "portuguese", "catalan", "traditional_chinese", "esperanto", "korean");
$iso_language = array ("en", "pl", "de", "fr", "nl", "da", "it", "ja", "no", "es", "sv", "pt", "ca", "zh-tw", "eo", "ko");
$rss_language = str_replace($user_language, $iso_language, $language);
/* End language modification */
$rss = rss_top();
//generate the items
$numdays = round((strtotime($todate) - strtotime($fromdate))/(60*60*24))+1;
$thisdate = $fromdate; # start at beginning of date range,
# note that usage of $thisdate is different from distribution
# I use it as a date, dist uses it as a time
$thistime = strtotime($thisdate);
$i = 1; #day counter
$rss_list = '';
$rss_items = '';
$uid_arr = array();
do {
$thisdate=date('Ymd', $thistime);
# echo "Date: $thisdate\ti:$i\tnumdays:$numdays
\n";
$dayofweek = localizeDate ("%a %b %e %Y", strtotime($thisdate));
if (isset($master_array[($thisdate)]) && sizeof($master_array[($thisdate)]) > 0) {
foreach ($master_array[("$thisdate")] as $event_times) {
foreach ($event_times as $uid=>$val) {
#handle multiday all day events
if(!isset($val["event_start"])){
if (isset($uid_arr[$uid])){
$uid_arr[$uid] .= "+$dayofweek" ;
continue;
}else{
$uid_arr[$uid] = "$dayofweek" ;
}
$event_start = $lang['l_all_day'];
}else{
$event_start = @$val["event_start"];
$event_start = date ($timeFormat, @strtotime ("$event_start"));
}
$event_text = stripslashes(urldecode($val["event_text"]));
$event_text = strip_tags($event_text, '');
$event_text = str_replace('&','&',$event_text);
$event_text = str_replace('&','&',$event_text);
# $event_text = urlencode($event_text);
#uncomment for shorter event text with ...
# $event_text = word_wrap($event_text, 21, $tomorrows_events_lines);
$description = stripslashes(urldecode($val["description"]));
$description = strip_tags($description, '');
$description = str_replace('&','&',$description);
$description = str_replace('&','&',$description);
$rss_title = urldecode ("$dayofweek: $event_text");
$urlcal = rawurlencode ("$cal");
if (isset($rss_link_to_event) && $rss_link_to_event == 'yes'){
$event_data = urlencode(serialize($val));
$rss_link = $phpiCal_config->default_path."/includes/event.php?getdate=$thisdate&cal=$cal&event_data=$event_data";
}else{
$rss_link = ($phpiCal_config->default_path."/day.php?getdate=$thisdate&cal=$urlcal");
}
if (isset($cpath) && $cpath !='') $rss_link.="&cpath=$cpath";
$rss_description = htmlspecialchars ("$dayofweek $event_start: $description");
$rss_list .= rss_li($rss_link,$uid);
$rss_items .= rss_item();
$events_count++;
}
}
}
$thistime = $thistime+(60*60*24); # echo "$thisdate: ".strtotime($thisdate)."->$thistime
\n";
$i++;
} while ($i <= $numdays);
if (($events_count < 1) && ($i == $numdays)) $rss_items = rss_noitems();
$rss_list = enclose_items($rss_list);
$rss .= $rss_list.$rss_items.rss_close();
foreach ($uid_arr as $uid=>$date_range){
#echo "date_range:$date_range
";
if(strpos($date_range,"+")>0){
#echo "+ in date_range
";
$temp = explode("+",$date_range);
$date_range = $temp[0].'-'.array_pop($temp);
}
$rss = str_replace("$uid\n".$lang['l_all_day']."","$uid\n$date_range", $rss);
}
header ("Content-Type: text/xml");
echo "$rss";
?>