diff --git a/inc/WritableCollection.php b/inc/WritableCollection.php index a1bc4258..34e5b802 100644 --- a/inc/WritableCollection.php +++ b/inc/WritableCollection.php @@ -43,6 +43,7 @@ class WritableCollection extends DAVResource { $collection_id = $this->collection_id(); if ( !isset($resources[0]) ) { + dbg_error_log( 'PUT', 'No calendar content!'); rollback_on_error( $caldav_context, $user_no, $this->dav_name.'/'.$segment_name, translate('No calendar content'), 412 ); return false; } @@ -73,10 +74,18 @@ class WritableCollection extends DAVResource { $qry->QDo('SELECT dav_id FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $path)); } if ( $qry->rows() != 1 || !($row = $qry->Fetch()) ) { - // No dav_id? => We're toast! - dbg_error_log( 'PUT', 'No dav_id!!!', $path); - rollback_on_error( $caldav_context, $user_no, $path); - return false; + if ( !$create_resource ) { + // Looks like we will have to create it, even if the caller thought we wouldn't + $qry->QDo('SELECT nextval(\'dav_id_seq\') AS dav_id'); + if ( $qry->rows() != 1 || !($row = $qry->Fetch()) ) { + // No dav_id? => We're toast! + trace_bug( 'No dav_id for "%s" on %s!!!', $path, ($create_resource ? 'create': 'update')); + rollback_on_error( $caldav_context, $user_no, $path); + return false; + } + $create_resource = true; + dbg_error_log( 'PUT', 'Unexpected need to create resource at "%s"', $path); + } } $dav_id = $row->dav_id; @@ -94,14 +103,19 @@ class WritableCollection extends DAVResource { ':weak_etag' => $weak_etag ) ); + if ( !$this->IsSchedulingCollection() && $do_scheduling ) { + if ( do_scheduling_requests($vcal, $create_resource ) ) { + $dav_params[':dav_data'] = $vcal->Render(null, true); + $etag = null; + } + } + if ( $create_resource ) { - if ( !$this->IsSchedulingCollection() && $do_scheduling ) do_scheduling_requests($vcal,true); $sql = 'INSERT INTO caldav_data ( dav_id, user_no, dav_name, dav_etag, caldav_data, caldav_type, logged_user, created, modified, collection_id, weak_etag ) VALUES( :dav_id, :user_no, :dav_name, :etag, :dav_data, :caldav_type, :session_user, current_timestamp, current_timestamp, :collection_id, :weak_etag )'; $dav_params[':collection_id'] = $collection_id; } else { - if ( !$this->IsSchedulingCollection() && $do_scheduling ) do_scheduling_requests($vcal,false); $sql = 'UPDATE caldav_data SET caldav_data=:dav_data, dav_etag=:etag, caldav_type=:caldav_type, logged_user=:session_user, modified=current_timestamp, weak_etag=:weak_etag WHERE dav_id=:dav_id'; } diff --git a/inc/caldav-PUT-functions.php b/inc/caldav-PUT-functions.php index 993be38b..ca2f3aa1 100644 --- a/inc/caldav-PUT-functions.php +++ b/inc/caldav-PUT-functions.php @@ -242,7 +242,8 @@ function handle_schedule_request( $ical ) { $content = $ncal->Render(); $cid = $ar->GetProperty('collection_id'); dbg_error_log('DELIVER', 'to user: %s, to path: %s, collection: %s, from user: %s, caldata %s', $attendee_principal->user_no(), $deliver_path, $cid, $request->user_no, $content ); - write_resource( new DAVResource($deliver_path . $etag . '.ics'), $content, $ar, $request->user_no, md5($content), + $item_etag = md5($content); + write_resource( new DAVResource($deliver_path . $etag . '.ics'), $content, $ar, $request->user_no, $item_etag, $put_action_type='INSERT', $caldav_context=true, $log_action=true, $etag ); $attendee->SetParameterValue ('SCHEDULE-STATUS','1.2;Scheduling message has been delivered'); } @@ -252,7 +253,8 @@ function handle_schedule_request( $ical ) { $content = $ncal->Render(); $deliver_path = $request->principal->internal_url('schedule-inbox'); $ar = new DAVResource($deliver_path); - write_resource( new DAVResource($deliver_path . $etag . '.ics'), $content, $ar, $request->user_no, md5($content), + $item_etag = md5($content); + write_resource( new DAVResource($deliver_path . $etag . '.ics'), $content, $ar, $request->user_no, $item_etag, $put_action_type='INSERT', $caldav_context=true, $log_action=true, $etag ); //$etag = md5($content); header('ETag: "'. $etag . '"' ); @@ -314,69 +316,95 @@ function handle_schedule_reply ( vCalendar $ical ) { * the scheduled user's default calendar. * @param vComponent $resource The VEVENT/VTODO/... resource we are scheduling * @param boolean $create true if the scheduling requests are being created. +* @return true If there was any scheduling action */ -function do_scheduling_requests( vCalendar $resource, $create ) { +function do_scheduling_requests( vCalendar $resource, $create, $old_data = null ) { global $request, $c; - if ( !isset($request) || (isset($c->enable_auto_schedule) && !$c->enable_auto_schedule) ) return; + if ( !isset($request) || (isset($c->enable_auto_schedule) && !$c->enable_auto_schedule) ) return false; if ( ! is_object($resource) ) { - dbg_error_log( 'PUT', 'do_scheduling_requests called with non-object parameter (%s)', gettype($resource) ); - return; + trace_bug( 'do_scheduling_requests called with non-object parameter (%s)', gettype($resource) ); + return false; } + $old_attendees = array(); + if ( !empty($old_data) ) { + $old_resource = new vCalendar($old_data); + $old_attendees = $old_resource->GetAttendees(); + } $attendees = $resource->GetAttendees(); - if ( count($attendees) == 0 ) { + if ( count($attendees) == 0 && count($old_attendees) == 0 ) { dbg_error_log( 'PUT', 'Event has no attendees - no scheduling required.', count($attendees) ); - return; + return false; + } + $removed_attendees = array(); + foreach( $old_attendees AS $attendee ) { + $email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); + if ( $email == $request->principal->email() ) continue; + $removed_attendees[$email] = $attendee; } dbg_error_log( 'PUT', 'Adding to scheduling inbox %d attendees', count($attendees) ); $schedule_request = clone($resource); $schedule_request->AddProperty('METHOD','REQUEST'); + $scheduling_actions = false; foreach( $attendees AS $attendee ) { $email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); if ( $email == $request->principal->email() ) { dbg_error_log( "PUT", "not delivering to owner" ); continue; } + + if ( $create ) { + $attendee_is_new = true; + } + else { + $attendee_is_new = !isset($removed_attendees[$email]); + if ( !$attendee_is_new ) unset($removed_attendees[$email]); + } + $agent = $attendee->GetParameterValue('SCHEDULE-AGENT'); if ( $agent && $agent != 'SERVER' ) { dbg_error_log( "PUT", "not delivering to %s, schedule agent set to value other than server", $email ); continue; } $schedule_target = new Principal('email',$email); + $response = '5.3;'.translate('No scheduling support for user'); if ( $schedule_target->Exists() ) { $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); if ( !$attendee_calendar->Exists() ) { dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"', $attendee_calendar->dav_name(), $schedule_target->username()); - $response = '5.3;'.translate('No scheduling support for user'); - } - else if ( $attendee_calendar->WriteCalendarMember($resource, $create) === false ) { - dbg_error_log('ERROR','Could not write new calendar member to %s', $attendee_calendar->dav_name(), - $attendee_calendar->dav_name(), $schedule_target->username()); - $response = '5.3;'.translate('No scheduling support for user'); } else { $attendee_inbox = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-inbox'))); if ( ! $attendee_inbox->HavePrivilegeTo('schedule-deliver-invite') ) { $response = '3.8;'.translate('No authority to deliver invitations to user.'); } - else if ( $attendee_inbox->WriteCalendarMember($schedule_request, $create) === false ) { - $response = '5.3;'.translate('No scheduling support for user'); - } - else { + else if ( $attendee_inbox->WriteCalendarMember($schedule_request, $attendee_is_new) !== false ) { $response = '2.0;'.translate('Scheduling invitation delivered successfully'); + if ( $attendee_calendar->WriteCalendarMember($resource, $attendee_is_new) === false ) { + dbg_error_log('ERROR','Could not write new calendar member to %s', $attendee_calendar->dav_name(), + $attendee_calendar->dav_name(), $schedule_target->username()); + } } } } - else { - $response = '5.3;'.translate('No scheduling support for user'); - } $schedule_status = '"'.$response.'"'; dbg_error_log( 'PUT', 'Status for attendee <%s> set to "%s"', $attendee->Value(), $schedule_status ); $attendee->SetParameterValue( 'SCHEDULE-STATUS', $schedule_status ); + $scheduling_actions = true; } + + if ( !$create ) { + foreach( $removed_attendees AS $attendee ) { + $schedule_target = new Principal('email',$email); + if ( $schedule_target->Exists() ) { + $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); + } + } + } + return $scheduling_actions; } @@ -729,13 +757,13 @@ function write_attendees( $dav_id, vCalendar $ical ) { * * @return boolean True for success, false for failure. */ -function write_resource( DAVResource $resource, $caldav_data, DAVResource $collection, $author, $etag, $put_action_type, $caldav_context, $log_action=true, $weak_etag=null ) { +function write_resource( DAVResource $resource, $caldav_data, DAVResource $collection, $author, &$etag, $put_action_type, $caldav_context, $log_action=true, $weak_etag=null ) { global $tz_regex, $session; $path = $resource->bound_from(); $user_no = $collection->user_no(); - $ic = new vCalendar( $caldav_data ); - $resources = $ic->GetComponents('VTIMEZONE',false); // Not matching VTIMEZONE + $vcal = new vCalendar( $caldav_data ); + $resources = $vcal->GetComponents('VTIMEZONE',false); // Not matching VTIMEZONE if ( !isset($resources[0]) ) { $resource_type = 'Unknown'; /** @todo Handle writing non-calendar resources, like address book entries or random file data */ @@ -745,7 +773,7 @@ function write_resource( DAVResource $resource, $caldav_data, DAVResource $colle else { $first = $resources[0]; if ( !($first instanceof vComponent) ) { - print $ic->Render(); + print $vcal->Render(); fatal('This is not a vComponent!'); } $resource_type = $first->GetType(); @@ -769,17 +797,19 @@ function write_resource( DAVResource $resource, $caldav_data, DAVResource $colle ); if ( $put_action_type == 'INSERT' ) { - $qry->QDo('SELECT nextval(\'dav_id_seq\') AS dav_id'); + $qry->QDo('SELECT nextval(\'dav_id_seq\') AS dav_id, null AS caldav_data'); } else { - $qry->QDo('SELECT dav_id FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $path)); + $qry->QDo('SELECT dav_id, caldav_data FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $path)); } if ( $qry->rows() != 1 || !($row = $qry->Fetch()) ) { // No dav_id? => We're toast! + trace_bug( 'No dav_id for "%s" on %s!!!', $path, ($create_resource ? 'create': 'update')); rollback_on_error( $caldav_context, $user_no, $path); return false; } $dav_id = $row->dav_id; + $old_dav_data = $row->caldav_data; $dav_params[':dav_id'] = $dav_id; $calitem_params[':dav_id'] = $dav_id; @@ -865,7 +895,7 @@ function write_resource( DAVResource $resource, $caldav_data, DAVResource $colle $last_olson = 'Turkmenikikamukau'; // I really hope this location doesn't exist! $tzid = GetTZID($first); if ( !empty($tzid) ) { - $timezones = $ic->GetComponents('VTIMEZONE'); + $timezones = $vcal->GetComponents('VTIMEZONE'); foreach( $timezones AS $k => $tz ) { if ( $tz->GetPValue('TZID') != $tzid ) { /** @@ -915,9 +945,15 @@ function write_resource( DAVResource $resource, $caldav_data, DAVResource $colle $calitem_params[':percent_complete'] = $first->GetPValue('PERCENT-COMPLETE'); $calitem_params[':status'] = $first->GetPValue('STATUS'); + if ( !$collection->IsSchedulingCollection() ) { + if ( do_scheduling_requests($vcal, ($put_action_type == 'INSERT') ) ) { + $dav_params[':dav_data'] = $vcal->Render(null, true); + $etag = null; + } + } + if ( !isset($dav_params[':modified']) ) $dav_params[':modified'] = 'now'; if ( $put_action_type == 'INSERT' ) { - if ( !$collection->IsSchedulingCollection() ) do_scheduling_requests($ic,true); $sql = 'INSERT INTO caldav_data ( dav_id, user_no, dav_name, dav_etag, caldav_data, caldav_type, logged_user, created, modified, collection_id, weak_etag ) VALUES( :dav_id, :user_no, :dav_name, :etag, :dav_data, :caldav_type, :session_user, :created, :modified, :collection_id, :weak_etag )'; $dav_params[':collection_id'] = $collection_id; @@ -926,7 +962,6 @@ function write_resource( DAVResource $resource, $caldav_data, DAVResource $colle $dav_params[':created'] = (isset($created) && $created != '' ? $created : $dtstamp); } else { - if ( !$collection->IsSchedulingCollection() ) do_scheduling_requests($ic,false); $sql = 'UPDATE caldav_data SET caldav_data=:dav_data, dav_etag=:etag, caldav_type=:caldav_type, logged_user=:session_user, modified=:modified, weak_etag=:weak_etag WHERE dav_id=:dav_id'; } @@ -968,7 +1003,7 @@ EOSQL; } write_alarms($dav_id, $first); - write_attendees($dav_id, $ic); + write_attendees($dav_id, $vcal); if ( $log_action && function_exists('log_caldav_action') ) { log_caldav_action( $put_action_type, $first->GetPValue('UID'), $user_no, $collection_id, $path ); diff --git a/inc/caldav-PUT-vcalendar.php b/inc/caldav-PUT-vcalendar.php index 6452e35d..a06a08bb 100644 --- a/inc/caldav-PUT-vcalendar.php +++ b/inc/caldav-PUT-vcalendar.php @@ -94,6 +94,6 @@ $collection = $dav_resource->GetParentContainer(); write_resource( $dav_resource, $request->raw_post, $collection, $session->user_no, $etag, $put_action_type, true, true ); -header(sprintf('ETag: "%s"', $etag) ); +if ( isset($etag) ) header(sprintf('ETag: "%s"', $etag) ); $request->DoResponse( ($dav_resource->Exists() ? 204 : 201) ); diff --git a/testing/tests/binding/1029-PUT-subcalendar.result b/testing/tests/binding/1029-PUT-subcalendar.result index 48d83fc1..73263ac3 100644 --- a/testing/tests/binding/1029-PUT-subcalendar.result +++ b/testing/tests/binding/1029-PUT-subcalendar.result @@ -2,7 +2,6 @@ HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, calendar-proxy, bind, addressbook, calendar-auto-schedule -ETag: "baad41c9f24bd1ecbdde6e58882df9b7" Content-Length: 0 Content-Type: text/plain; charset="utf-8" diff --git a/testing/tests/binding/1035-GET-mashup.result b/testing/tests/binding/1035-GET-mashup.result index fcd40f3a..1c7f790b 100644 --- a/testing/tests/binding/1035-GET-mashup.result +++ b/testing/tests/binding/1035-GET-mashup.result @@ -2,7 +2,7 @@ HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, calendar-proxy, bind, addressbook, calendar-auto-schedule -Content-Length: 22330 +Content-Length: 22543 Etag: "ae93907cb03bc025b8e733eb61f3a09e" Content-Type: text/calendar; charset="utf-8" @@ -390,14 +390,17 @@ SUMMARY:An invited event. Black tie with pink polka dots is essential. chained to a nearby fence. ORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user1@example.ne t -ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use - r2@example.net -ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use - r3@example.net +ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S + TATUS="2.0\;Scheduling invitation delivered successfully":mailto:user2@e + xample.net +ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S + TATUS="2.0\;Scheduling invitation delivered successfully":mailto:user3@e + xample.net ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use r4@example.net -ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use - r5@example.net +ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S + TATUS="2.0\;Scheduling invitation delivered successfully":mailto:user5@e + xample.net DTSTART:20100322T160000 DTEND:20100322T170000 X-MOZ-GENERATION:3 diff --git a/testing/tests/scheduling/3010-PUT-with-attendees.result b/testing/tests/scheduling/3010-PUT-with-attendees.result index 0a51006b..7912e76e 100644 --- a/testing/tests/scheduling/3010-PUT-with-attendees.result +++ b/testing/tests/scheduling/3010-PUT-with-attendees.result @@ -4,73 +4,19 @@ HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, calendar-proxy, bind, addressbook, calendar-auto-schedule -ETag: "e69b6d5b70189b96126c8993bcf1648a" Content-Length: 0 Content-Type: text/plain; charset="utf-8" - caldav_data: >BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//Apple Inc.//iCal 3.0//EN -CALSCALE:GREGORIAN -BEGIN:VTIMEZONE -TZID:Pacific/Auckland -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:19900318T030000 -RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU -TZNAME:NZST -END:STANDARD -BEGIN:DAYLIGHT -TZOFFSETFROM:+1200 -TZOFFSETTO:+1300 -DTSTART:20070930T020000 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU -TZNAME:NZDT -END:DAYLIGHT -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:20080406T030000 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -TZNAME:NZST -END:STANDARD -END:VTIMEZONE -BEGIN:VEVENT -SEQUENCE:7 -DESCRIPTION:Masses of Lunch will be needed -UID:PUT-attendees -TRANSP:OPAQUE -DTSTART;TZID=Pacific/Auckland:20101123T110000 -DTEND;TZID=Pacific/Auckland:20101123T160000 -DTSTAMP:20101124T221900Z -SUMMARY:Multiple Beard Meeting -CREATED:20071124T221521Z -RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU -ORGANIZER;CN=User 1:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net -END:VEVENT -END:VCALENDAR -< caldav_type: >VEVENT< dav_name: >/user1/home/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >10< - - caldav_data: >BEGIN:VCALENDAR + vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN -METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD @@ -110,193 +56,24 @@ ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS - VP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net + VP=TRUE;CN=User 2;LANGUAGE=en;SCHEDULE-STATUS="2.0\;Scheduling invitatio + n delivered successfully":MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS - VP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net + VP=TRUE;CN=User 3;LANGUAGE=en;SCHEDULE-STATUS="2.0\;Scheduling invitatio + n delivered successfully":MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS - VP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net + VP=TRUE;CN=User 4;LANGUAGE=en;SCHEDULE-STATUS="2.0\;Scheduling invitatio + n delivered successfully":MAILTO:user4@example.net END:VEVENT END:VCALENDAR < - caldav_type: >VEVENT< - dav_name: >/user1/.in/PUT-attendees.ics< - logged_user: >10< - summary: >Multiple Beard Meeting< - user_no: >10< - caldav_data: >BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//Apple Inc.//iCal 3.0//EN -CALSCALE:GREGORIAN -BEGIN:VTIMEZONE -TZID:Pacific/Auckland -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:19900318T030000 -RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU -TZNAME:NZST -END:STANDARD -BEGIN:DAYLIGHT -TZOFFSETFROM:+1200 -TZOFFSETTO:+1300 -DTSTART:20070930T020000 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU -TZNAME:NZDT -END:DAYLIGHT -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:20080406T030000 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -TZNAME:NZST -END:STANDARD -END:VTIMEZONE -BEGIN:VEVENT -SEQUENCE:7 -DESCRIPTION:Masses of Lunch will be needed -UID:PUT-attendees -TRANSP:OPAQUE -DTSTART;TZID=Pacific/Auckland:20101123T110000 -DTEND;TZID=Pacific/Auckland:20101123T160000 -DTSTAMP:20101124T221900Z -SUMMARY:Multiple Beard Meeting -CREATED:20071124T221521Z -RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU -ORGANIZER;CN=User 1:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net -END:VEVENT -END:VCALENDAR -< - caldav_type: >VEVENT< - dav_name: >/user2/home/PUT-attendees.ics< - logged_user: >10< - summary: >Multiple Beard Meeting< - user_no: >11< - - caldav_data: >BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//Apple Inc.//iCal 3.0//EN -CALSCALE:GREGORIAN -METHOD:REQUEST -BEGIN:VTIMEZONE -TZID:Pacific/Auckland -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:19900318T030000 -RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU -TZNAME:NZST -END:STANDARD -BEGIN:DAYLIGHT -TZOFFSETFROM:+1200 -TZOFFSETTO:+1300 -DTSTART:20070930T020000 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU -TZNAME:NZDT -END:DAYLIGHT -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:20080406T030000 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -TZNAME:NZST -END:STANDARD -END:VTIMEZONE -BEGIN:VEVENT -SEQUENCE:7 -DESCRIPTION:Masses of Lunch will be needed -UID:PUT-attendees -TRANSP:OPAQUE -DTSTART;TZID=Pacific/Auckland:20101123T110000 -DTEND;TZID=Pacific/Auckland:20101123T160000 -DTSTAMP:20101124T221900Z -SUMMARY:Multiple Beard Meeting -CREATED:20071124T221521Z -RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU -ORGANIZER;CN=User 1:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS - VP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS - VP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS - VP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS - VP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net -END:VEVENT -END:VCALENDAR -< caldav_type: >VEVENT< dav_name: >/user2/.in/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >11< - - caldav_data: >BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//Apple Inc.//iCal 3.0//EN -CALSCALE:GREGORIAN -BEGIN:VTIMEZONE -TZID:Pacific/Auckland -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:19900318T030000 -RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU -TZNAME:NZST -END:STANDARD -BEGIN:DAYLIGHT -TZOFFSETFROM:+1200 -TZOFFSETTO:+1300 -DTSTART:20070930T020000 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU -TZNAME:NZDT -END:DAYLIGHT -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:20080406T030000 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -TZNAME:NZST -END:STANDARD -END:VTIMEZONE -BEGIN:VEVENT -SEQUENCE:7 -DESCRIPTION:Masses of Lunch will be needed -UID:PUT-attendees -TRANSP:OPAQUE -DTSTART;TZID=Pacific/Auckland:20101123T110000 -DTEND;TZID=Pacific/Auckland:20101123T160000 -DTSTAMP:20101124T221900Z -SUMMARY:Multiple Beard Meeting -CREATED:20071124T221521Z -RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU -ORGANIZER;CN=User 1:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net -END:VEVENT -END:VCALENDAR -< - caldav_type: >VEVENT< - dav_name: >/user3/home/PUT-attendees.ics< - logged_user: >10< - summary: >Multiple Beard Meeting< - user_no: >12< - - caldav_data: >BEGIN:VCALENDAR + vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN @@ -348,70 +125,70 @@ ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS END:VEVENT END:VCALENDAR < + + caldav_type: >VEVENT< + dav_name: >/user2/home/PUT-attendees.ics< + logged_user: >10< + summary: >Multiple Beard Meeting< + user_no: >11< + vcalendar: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 3.0//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:19900318T030000 +RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU +TZNAME:NZST +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +DTSTART:20070930T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +TZNAME:NZDT +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +TZNAME:NZST +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +SEQUENCE:7 +DESCRIPTION:Masses of Lunch will be needed +UID:PUT-attendees +TRANSP:OPAQUE +DTSTART;TZID=Pacific/Auckland:20101123T110000 +DTEND;TZID=Pacific/Auckland:20101123T160000 +DTSTAMP:20101124T221900Z +SUMMARY:Multiple Beard Meeting +CREATED:20071124T221521Z +RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU +ORGANIZER;CN=User 1:MAILTO:user1@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; + RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; + RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; + RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; + RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net +END:VEVENT +END:VCALENDAR +< + caldav_type: >VEVENT< dav_name: >/user3/.in/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >12< - - caldav_data: >BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//Apple Inc.//iCal 3.0//EN -CALSCALE:GREGORIAN -BEGIN:VTIMEZONE -TZID:Pacific/Auckland -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:19900318T030000 -RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU -TZNAME:NZST -END:STANDARD -BEGIN:DAYLIGHT -TZOFFSETFROM:+1200 -TZOFFSETTO:+1300 -DTSTART:20070930T020000 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU -TZNAME:NZDT -END:DAYLIGHT -BEGIN:STANDARD -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:20080406T030000 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -TZNAME:NZST -END:STANDARD -END:VTIMEZONE -BEGIN:VEVENT -SEQUENCE:7 -DESCRIPTION:Masses of Lunch will be needed -UID:PUT-attendees -TRANSP:OPAQUE -DTSTART;TZID=Pacific/Auckland:20101123T110000 -DTEND;TZID=Pacific/Auckland:20101123T160000 -DTSTAMP:20101124T221900Z -SUMMARY:Multiple Beard Meeting -CREATED:20071124T221521Z -RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU -ORGANIZER;CN=User 1:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net -ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; - RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net -END:VEVENT -END:VCALENDAR -< - caldav_type: >VEVENT< - dav_name: >/user4/home/PUT-attendees.ics< - logged_user: >10< - summary: >Multiple Beard Meeting< - user_no: >13< - - caldav_data: >BEGIN:VCALENDAR + vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN @@ -463,13 +240,13 @@ ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS END:VEVENT END:VCALENDAR < + caldav_type: >VEVENT< - dav_name: >/user4/.in/PUT-attendees.ics< + dav_name: >/user3/home/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< - user_no: >13< - - caldav_data: >BEGIN:VCALENDAR + user_no: >12< + vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN @@ -520,9 +297,119 @@ ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; END:VEVENT END:VCALENDAR < + caldav_type: >VEVENT< - dav_name: >/resource2/home/PUT-attendees.ics< + dav_name: >/user4/.in/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< - user_no: >101< + user_no: >13< + vcalendar: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 3.0//EN +CALSCALE:GREGORIAN +METHOD:REQUEST +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:19900318T030000 +RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU +TZNAME:NZST +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +DTSTART:20070930T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +TZNAME:NZDT +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +TZNAME:NZST +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +SEQUENCE:7 +DESCRIPTION:Masses of Lunch will be needed +UID:PUT-attendees +TRANSP:OPAQUE +DTSTART;TZID=Pacific/Auckland:20101123T110000 +DTEND;TZID=Pacific/Auckland:20101123T160000 +DTSTAMP:20101124T221900Z +SUMMARY:Multiple Beard Meeting +CREATED:20071124T221521Z +RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU +ORGANIZER;CN=User 1:MAILTO:user1@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS + VP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS + VP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS + VP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS + VP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net +END:VEVENT +END:VCALENDAR +< + + caldav_type: >VEVENT< + dav_name: >/user4/home/PUT-attendees.ics< + logged_user: >10< + summary: >Multiple Beard Meeting< + user_no: >13< + vcalendar: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 3.0//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:19900318T030000 +RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU +TZNAME:NZST +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +DTSTART:20070930T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +TZNAME:NZDT +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +TZNAME:NZST +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +SEQUENCE:7 +DESCRIPTION:Masses of Lunch will be needed +UID:PUT-attendees +TRANSP:OPAQUE +DTSTART;TZID=Pacific/Auckland:20101123T110000 +DTEND;TZID=Pacific/Auckland:20101123T160000 +DTSTAMP:20101124T221900Z +SUMMARY:Multiple Beard Meeting +CREATED:20071124T221521Z +RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU +ORGANIZER;CN=User 1:MAILTO:user1@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; + RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; + RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; + RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net +ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; + RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net +END:VEVENT +END:VCALENDAR +< diff --git a/testing/tests/scheduling/3010-PUT-with-attendees.test b/testing/tests/scheduling/3010-PUT-with-attendees.test index 3ef227c4..1d0cd9a5 100644 --- a/testing/tests/scheduling/3010-PUT-with-attendees.test +++ b/testing/tests/scheduling/3010-PUT-with-attendees.test @@ -2,7 +2,7 @@ # PUT an event with attendees # TYPE=PUT -URL=http://mycaldav/caldav.php/resource2/home/PUT-attendees.ics +URL=http://mycaldav/caldav.php/user1/home/PUT-attendees.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEAD @@ -64,9 +64,10 @@ ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, - caldav_type, logged_user, caldav_data.caldav_data, + caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) -WHERE calendar_item.uid = 'PUT-attendees'; +WHERE calendar_item.uid = 'PUT-attendees' +ORDER BY caldav_data.dav_id ENDQUERY diff --git a/testing/tests/scheduling/3020-PUT-iCal-no-attendees.result b/testing/tests/scheduling/3020-PUT-iCal-no-attendees.result new file mode 100644 index 00000000..29fe77cc --- /dev/null +++ b/testing/tests/scheduling/3020-PUT-iCal-no-attendees.result @@ -0,0 +1,48 @@ +HTTP/1.1 201 Created +Date: Dow, 01 Jan 2000 00:00:00 GMT +DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule +DAV: extended-mkcol, calendar-proxy, bind, addressbook, calendar-auto-schedule +ETag: "f50eb3ddd963c757b4f63aa12a4f4346" +Content-Length: 0 +Content-Type: text/plain; charset="utf-8" + + + caldav_data: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 4.0.4//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +DTSTART:20070930T020000 +TZNAME:GMT+13:00 +TZOFFSETTO:+1300 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:20080406T030000 +TZNAME:GMT+12:00 +TZOFFSETTO:+1200 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111018T195845Z +UID:E1A13F04-iCal-schedule +DTEND;TZID=Pacific/Auckland:20111019T110000 +TRANSP:OPAQUE +SUMMARY:Meeting with User1 +DTSTART;TZID=Pacific/Auckland:20111019T100000 +DTSTAMP:20111018T195908Z +SEQUENCE:3 +END:VEVENT +END:VCALENDAR +< + caldav_type: >VEVENT< + dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< + logged_user: >20< + summary: >Meeting with User1< + user_no: >20< + diff --git a/testing/tests/scheduling/3020-PUT-iCal-no-attendees.test b/testing/tests/scheduling/3020-PUT-iCal-no-attendees.test new file mode 100644 index 00000000..f1ff4b66 --- /dev/null +++ b/testing/tests/scheduling/3020-PUT-iCal-no-attendees.test @@ -0,0 +1,55 @@ +# +# PUT an event with attendees +# +TYPE=PUT +URL=http://regression.host/caldav.php/manager1/home/E1A13F04-iCal-schedule.ics +HEADER=Content-Type: text/calendar +HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) +HEAD + +AUTH=manager1:manager1 + +BEGINDATA +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 4.0.4//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +DTSTART:20070930T020000 +TZNAME:GMT+13:00 +TZOFFSETTO:+1300 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:20080406T030000 +TZNAME:GMT+12:00 +TZOFFSETTO:+1200 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111018T195845Z +UID:E1A13F04-iCal-schedule +DTEND;TZID=Pacific/Auckland:20111019T110000 +TRANSP:OPAQUE +SUMMARY:Meeting with User1 +DTSTART;TZID=Pacific/Auckland:20111019T100000 +DTSTAMP:20111018T195908Z +SEQUENCE:3 +END:VEVENT +END:VCALENDAR +ENDDATA + + +QUERY +SELECT caldav_data.user_no, caldav_data.dav_name, + caldav_type, logged_user, caldav_data.caldav_data, + summary +FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) +WHERE calendar_item.uid = 'E1A13F04-iCal-schedule'; +ENDQUERY + diff --git a/testing/tests/scheduling/3021-POST-availability.result b/testing/tests/scheduling/3021-POST-availability.result new file mode 100644 index 00000000..9aa472f5 --- /dev/null +++ b/testing/tests/scheduling/3021-POST-availability.result @@ -0,0 +1,46 @@ + + + + + mailto:manager1@example.net + + 2.0;Success + BEGIN:VCALENDAR +PRODID:-//davical.org//NONSGML AWL Calendar//EN +VERSION:2.0 +CALSCALE:GREGORIAN +METHOD:REPLY +BEGIN:VFREEBUSY +DTSTAMP:yyyymmddThhmmssZ +DTSTART:20111018T110000Z +DTEND:20111019T110000Z +FREEBUSY:20111018T210000Z/20111018T220000Z +UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 +ORGANIZER:mailto:manager1@example.net +ATTENDEE:mailto:manager1@example.net +END:VFREEBUSY +END:VCALENDAR + + + + + mailto:user1@example.net + + 2.0;Success + BEGIN:VCALENDAR +PRODID:-//davical.org//NONSGML AWL Calendar//EN +VERSION:2.0 +CALSCALE:GREGORIAN +METHOD:REPLY +BEGIN:VFREEBUSY +DTSTAMP:yyyymmddThhmmssZ +DTSTART:20111018T110000Z +DTEND:20111019T110000Z +UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 +ORGANIZER:mailto:manager1@example.net +ATTENDEE:mailto:user1@example.net +END:VFREEBUSY +END:VCALENDAR + + + diff --git a/testing/tests/scheduling/3021-POST-availability.test b/testing/tests/scheduling/3021-POST-availability.test new file mode 100644 index 00000000..d12444d0 --- /dev/null +++ b/testing/tests/scheduling/3021-POST-availability.test @@ -0,0 +1,36 @@ +# +# Testing for how iCal does a POST for free/busy +# +TYPE=POST +URL=http://regression.host/caldav.php/manager1/.out/ + +HEADER=X-DAViCal-Flush-Cache: true +HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) +HEADER=Originator: mailto:manager1@example.net +HEADER=Recipient: mailto:manager1@example.net, mailto:user1@example.net +HEADER=Content-Type: text/calendar + +AUTH=manager1:manager1 + +BEGINDATA +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +VERSION:2.0 +METHOD:REQUEST +PRODID:-//Apple Inc.//iCal 4.0.4//EN +BEGIN:VFREEBUSY +UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 +DTEND:20111019T110000Z +ATTENDEE:mailto:manager1@example.net +ATTENDEE:mailto:user1@example.net +DTSTART:20111018T110000Z +X-CALENDARSERVER-MASK-UID:E1A13F04-iCal-schedule +DTSTAMP:20111019T085957Z +ORGANIZER:mailto:manager1@example.net +SUMMARY:Availability for mailto:manager1@example.net and mailto:user1@ex + ample.net +END:VFREEBUSY +END:VCALENDAR +ENDDATA + +REPLACE=/DTSTAMP:\d{8}T\d{6}Z/DTSTAMP:yyyymmddThhmmssZ/ diff --git a/testing/tests/scheduling/3022-POST-availability.result b/testing/tests/scheduling/3022-POST-availability.result new file mode 100644 index 00000000..1074bd33 --- /dev/null +++ b/testing/tests/scheduling/3022-POST-availability.result @@ -0,0 +1,47 @@ + + + + + mailto:manager1@example.net + + 2.0;Success + BEGIN:VCALENDAR +PRODID:-//davical.org//NONSGML AWL Calendar//EN +VERSION:2.0 +CALSCALE:GREGORIAN +METHOD:REPLY +BEGIN:VFREEBUSY +DTSTAMP:yyyymmddThhmmssZ +DTSTART:20111024T110000Z +DTEND:20111025T110000Z +UID:01B40176-4934-46AE-9C0A-19ECC41200E6 +ORGANIZER:mailto:manager1@example.net +ATTENDEE:mailto:manager1@example.net +END:VFREEBUSY +END:VCALENDAR + + + + + mailto:user1@example.net + + 2.0;Success + BEGIN:VCALENDAR +PRODID:-//davical.org//NONSGML AWL Calendar//EN +VERSION:2.0 +CALSCALE:GREGORIAN +METHOD:REPLY +BEGIN:VFREEBUSY +DTSTAMP:yyyymmddThhmmssZ +DTSTART:20111024T110000Z +DTEND:20111025T110000Z +FREEBUSY:20111024T184500Z/20111024T193000Z +FREEBUSY:20111024T220000Z/20111025T030000Z +UID:01B40176-4934-46AE-9C0A-19ECC41200E6 +ORGANIZER:mailto:manager1@example.net +ATTENDEE:mailto:user1@example.net +END:VFREEBUSY +END:VCALENDAR + + + diff --git a/testing/tests/scheduling/3022-POST-availability.test b/testing/tests/scheduling/3022-POST-availability.test new file mode 100644 index 00000000..c51a2766 --- /dev/null +++ b/testing/tests/scheduling/3022-POST-availability.test @@ -0,0 +1,36 @@ +# +# Testing for how iCal does a POST for free/busy +# +TYPE=POST +URL=http://regression.host/caldav.php/manager1/.out/ + +HEADER=X-DAViCal-Flush-Cache: true +HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) +HEADER=Originator: mailto:manager1@example.net +HEADER=Recipient: mailto:manager1@example.net, mailto:user1@example.net +HEADER=Content-Type: text/calendar + +AUTH=manager1:manager1 + +BEGINDATA +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +VERSION:2.0 +METHOD:REQUEST +PRODID:-//Apple Inc.//iCal 4.0.4//EN +BEGIN:VFREEBUSY +UID:01B40176-4934-46AE-9C0A-19ECC41200E6 +DTEND:20111025T110000Z +ATTENDEE:mailto:manager1@example.net +ATTENDEE:mailto:user1@example.net +DTSTART:20111024T110000Z +X-CALENDARSERVER-MASK-UID:E1A13F04-iCal-schedule +DTSTAMP:20111019T090043Z +ORGANIZER:mailto:manager1@example.net +SUMMARY:Availability for mailto:manager1@example.net and mailto:user1@ex + ample.net +END:VFREEBUSY +END:VCALENDAR +ENDDATA + +REPLACE=/DTSTAMP:\d{8}T\d{6}Z/DTSTAMP:yyyymmddThhmmssZ/ diff --git a/testing/tests/scheduling/3023-PUT-iCal-with-attendees.result b/testing/tests/scheduling/3023-PUT-iCal-with-attendees.result new file mode 100644 index 00000000..6945797a --- /dev/null +++ b/testing/tests/scheduling/3023-PUT-iCal-with-attendees.result @@ -0,0 +1,54 @@ +HTTP/1.1 204 No Content +Date: Dow, 01 Jan 2000 00:00:00 GMT +DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule +DAV: extended-mkcol, calendar-proxy, bind, addressbook, calendar-auto-schedule +Content-Length: 0 +Content-Type: text/plain; charset="utf-8" + + + caldav_type: >VEVENT< + dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< + logged_user: >20< + summary: >Meeting with User1< + user_no: >20< + vcalendar: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 4.0.4//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +DTSTART:20070930T020000 +TZNAME:GMT+13:00 +TZOFFSETTO:+1300 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:20080406T030000 +TZNAME:GMT+12:00 +TZOFFSETTO:+1200 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111018T195845Z +UID:E1A13F04-iCal-schedule +DTEND;TZID=Pacific/Auckland:20111019T110000 +ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: + mailto:manager1@example.net +ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; + PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS="3. + 8\;No authority to deliver invitations to user.":mailto:user1@example.ne + t +TRANSP:OPAQUE +SUMMARY:Meeting with User1 +DTSTART;TZID=Pacific/Auckland:20111019T100000 +DTSTAMP:20111018T200107Z +ORGANIZER;CN="Manager 1":mailto:manager1@example.net +SEQUENCE:4 +END:VEVENT +END:VCALENDAR +< + diff --git a/testing/tests/scheduling/3023-PUT-iCal-with-attendees.test b/testing/tests/scheduling/3023-PUT-iCal-with-attendees.test new file mode 100644 index 00000000..4fc1da5e --- /dev/null +++ b/testing/tests/scheduling/3023-PUT-iCal-with-attendees.test @@ -0,0 +1,62 @@ +# +# PUT an event with attendees +# +TYPE=PUT +URL=http://regression.host/caldav.php/manager1/home/E1A13F04-iCal-schedule.ics +HEADER=Content-Type: text/calendar +HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) +HEAD + +AUTH=manager1:manager1 + +BEGINDATA +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 4.0.4//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +DTSTART:20070930T020000 +TZNAME:GMT+13:00 +TZOFFSETTO:+1300 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:20080406T030000 +TZNAME:GMT+12:00 +TZOFFSETTO:+1200 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111018T195845Z +UID:E1A13F04-iCal-schedule +DTEND;TZID=Pacific/Auckland:20111019T110000 +ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag + er1@example.net +ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n + et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex + ample.net +TRANSP:OPAQUE +SUMMARY:Meeting with User1 +DTSTART;TZID=Pacific/Auckland:20111019T100000 +DTSTAMP:20111018T200107Z +ORGANIZER;CN="Manager 1":mailto:manager1@example.net +SEQUENCE:4 +END:VEVENT +END:VCALENDAR +ENDDATA + + +QUERY +SELECT caldav_data.user_no, caldav_data.dav_name, + caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", + summary +FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) +WHERE calendar_item.uid = 'E1A13F04-iCal-schedule' +ORDER BY caldav_data.dav_id +ENDQUERY + diff --git a/testing/tests/scheduling/3024-PUT-iCal-with-attendees.result b/testing/tests/scheduling/3024-PUT-iCal-with-attendees.result new file mode 100644 index 00000000..36860e6c --- /dev/null +++ b/testing/tests/scheduling/3024-PUT-iCal-with-attendees.result @@ -0,0 +1,150 @@ +SQL executed successfully. +UPDATE dav_principal + SET default_privileges = privilege_to_bits(ARRAY['schedule-deliver']) + WHERE dav_name = '/user1/' + +HTTP/1.1 204 No Content +Date: Dow, 01 Jan 2000 00:00:00 GMT +DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule +DAV: extended-mkcol, calendar-proxy, bind, addressbook, calendar-auto-schedule +Content-Length: 0 +Content-Type: text/plain; charset="utf-8" + + + caldav_type: >VEVENT< + dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< + logged_user: >20< + summary: >Meeting with User1< + user_no: >20< + vcalendar: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 4.0.4//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +DTSTART:20070930T020000 +TZNAME:GMT+13:00 +TZOFFSETTO:+1300 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:20080406T030000 +TZNAME:GMT+12:00 +TZOFFSETTO:+1200 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111018T195845Z +UID:E1A13F04-iCal-schedule +DTEND;TZID=Pacific/Auckland:20111019T110000 +ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: + mailto:manager1@example.net +ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; + PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS="2. + 0\;Scheduling invitation delivered successfully":mailto:user1@example.ne + t +TRANSP:OPAQUE +SUMMARY:Meeting with User1 +DTSTART;TZID=Pacific/Auckland:20111019T100000 +DTSTAMP:20111018T200107Z +ORGANIZER;CN="Manager 1":mailto:manager1@example.net +SEQUENCE:5 +END:VEVENT +END:VCALENDAR +< + + caldav_type: >VEVENT< + dav_name: >/user1/.in/E1A13F04-iCal-schedule.ics< + logged_user: >20< + summary: >Meeting with User1< + user_no: >10< + vcalendar: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 4.0.4//EN +CALSCALE:GREGORIAN +METHOD:REQUEST +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +DTSTART:20070930T020000 +TZNAME:GMT+13:00 +TZOFFSETTO:+1300 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:20080406T030000 +TZNAME:GMT+12:00 +TZOFFSETTO:+1200 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111018T195845Z +UID:E1A13F04-iCal-schedule +DTEND;TZID=Pacific/Auckland:20111019T110000 +ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag + er1@example.net +ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n + et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex + ample.net +TRANSP:OPAQUE +SUMMARY:Meeting with User1 +DTSTART;TZID=Pacific/Auckland:20111019T100000 +DTSTAMP:20111018T200107Z +ORGANIZER;CN="Manager 1":mailto:manager1@example.net +SEQUENCE:5 +END:VEVENT +END:VCALENDAR +< + + caldav_type: >VEVENT< + dav_name: >/user1/home/E1A13F04-iCal-schedule.ics< + logged_user: >20< + summary: >Meeting with User1< + user_no: >10< + vcalendar: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 4.0.4//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +DTSTART:20070930T020000 +TZNAME:GMT+13:00 +TZOFFSETTO:+1300 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:20080406T030000 +TZNAME:GMT+12:00 +TZOFFSETTO:+1200 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111018T195845Z +UID:E1A13F04-iCal-schedule +DTEND;TZID=Pacific/Auckland:20111019T110000 +ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag + er1@example.net +ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n + et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex + ample.net +TRANSP:OPAQUE +SUMMARY:Meeting with User1 +DTSTART;TZID=Pacific/Auckland:20111019T100000 +DTSTAMP:20111018T200107Z +ORGANIZER;CN="Manager 1":mailto:manager1@example.net +SEQUENCE:5 +END:VEVENT +END:VCALENDAR +< + diff --git a/testing/tests/scheduling/3024-PUT-iCal-with-attendees.test b/testing/tests/scheduling/3024-PUT-iCal-with-attendees.test new file mode 100644 index 00000000..43b82c31 --- /dev/null +++ b/testing/tests/scheduling/3024-PUT-iCal-with-attendees.test @@ -0,0 +1,70 @@ +# +# PUT an event with attendees +# +TYPE=PUT +URL=http://regression.host/caldav.php/manager1/home/E1A13F04-iCal-schedule.ics +HEADER=Content-Type: text/calendar +HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) +HEAD + +AUTH=manager1:manager1 + +# Before we run, this time we'll set schedule-deliver privileges +# on the invitee... +DOSQL +UPDATE dav_principal + SET default_privileges = privilege_to_bits(ARRAY['schedule-deliver']) + WHERE dav_name = '/user1/' +ENDDOSQL + +BEGINDATA +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Apple Inc.//iCal 4.0.4//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +DTSTART:20070930T020000 +TZNAME:GMT+13:00 +TZOFFSETTO:+1300 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:20080406T030000 +TZNAME:GMT+12:00 +TZOFFSETTO:+1200 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111018T195845Z +UID:E1A13F04-iCal-schedule +DTEND;TZID=Pacific/Auckland:20111019T110000 +ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag + er1@example.net +ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n + et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex + ample.net +TRANSP:OPAQUE +SUMMARY:Meeting with User1 +DTSTART;TZID=Pacific/Auckland:20111019T100000 +DTSTAMP:20111018T200107Z +ORGANIZER;CN="Manager 1":mailto:manager1@example.net +SEQUENCE:5 +END:VEVENT +END:VCALENDAR +ENDDATA + + +QUERY +SELECT caldav_data.user_no, caldav_data.dav_name, + caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", + summary +FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) +WHERE calendar_item.uid = 'E1A13F04-iCal-schedule' +ORDER BY caldav_data.dav_id +ENDQUERY +