From 59e3ffb75995ad2849f0f10e74d5b9c071642d8e Mon Sep 17 00:00:00 2001 From: Jim Hu Date: Sat, 12 Nov 2005 07:57:37 +0000 Subject: fix rss.php bugs and merge multiday events --- rss/rss.php | 63 +++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 14 deletions(-) (limited to 'rss') diff --git a/rss/rss.php b/rss/rss.php index c622745..185b466 100644 --- a/rss/rss.php +++ b/rss/rss.php @@ -9,16 +9,17 @@ * - used below to deal with undef? *********************************************************************************/ define('BASE', '../'); -include(BASE.'functions/ical_parser.php'); -if ($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 = $_GET['rssview']; - -if (!$getdate){$getdate = date("Ymd");} +if (isset($_GET['getdate'])){ + $getdate = $_GET['getdate']; +}else{ + $getdate = date("Ymd"); +} switch ($rssview){ case 'day': @@ -26,6 +27,11 @@ switch ($rssview){ $todate = $getdate; $theview = $lang['l_day']; break; + case 'week': + $fromdate = dateOfWeek($getdate, $week_start_day); + $todate = $fromdate + 6; + $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; @@ -35,13 +41,13 @@ switch ($rssview){ break; case 'daysfrom': $fromdate = $getdate; - $todate = $getdate + $_GET['days']; + $todate = date("Ymd", strtotime($getdate) + $_GET['days']*60*60*24); #print "from:$fromdate to: $todate
"; $theview = $_GET['days']." days from ".date('n/d/Y',strtotime($fromdate)); break; case 'daysto': $todate = $getdate; - $fromdate = $getdate - $_GET['days']; + $fromdate = date("Ymd", strtotime($getdate) - $_GET['days']*60*60*24); #print "from:$fromdate to: $todate
"; $theview = $_GET['days']." days before ".date('n/d/Y',strtotime($todate)); break; @@ -54,9 +60,17 @@ switch ($rssview){ #default to week $fromdate = dateOfWeek($getdate, $week_start_day); $todate = $fromdate + 6; - $theview = $lang['l_week']." of ".date('n/d/Y',strtotime($fromdate)); + $theview = ""; } +#need to give ical_parser the most distant date to correctly set up master_array. +$getdate = $todate; +#echo "from:$fromdate to:$todate"; +include(BASE.'functions/ical_parser.php'); +if ($enable_rss != 'yes') { + die ("RSS feeds are not enabled on this site."); +} + //Set calendar or calendar directory name for feed //Note that this depends on other modifications I've made to //allow phpicalendar to use calendar subdirectories - see bbs @@ -95,7 +109,9 @@ $rss = ""."\n"; $rss .= ''."\n"; $rss .= ''."\n"; $rss .= ''."\n"; -$rss .= ''.$cal_displayname.' - '.$theview.''."\n"; +$rss .= ''.$cal_displayname; +if ($theview !=""){$rss .= ' - '.$theview;} +$rss .= "\n"; $rss .= ''.htmlspecialchars ("$default_path").''."\n"; $rss .= ''.$cal_displayname.' '.$lang['l_calendar'].' - '.$theview.''."\n"; $rss .= ''.$rss_language.''."\n"; @@ -107,15 +123,21 @@ $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 $i = 0; #day counter - +$uid_arr = array(); do { $thisdate=date('Ymd', strtotime($thisdate)); - #echo "Date: $thisdate\n"; + #echo "Date: $thisdate
\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 $val) { + foreach ($event_times as $uid=>$val) { if(!$val["event_start"]){ + if (isset($uid_arr[$uid])){ + $uid_arr[$uid] .= "+$dayofweek" ; + continue; + }else{ + $uid_arr[$uid] = "$dayofweek" ; + } $event_start = "All Day"; }else{ $event_start = @$val["event_start"]; @@ -125,6 +147,7 @@ $i = 0; #day counter $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"])); @@ -135,10 +158,11 @@ $i = 0; #day counter $rss_title = htmlspecialchars ("$dayofweek: $event_text"); $rss_link = htmlspecialchars ("$default_path/day.php?getdate=$thisdate&cal=$cal&cpath=$cpath"); - if ($description == '') $description = $event_text; $rss_description = htmlspecialchars ("$dayofweek $event_start: $description"); $rss .= ''."\n"; + $rss .= ''.$uid.''."\n"; + $rss .= ''.$event_start.''."\n"; $rss .= ''.$rss_title.''."\n"; /* $rss .= ''.$event_start.''."\n"; @@ -173,6 +197,17 @@ $i = 0; #day counter $rss .= '
'."\n"; $rss .= '
'."\n"; +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\nall day","$uid\n$date_range", $rss); + +} header ("Content-Type: text/xml"); echo "$rss"; -- cgit v1.2.3