From c19a42a58617867a8e20c7d6e6f8dac69d8512da Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 18 May 2010 15:06:23 +0000 Subject: [PATCH] =?UTF-8?q?backporting=20J=C3=B6rgs=20r30207:=20Special=20?= =?UTF-8?q?Lightning=20CalDAV=20treatment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- calendar/inc/class.calendar_groupdav.inc.php | 11 +++++- calendar/inc/class.calendar_ical.inc.php | 39 ++++++++++++++++---- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/calendar/inc/class.calendar_groupdav.inc.php b/calendar/inc/class.calendar_groupdav.inc.php index ff73b16701..4eeace38e4 100644 --- a/calendar/inc/class.calendar_groupdav.inc.php +++ b/calendar/inc/class.calendar_groupdav.inc.php @@ -531,7 +531,16 @@ error_log(__METHOD__."($path,,".array2string($start).") filter=".array2string($f self::etag2value($this->http_if_match), false, 0, $this->principalURL, $user))) { if ($this->debug) error_log(__METHOD__."(,$id) importVCal($options[content]) returned false"); - return '403 Forbidden'; + if ($eventId && $cal_id === false) + { + // ignore import failures + $cal_id = $eventId; + $retval = true; + } + else + { + return '403 Forbidden'; + } } header('ETag: '.$this->get_etag($cal_id)); diff --git a/calendar/inc/class.calendar_ical.inc.php b/calendar/inc/class.calendar_ical.inc.php index 86d114c107..83acb0bc37 100644 --- a/calendar/inc/class.calendar_ical.inc.php +++ b/calendar/inc/class.calendar_ical.inc.php @@ -823,7 +823,7 @@ class calendar_ical extends calendar_boupdate $attributes['LAST-MODIFIED'] = $modified; } $attributes['DTSTAMP'] = time(); - foreach ($event['alarm'] as $alarmID => $alarmData) + foreach ((array)$event['alarm'] as $alarmID => $alarmData) { // skip over alarms that don't have the minimum required info if (!$alarmData['offset'] && !$alarmData['time']) continue; @@ -864,13 +864,27 @@ class calendar_ical extends calendar_boupdate // RFC requires DESCRIPTION for DISPLAY if (!$event['title'] && !$description) continue; + + if ($this->productName == 'lightning') + { + // return only future alarms to lightning + if (($nextOccurence = $this->read($event['id'], $this->now_su + $alarmData['offset'], false, 'server'))) + { + $alarmData['time'] = $nextOccurence['start'] - $alarmData['offset']; + $alarmData['offset'] = false; + } + else + { + continue; + } + } - if (isset($event['whole_day']) && $alarmData['offset']) + if (!empty($event['whole_day']) && $alarmData['offset']) { $alarmData['time'] = $event['start'] - $alarmData['offset']; $alarmData['offset'] = false; - } - + } + $valarm = Horde_iCalendar::newComponent('VALARM',$vevent); if ($alarmData['offset']) { @@ -1006,7 +1020,7 @@ class calendar_ical extends calendar_boupdate * @param int $user=null account_id of owner, default null * @param string $charset The encoding charset for $text. Defaults to * utf-8 for new format, iso-8859-1 for old format. - * @return int|boolean cal_id > 0 on success, false on failure or 0 for a failed etag + * @return int|boolean cal_id > 0 on success, false on failure or 0 for a failed etag|permission denied */ function importVCal($_vcalData, $cal_id=-1, $etag=null, $merge=false, $recur_date=0, $principalURL='', $user=null, $charset=null) { @@ -1263,7 +1277,7 @@ class calendar_ical extends calendar_boupdate } else { - return false; // no permission + return 0; // no permission } } // check if an owner is set and the current user has add rights @@ -2181,6 +2195,17 @@ class calendar_ical extends calendar_boupdate } return false; } + + $mozillaACK = $component->getAttribute('X-MOZ-LASTACK'); + if (!is_a($mozillaACK, 'PEAR_Error')) + { + if ($this->log) + { + error_log(__FILE__.'['.__LINE__.'] '.__METHOD__.'()' . + "X-MOZ-LASTACK found\n",3,$this->logfile); + } + return false; + } if (!empty($GLOBALS['egw_info']['user']['preferences']['syncml']['minimum_uid_length'])) { @@ -3030,4 +3055,4 @@ class calendar_ical extends calendar_boupdate return $vcal->exportvCalendar($charset); } -} \ No newline at end of file +}