diff --git a/htdocs/feed.php b/htdocs/feed.php
index 6c38561a..c59a2f53 100644
--- a/htdocs/feed.php
+++ b/htdocs/feed.php
@@ -50,7 +50,8 @@ function caldav_get_feed( $request ) {
* used as a .ics download for the whole collection, which is what we do also.
*/
$sql = 'SELECT caldav_data, caldav_type, caldav_data.user_no, caldav_data.dav_name,';
- $sql .= ' caldav_data.modified, caldav_data.created';
+ $sql .= ' caldav_data.modified, caldav_data.created, ';
+ $sql .= ' summary, dtstart, dtend, calendar_item.description ';
$sql .= ' FROM collection INNER JOIN caldav_data USING(collection_id) INNER JOIN calendar_item USING ( dav_id ) WHERE ';
if ( isset($c->get_includes_subcollections) && $c->get_includes_subcollections ) {
$sql .= ' (collection.dav_name ~ :path_match ';
@@ -94,44 +95,37 @@ function caldav_get_feed( $request ) {
$need_zones = array();
$timezones = array();
while( $event = $qry->Fetch() ) {
- $ical = new vComponent( $event->caldav_data );
- if ( $ical->GetType() != 'VCALENDAR' ) continue;
-
- $event_data = $ical->GetComponents('VTIMEZONE', false);
- $type = (count($event_data) ? $event_data[0]->GetType() : 'null');
-
- if ( ($type!= 'VEVENT' && $type != 'VTODO' && $type != 'VJOURNAL') ) {
- dbg_error_log( 'feed', 'Skipping peculiar "%s" component in VCALENDAR', $type );
- var_dump($ical);
+ if ( $event->caldav_type != 'VEVENT' && $event->caldav_type != 'VTODO' && $event->caldav_type != 'VJOURNAL') {
+ dbg_error_log( 'feed', 'Skipping peculiar "%s" component in VCALENDAR', $event->caldav_type );
continue;
}
- $is_todo = ($event_data[0]->GetType() == 'VTODO');
+ $is_todo = ($event->caldav_type == 'VTODO');
+
+ $ical = new vComponent( $event->caldav_data );
+ $event_data = $ical->GetComponents('VTIMEZONE', false);
$item = $feed->createEntry();
- $uid = $event_data[0]->GetProperty('UID');
- $item->setId( $c->protocol_server_port_script . ConstructURL($event->dav_name).'#'.$uid );
+ $item->setId( $c->protocol_server_port_script . ConstructURL($event->dav_name) );
$dt_created = new RepeatRuleDateTime( $event->created );
- $dt_modified = new RepeatRuleDateTime( $event->modified );
- if ( isset($dt_created) ) $item->setDateCreated( $dt_created->epoch() );
- if ( isset($dt_modified) ) $item->setDateModified( $dt_modified->epoch() );
+ $item->setDateCreated( $dt_created->epoch() );
- // According to karora, there are cases where we get multiple VEVENTs (overrides). I'll just stick this (1/x) notifier in here until I get to repeat event processing.
- $summary = $event_data[0]->GetProperty('SUMMARY');
- $p_title = (isset($summary) ? $summary->Value() : translate('No summary')) . ' (1/' . (string)count($event_data) . ')';
- $is_todo ? $p_title = "TODO: " . $p_title : $p_title;
+ $dt_modified = new RepeatRuleDateTime( $event->modified );
+ $item->setDateModified( $dt_modified->epoch() );
+
+ $summary = $event->summary;
+ $p_title = ($summary != '' ? $summary : translate('No summary'));
+ if ( $is_todo ) $p_title = "TODO: " . $p_title;
$item->setTitle($p_title);
$content = "";
- $dt_start = $event_data[0]->GetProperty('DTSTART');
+ $dt_start = new RepeatRuleDateTime($event->dtstart);
if ( $dt_start != null ) {
- $dt_start = new RepeatRuleDateTime($dt_start);
$p_time = '' . translate('Time') . ': ' . strftime(translate('%F %T'), $dt_start->epoch());
- $dt_end = $event_data[0]->GetProperty('DTEND');
+ $dt_end = new RepeatRuleDateTime($event->dtend);
if ( $dt_end != null ) {
- $dt_end = new RepeatRuleDateTime($dt_end);
$p_time .= ' - ' . ( $dt_end->AsDate() == $dt_start->AsDate()
? strftime(translate('%T'), $dt_end->epoch())
: strftime(translate('%F %T'), $dt_end->epoch())
@@ -164,13 +158,13 @@ function caldav_get_feed( $request ) {
}
}
- $p_description = $event_data[0]->GetProperty('DESCRIPTION');
- if ( $p_description != null && $p_description->Value() != '' ) {
+ $p_description = $event->description;
+ if ( $p_description != '' ) {
$content .= '
'
.'
'
- .'' . translate('Description') . ':
' . ( nl2br(hyperlink($p_description->Value())) )
+ .'' . translate('Description') . ':
' . ( nl2br(hyperlink($p_description)) )
;
- $item->setDescription($p_description->Value());
+ $item->setDescription($p_description);
}
$item->setContent($content);