Merge branch 'master' of git://repo.or.cz/davical into sched

This commit is contained in:
Rob Ostensen 2011-10-07 00:55:29 -05:00
commit c62af7c7a4
97 changed files with 2023 additions and 668 deletions

View File

@ -110,7 +110,6 @@ switch ( $request->method ) {
case 'HEAD': include('caldav-GET.php'); break;
case 'PROPPATCH': include('caldav-PROPPATCH.php'); break;
case 'PUT':
$request->CoerceContentType();
switch( $request->content_type ) {
case 'text/calendar':
include('caldav-PUT-vcalendar.php');

View File

@ -14,7 +14,7 @@ $session = new PublicSession();
param_to_global('action','{[a-z_-]+}');
param_to_global('format','{[a-z]+/[a-zA-Z0-9.+_-]+}');
param_to_global('changesince');
param_to_global('changedsince','{.*}','changesince');
param_to_global('start');
param_to_global('end');
param_to_global('lang');
@ -26,7 +26,7 @@ $request = new CalDAVRequest();
$code_file = sprintf( 'tz/%s.php', $action );
if ( ! @include_once( $code_file ) ) {
$request->PreconditionFailed(400, "supported-action", 'The action "'.$_GET['action'].'" is not understood.' );
$request->PreconditionFailed(400, "supported-action", 'The action "'.$action.'" is not understood.', 'urn:ietf:params:xml:ns:timezone-service' );
}
$request->DoResponse( 500, translate("The application failed to understand that request.") );

View File

@ -17,11 +17,16 @@ if ( ! isset ( $request ) ) {
switch ( $request->path ) {
case '/.well-known/caldav':
case '/.well-known/carddav':
header('Location: ' . ConstructURL('/',true) );
header('Location: ' . $c->protocol_server_port . ConstructURL('/',true) );
$request->DoResponse(301); // Moved permanently
// does not return.
case '/.well-known/timezone':
header('Location: ' . ConstructURL('/tz.php',true) );
$parameters = '';
foreach( $_GET as $k => $v ) {
$parameters .= ($parameters == '' ? '?' : '&' );
$parameters .= $k.'='.rawurlencode($v);
}
header('Location: ' . $c->protocol_server_port . str_replace('/caldav.php', '', ConstructURL('/tz.php',true)).$parameters );
$request->DoResponse(301); // Moved permanently
// does not return.
}

View File

@ -115,7 +115,33 @@ class CalDAVRequest
if ( !isset($this->options['allow_by_email']) ) $this->options['allow_by_email'] = false;
if ( !isset($c->raw_post) ) $c->raw_post = file_get_contents( 'php://input');
$this->raw_post = $c->raw_post;
if ( isset($_SERVER['HTTP_CONTENT_ENCODING']) ) {
@dbg_error_log('caldav', 'Content-Encoding: %s', $_SERVER['HTTP_CONTENT_ENCODING'] );
switch( $_SERVER['HTTP_CONTENT_ENCODING'] ) {
case 'gzip':
$this->raw_post = gzdecode($c->raw_post);
break;
case 'deflate':
$this->raw_post = gzinflate($c->raw_post);
break;
case 'compress':
$this->raw_post = gzuncompress($c->raw_post);
break;
default:
if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || isset($c->dbg['caldav'])) ) {
$fh = fopen('/tmp/raw_post','w');
if ( $fh ) {
fwrite($fh,$request->raw_post);
fclose($fh);
}
}
$this->PreconditionFailed(402, 'content-encoding', 'This server does not presently support content encoded with "%s"', $_SERVER['HTTP_CONTENT_ENCODING']);
}
$c->raw_post = $this->raw_post;
}
else {
$this->raw_post = $c->raw_post;
}
if ( isset($debugging) && isset($_GET['method']) ) {
$_SERVER['REQUEST_METHOD'] = $_GET['method'];
@ -136,14 +162,12 @@ class CalDAVRequest
$this->content_type = 'text/xml';
}
}
else if ( $this->method == 'PUT' || $this->method == 'POST' ) {
$this->CoerceContentType();
}
}
$this->user_agent = ((isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "Probably Mulberry"));
if ( isset($_SERVER['HTTP_CONTENT_ENCODING']) ) {
@dbg_error_log('caldav', 'Content-Encoding: %s', $_SERVER['HTTP_CONTENT_ENCODING']);
$this->PreconditionFailed(402, 'content-encoding', 'This server does not presently support encoded content.');
}
/**
* A variety of requests may set the "Depth" header to control recursion
*/
@ -819,7 +843,11 @@ EOSQL;
if ( isset($this->content_type) ) {
$type = explode( '/', $this->content_type, 2);
/** @todo: Perhaps we should look at the target collection type, also. */
if ( $type[0] == 'text' ) return;
if ( $type[0] == 'text' ) {
if ( !empty($type[2]) && ($type[2] == 'vcard' || $type[2] == 'calendar' || $type[2] == 'x-vcard') ) {
return;
}
}
}
/** Null (or peculiar) content-type supplied so we have to try and work it out... */
@ -845,7 +873,7 @@ EOSQL;
dbg_error_log( 'LOG NOTICE', 'Unusual content-type of "%s" and first word of content is "%s"',
(isset($this->content_type)?$this->content_type:'(null)'), $first_word );
}
$this->content_type = 'text/plain';
if ( empty($this->content_type) ) $this->content_type = 'text/plain';
}
@ -1091,11 +1119,11 @@ EOSQL;
* @param string $precondition The namespaced precondition tag.
* @param string $explanation An optional text explanation for the failure.
*/
function PreconditionFailed( $status, $precondition, $explanation = '') {
function PreconditionFailed( $status, $precondition, $explanation = '', $xmlns='DAV:') {
$xmldoc = sprintf('<?xml version="1.0" encoding="utf-8" ?>
<error xmlns="DAV:">
<error xmlns="%s">
<%s/>%s
</error>', str_replace('DAV::', '', $precondition), $explanation );
</error>', $xmlns, str_replace($xmlns.':', '', $precondition), $explanation );
$this->DoResponse( $status, $xmldoc, 'text/xml; charset="utf-8"' );
exit(0); // Unecessary, but might clarify things

View File

@ -513,6 +513,56 @@ class RepeatRuleDateTime extends DateTime {
}
/**
* This class is used to hold a pair of dates defining a range. The range may be open-ended by including
* a null for one end or the other, or both.
*
* @author Andrew McMillan <andrew@mcmillan.net.nz>
*/
class RepeatRuleDateRange {
public $from;
public $until;
/**
* Construct a new RepeatRuleDateRange which will be the range between $date1 and $date2. The earliest of the two
* dates will be used as the start of the period, the latest as the end. If one of the dates is null then the order
* of the parameters is significant, with the null treated as -infinity if it is first, or +infinity if it is second.
* If both parameters are null then the range is from -infinity to +infinity.
*
* @param RepeatRuleDateTime $date1
* @param RepeatRuleDateTime $date2
*/
function __construct( $date1, $date2 ) {
if ( $date1 != null && $date2 != null && $date1 > $date2 ) {
$this->from = $date2;
$this->until = $date1;
}
else {
$this->from = $date1;
$this->until = $date2;
}
}
/**
* Assess whether this range overlaps the supplied range. null values are treated as infinity.
* @param RepeatRuleDateRange $other
* @return boolean
*/
function overlaps( RepeatRuleDateRange $other ) {
if ( ($this->until == null && $this->from == null) || ($other->until == null && $other->from == null ) ) return true;
if ( $this->until == null && $other->until == null ) return true;
if ( $this->from == null && $other->from == null ) return true;
if ( $this->until == null ) return ($other->until > $this->from);
if ( $this->from == null ) return ($other->from < $this->until);
if ( $other->until == null ) return ($this->until > $other->from);
if ( $other->from == null ) return ($thi->from < $other->until);
return !( $this->until < $other->from || $this->from > $other->until );
}
}
/**
* This class is an implementation of RRULE parsing and expansion, as per RFC5545. It should be reasonably
* complete, except that it does not handle changing the WKST - there may be a few errors in unusual rules
@ -594,6 +644,15 @@ class RepeatRule {
}
/**
* If this repeat rule has an UNTIL= or COUNT= then we can know it will end. Eventually.
* @return boolean Whether or not one of these properties is present.
*/
public function hasLimitedOccurrences() {
return ( isset($this->count) || isset($this->until) );
}
public function set_timezone( $tzstring ) {
$this->base->setTimezone(new DateTimeZone($tzstring));
}
@ -606,7 +665,7 @@ class RepeatRule {
$this->finished = false;
}
public function rewind() {
$this->position = -1;
}
@ -1019,6 +1078,7 @@ class RepeatRule {
}
require_once("vComponent.php");
/**
@ -1104,11 +1164,13 @@ function expand_event_instances( $vResource, $range_start = null, $range_end = n
global $c;
$components = $vResource->GetComponents();
if ( !isset($range_start) ) { $range_start = new RepeatRuleDateTime(); $range_start->modify('-6 weeks'); }
if ( !isset($range_end) ) { $range_end = clone($range_start); $range_end->modify('+6 months'); }
if ( empty($range_start) ) { $range_start = new RepeatRuleDateTime(); $range_start->modify('-6 weeks'); }
if ( empty($range_end) ) {
$range_end = clone($range_start);
$range_end->modify('+6 months');
}
$new_components = array();
$result_limit = 1000;
$instances = array();
$expand = false;
$dtstart = null;
@ -1304,3 +1366,86 @@ function expand_event_instances( $vResource, $range_start = null, $range_end = n
return $vResource;
}
/**
* Return a RepeatRuleDateRange from the earliest start to the latest end of the event.
*
* @todo: This should probably be made part of the VCalendar object when we move the RRule.php into AWL.
*
* @param object $vResource A vComponent which is a VCALENDAR containing components needing expansion
* @return RepeatRuleDateRange Representing the range of time covered by the event.
*/
function getVCalendarRange( $vResource ) {
global $c;
$components = $vResource->GetComponents();
$dtstart = null;
$duration = null;
$earliest_start = null;
$latest_end = null;
$has_repeats = false;
foreach( $components AS $k => $comp ) {
$dtstart_prop = $comp->GetProperty('DTSTART');
$dtend_prop = $comp->GetProperty('DTEND');
$due_prop = $comp->GetProperty('DUE');
if ( isset($dtstart_prop) )
$dtstart = new RepeatRuleDateTime( $dtstart_prop );
else if ( isset($due_prop) )
$dtstart = new RepeatRuleDateTime( $due_prop );
else if ( isset($dtend_prop) )
$dtstart = new RepeatRuleDateTime( $dtend_prop );
else
continue;
$duration_prop = $comp->GetProperty('DURATION');
if ( empty($dtend_prop) ) {
if ( empty($duration_prop) ) {
$duration = new Rfc5545Duration(0);
}
else {
$duration = new Rfc5545Duration($duration_prop->Value());
}
}
else {
$dtend = new RepeatRuleDateTime( $dtend_prop );
$duration = new Rfc5545Duration($dtend->epoch() - $dtstart->epoch());
}
$rrule = $comp->GetProperty('RRULE');
$limited_occurrences = true;
if ( isset($rrule) ) {
$rule = new RepeatRule($dtstart, $rrule);
$limited_occurrences = $rule->hasLimitedOccurrences();
}
if ( $limited_occurrences ) {
$instances = array();
$instances[$dtstart->FloatOrUTC()] = $dtstart;
if ( !isset($range_end) ) {
$range_end = new RepeatRuleDateTime();
$range_end->modify('+150 years');
}
$instances += rrule_expand($dtstart, 'RRULE', $comp, $range_end);
$instances += rdate_expand($dtstart, 'RDATE', $comp, $range_end);
foreach ( rdate_expand($dtstart, 'EXDATE', $comp, $range_end) AS $k => $v ) {
unset($instances[$k]);
}
$instances = array_keys($instances);
asort($instances);
$first = new RepeatRuleDateTime($instances[0]);
$last = new RepeatRuleDateTime($instances[count($instances)-1]);
$last->modify($duration);
if ( empty($earliest_start) || $first < $earliest_start ) $earliest_start = $first;
if ( empty($latest_end) || $last > $latest_end ) $latest_end = $last;
}
else {
if ( empty($earliest_start) || $dtstart < $earliest_start ) $earliest_start = $dtstart;
$latest_end = null;
break;
}
}
return new RepeatRuleDateRange($earliest_start, $latest_end );
}

View File

@ -105,6 +105,9 @@ $lock_opener = $request->FailIfLocked();
if ( $request->method == "LOCK" ) {
dbg_error_log( "LOCK", "Attempting to lock resource '%s'", $request->path);
$lock_timeout = (empty($request->timeout) ? 30 : intval($request->timeout) );
if ( $lock_timeout < 1 ) $lock_timeout = 30;
else if ( $lock_timeout > 300 ) $lock_timeout = 300;
if ( ($lock_token = $request->IsLocked()) ) { // NOTE Assignment in if() is expected here.
$sql = 'UPDATE locks SET start = current_timestamp WHERE opaquelocktoken = :lock_token';
$params = array( ':lock_token' => $lock_token);
@ -123,7 +126,7 @@ if ( $request->method == "LOCK" ) {
':scope' => $lockinfo['scope'],
':request_depth' => $request->depth,
':owner' => $lockinfo['owner'],
':timeout' => $request->timeout.' seconds'
':timeout' => $lock_timeout.' seconds'
);
header( "Lock-Token: <opaquelocktoken:$lock_token>" );
}
@ -136,7 +139,7 @@ if ( $request->method == "LOCK" ) {
new XMLElement( 'lockscope', new XMLElement( $lock_row->scope )),
new XMLElement( 'depth', $request->GetDepthName() ),
new XMLElement( 'owner', new XMLElement( 'href', $lock_row->owner )),
new XMLElement( 'timeout', 'Second-'.$request->timeout),
new XMLElement( 'timeout', 'Second-'.$lock_timeout),
new XMLElement( 'locktoken', new XMLElement( 'href', 'opaquelocktoken:'.$lock_token ))
);
$response = new XMLElement("lockdiscovery", new XMLElement( "activelock", $activelock), array("xmlns" => "DAV:") );

View File

@ -198,7 +198,7 @@ function get_collection_contents( $depth, $collection, $parent_path = null ) {
$sql = 'SELECT collection.*, principal.*, calendar_item.*, caldav_data.*, ';
$sql .= "to_char(coalesce(calendar_item.created, caldav_data.created) at time zone 'GMT',$date_format) AS created, ";
$sql .= "to_char(last_modified at time zone 'GMT',$date_format) AS modified, ";
$sql .= "to_char(coalesce(calendar_item.last_modified, caldav_data.modified) at time zone 'GMT',$date_format) AS modified, ";
$sql .= 'summary AS dav_displayname ';
$sql .= 'FROM caldav_data LEFT JOIN calendar_item USING( dav_id, user_no, dav_name, collection_id) ';
$sql .= 'LEFT JOIN collection USING(collection_id,user_no) LEFT JOIN principal USING(user_no) ';

View File

@ -566,7 +566,11 @@ EOSQL;
if ( $qry->Exec('PUT',__LINE__,__FILE__) && $qry->rows() == 0 ) {
$params[':olson_name'] = $olson;
$params[':vtimezone'] = (isset($tz) ? $tz->Render() : null );
$qry->QDo('INSERT INTO timezones (tzid, olson_name, active, vtimezone) VALUES(:tzid,:olson_name,false,:vtimezone)', $params );
$params[':last_modified'] = (isset($tz) ? $tz->GetPValue('LAST-MODIFIED') : null );
if ( empty($params[':last_modified']) ) {
$params[':last_modified'] = gmdate('Ymd\THis\Z');
}
$qry->QDo('INSERT INTO timezones (tzid, olson_name, active, vtimezone, last_modified) VALUES(:tzid,:olson_name,false,:vtimezone,:last_modified)', $params );
}
}
else {

View File

@ -39,7 +39,7 @@ else {
if ( ! isset($c->readonly_webdav_collections) || $c->readonly_webdav_collections ) {
$request->PreconditionFailed(405,'method-not-allowed',translate('You may not PUT to a collection URL'));
}
$request->DoResponse(403,translate('PUT on a collection is only allowed for text/calendar content against a calendar collection'));
$request->DoResponse(403,translate('PUT on a collection is only allowed for text/vcard content against an addressbook collection'));
}
$dest->NeedPrivilege('DAV::write-content');
}

View File

@ -87,9 +87,9 @@ function apply_filter( $filters, $item ) {
* Process a filter fragment returning an SQL fragment
*/
$need_post_filter = false;
$need_range_filter = false;
$range_filter = null;
function SqlFilterFragment( $filter, $components, $property = null, $parameter = null ) {
global $need_post_filter, $need_range_filter, $target_collection;
global $need_post_filter, $range_filter, $target_collection;
$sql = "";
$params = array();
if ( !is_array($filter) ) {
@ -135,34 +135,33 @@ function SqlFilterFragment( $filter, $components, $property = null, $parameter =
case 'urn:ietf:params:xml:ns:caldav:time-range':
/**
* @todo We should probably allow time range queries against other properties, since eventually some client may want to do this.
* @todo We should probably allow time range queries against other properties, since
* eventually some client may want to do this.
*/
$start_column = ($components[sizeof($components)-1] == 'VTODO' ? "due" : 'dtend'); // The column we compare against the START attribute
$finish_column = 'dtstart'; // The column we compare against the END attribute
$start = $v->GetAttribute("start");
$finish = $v->GetAttribute("end");
// if ( isset($start) || isset($finish) ) {
// $sql .= ' AND (rrule_event_overlaps( dtstart, dtend, rrule, :time_range_start, :time_range_end ) OR event_has_exceptions(caldav_data.caldav_data) ) ';
// $params[':time_range_start'] = $start;
// $params[':time_range_end'] = $finish;
// }
$start_sql = $finish_sql = '';
if ( isset($start) ) {
$params[':time_range_start'] = $start;
$start_sql .= ' ((dtend IS NULL AND dtstart > :time_range_start) OR dtend > :time_range_start) ';
$start_sql .= ' (('.$start_column.' IS NULL AND '.$finish_column.' > :time_range_start) OR '.$start_column.' > :time_range_start) ';
}
if ( isset($finish) ) {
$params[':time_range_end'] = $finish;
$finish_sql = ' dtstart < :time_range_end ';
$finish_sql = ' '.$finish_column.' < :time_range_end ';
}
if ( isset($start) || isset($finish) ) {
$sql .= ' AND (rrule IS NOT NULL OR dtstart IS NULL OR (';
$sql .= ' AND (rrule IS NOT NULL OR '.$finish_column.' IS NULL OR (';
if ( isset($start) ) $sql .= $start_sql;
if ( isset($start) && isset($finish) ) $sql .= ' AND ';
if ( isset($finish) ) $sql .= $finish_sql;
$sql .= '))';
}
$need_range_filter = array(new RepeatRuleDateTime($start),new RepeatRuleDateTime($finish));
@dbg_error_log('calquery', 'filter-sql: %s', $sql);
@dbg_error_log('calquery', 'time-range-start: %s, time-range-end: %s, ', $params[':time_range_start'], $params[':time_range_end']);
$range_filter = new RepeatRuleDateRange((empty($start) ? null : new RepeatRuleDateTime($start)),
(empty($finish)? null : new RepeatRuleDateTime($finish)));
break;
case 'urn:ietf:params:xml:ns:caldav:text-match':
@ -346,10 +345,12 @@ if ( $qry->Exec("calquery",__LINE__,__FILE__) && $qry->rows() > 0 ) {
if ( $expanded->ComponentCount() == 0 ) continue;
if ( $need_expansion ) $calendar_object->caldav_data = $expanded->Render();
}
else if ( $need_range_filter ) {
else if ( isset($range_filter) ) {
$vResource = new vComponent($calendar_object->caldav_data);
$expanded = expand_event_instances($vResource, $need_range_filter[0], $need_range_filter[1]);
if ( $expanded->ComponentCount() == 0 ) continue;
$expanded = getVCalendarRange($vResource);
dbg_error_log('calquery', 'Expanded to %s:%s which might overlap %s:%s',
$expanded->from, $expanded->until, $range_filter->from, $range_filter->until );
if ( !$expanded->overlaps($range_filter) ) continue;
}
$responses[] = calendar_to_xml( $properties, $calendar_object );
}

View File

@ -14,21 +14,21 @@ require_once('RRule-v2.php');
if ( empty($format) ) $format = 'text/calendar';
if ( $format != 'text/calendar' ) {
$request->PreconditionFailed(403, 'supported-format', 'This server currently only supports text/calendar format.');
$request->PreconditionFailed(403, 'supported-format', 'This server currently only supports text/calendar format.', 'urn:ietf:params:xml:ns:timezone-service' );
}
if ( empty($start) ) $start = sprintf( '%04d-01-01', date('Y'));
if ( empty($end) ) $end = sprintf( '%04d-12-31', date('Y') + 10);
$sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, ';
$sql .= 'to_char(last_modified AT TIME ZONE \'UTC\',\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
$sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
$sql .= 'FROM timezones WHERE tzid=:tzid';
$params = array( ':tzid' => $tzid );
$qry = new AwlQuery($sql,$params);
if ( !$qry->Exec() ) exit(1);
if ( $qry->rows() < 1 ) {
$sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, ';
$sql .= 'to_char(last_modified AT TIME ZONE \'UTC\',\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
$sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
$sql .= 'FROM timezones JOIN tz_aliases USING(our_tzno) WHERE tzalias=:tzid';
if ( !$qry->Exec() ) exit(1);
if ( $qry->rows() < 1 ) $request->DoResponse(404);
@ -163,7 +163,14 @@ $vtz = new vCalendar($tz->vtimezone);
$response = new XMLDocument(array("urn:ietf:params:xml:ns:timezone-service" => ""));
$timezones = $response->NewXMLElement('urn:ietf:params:xml:ns:timezone-service:timezones');
$timezones->NewElement('dtstamp', gmdate('Y-m-d\TH:i:s\Z'));
$qry = new AwlQuery('SELECT to_char(max(last_modified),\'YYYY-MM-DD\"T\"HH24:MI:SS"Z"\') AS dtstamp FROM timezones');
if ( $qry->Exec('tz/list',__LINE__,__FILE__) && $qry->rows() > 0 ) {
$row = $qry->Fetch();
$timezones->NewElement('dtstamp', $row->dtstamp);
}
else {
$timezones->NewElement('dtstamp', gmdate('Y-m-d\TH:i:s\Z'));
}
$from = new RepeatRuleDateTime($start);
$until = new RepeatRuleDateTime($end);

View File

@ -13,18 +13,18 @@ require_once('vCalendar.php');
if ( empty($format) ) $format = 'text/calendar';
if ( $format != 'text/calendar' ) {
$request->PreconditionFailed(403, 'supported-format', 'This server currently only supports text/calendar format.');
$request->PreconditionFailed(403, 'supported-format', 'This server currently only supports text/calendar format.', 'urn:ietf:params:xml:ns:timezone-service');
}
$sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, ';
$sql .= 'to_char(last_modified AT TIME ZONE \'UTC\',\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
$sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
$sql .= 'FROM timezones WHERE tzid=:tzid';
$params = array( ':tzid' => $tzid );
$qry = new AwlQuery($sql,$params);
if ( !$qry->Exec() ) exit(1);
if ( $qry->rows() < 1 ) {
$sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, ';
$sql .= 'to_char(last_modified AT TIME ZONE \'UTC\',\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
$sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
$sql .= 'FROM timezones JOIN tz_aliases USING(our_tzno) WHERE tzalias=:tzid';
if ( !$qry->Exec() ) exit(1);
if ( $qry->rows() < 1 ) $request->DoResponse(404);
@ -44,8 +44,9 @@ if ( $qry->QDo('SELECT * FROM tz_localnames WHERE our_tzno = :our_tzno', array('
}
header( 'ETag: "'.$tz->etag.'"' );
header( 'Last-Modified', $tz->last_modified );
header( 'Last-Modified: '. $tz->last_modified );
header( 'Content-Disposition: Attachment; Filename="'.str_replace('/','-',$tzid . '.ics"' ));
$request->DoResponse(200, $vtz->Render(), 'text/calendar');
$request->DoResponse(200, $vtz->Render(), 'text/calendar; charset=UTF-8');
exit(0);
exit(0);

View File

@ -13,9 +13,16 @@ require_once('vComponent.php');
$response = new XMLDocument( array("urn:ietf:params:xml:ns:timezone-service" => "") );
$tzlist = $response->NewXMLElement('timezone-list');
$tzlist->NewElement('dtstamp', gmdate('Y-m-d\TH:i:s\Z'));
$qry = new AwlQuery('SELECT to_char(max(last_modified),\'YYYY-MM-DD\"T\"HH24:MI:SS"Z"\') AS dtstamp FROM timezones');
if ( $qry->Exec('tz/list',__LINE__,__FILE__) && $qry->rows() > 0 ) {
$row = $qry->Fetch();
$tzlist->NewElement('dtstamp', $row->dtstamp);
}
else {
$tzlist->NewElement('dtstamp', gmdate('Y-m-d\TH:i:s\Z'));
}
$sql = 'SELECT our_tzno, tzid, active, to_char(last_modified AT TIME ZONE \'UTC\',\'YYYY-MM-DD\"T\"HH24:MI:SS"Z"\') AS last_modified, olson_name, vtimezone FROM timezones';
$sql = 'SELECT our_tzno, tzid, active, to_char(last_modified,\'YYYY-MM-DD\"T\"HH24:MI:SS"Z"\') AS last_modified, olson_name, vtimezone FROM timezones';
$params = array();
$where = '';
if ( $returnall !== true ) {
@ -23,9 +30,14 @@ if ( $returnall !== true ) {
}
if ( !empty($changedsince) ) {
if ( !empty($where) ) $where .= ' AND ';
$where .= 'last_modified >= :changedsince';
$where .= 'last_modified > :changedsince';
$params[':changedsince'] = $changedsince;
}
if ( !empty($tzid) ) {
if ( !empty($where) ) $where .= ' AND ';
$where .= '(tzid = :tzid OR our_tzno IN (SELECT our_tzno FROM tz_aliases WHERE tzalias = :tzid))';
$params[':tzid'] = $tzid;
}
if ( !empty($where)) $sql .= ' WHERE '.$where;
if ( !empty($c->strict_result_ordering) && $c->strict_result_ordering ) {
@ -67,7 +79,7 @@ if ( $qry->Exec('tz/list',__LINE__,__FILE__) && $qry->rows() > 0 ) {
}
}
else {
$elements[] = new XMLElement('local-name', $tz->tzid, array( 'lang' => $lang ) );
$elements[] = new XMLElement('local-name', $tz->tzid, ( empty($lang) ? null : array( 'lang' => $lang ) ) );
}
$tzlist->NewElement('summary', $elements);
}

View File

@ -159,7 +159,7 @@ if ( empty($c->tzsource) ) $c->tzsource = '../zonedb/vtimezones';
if ( preg_match('{^http}', $c->tzsource ) ) {
$changesince = null;
$qry = new AwlQuery("SELECT tzid, to_char(last_modified,'YYYY-MM-DD\"T\"HH24:MI:SS') AS last_modified FROM timezones");
$qry = new AwlQuery("SELECT tzid, to_char(last_modified,'YYYY-MM-DD\"T\"HH24:MI:SS\"Z\"') AS last_modified FROM timezones");
$current_zones = array();
if ( $qry->Exec('tz/updatecheck',__LINE__,__FILE__) && $qry->rows() > 0 ) {
while( $row = $qry->Fetch() )

View File

@ -7,7 +7,7 @@ Content-Length: 0
Content-Type: text/plain; charset="utf-8"
bind_id: >1599<
bind_id: >1602<
bound_source_id: >11<
dav_displayname: >User 2's Calendar, as uploaded by Admin<
dav_name: >/user4/user2/<

View File

@ -9,7 +9,7 @@ Content-Type: text/xml; charset="utf-8"
<error xmlns="DAV:">
<can-overwrite/>A resource already exists at the destination.
</error>
bind_id: >1599<
bind_id: >1602<
bound_source_id: >11<
dav_displayname: >User 2's Calendar, as uploaded by Admin<
dav_name: >/user4/user2/<

View File

@ -58,6 +58,24 @@
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user4/addresses/</href>
<propstat>
<prop>
<displayname>user4 addresses</displayname>
<resource-id>
<href>/caldav.php/.resources/63</href>
</resource-id>
<parent-set>
<parent>
<href>/caldav.php</href>
<segment>user4</segment>
</parent>
</parent-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user4/nz_holidays/</href>
<propstat>
@ -100,7 +118,7 @@
<prop>
<displayname>User 4 Outbox</displayname>
<resource-id>
<href>/caldav.php/.resources/1597</href>
<href>/caldav.php/.resources/1600</href>
</resource-id>
<parent-set>
<parent>

View File

@ -7,14 +7,14 @@ Content-Length: 0
Content-Type: text/plain; charset="utf-8"
bind_id: >1599<
bind_id: >1602<
bound_source_id: >11<
dav_displayname: >Updated Displayname with PROPPATCH<
dav_name: >/user4/user2/<
parent_container: >/user4/<
ticket_id_length: >8<
bind_id: >1600<
bind_id: >1603<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/user1/<

View File

@ -7,21 +7,21 @@ Content-Length: 0
Content-Type: text/plain; charset="utf-8"
bind_id: >1599<
bind_id: >1602<
bound_source_id: >11<
dav_displayname: >Updated Displayname with PROPPATCH<
dav_name: >/user4/user2/<
length: >8<
parent_container: >/user4/<
bind_id: >1600<
bind_id: >1603<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/user1/<
length: >8<
parent_container: >/user4/<
bind_id: >1604<
bind_id: >1607<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/base/user1/<

View File

@ -7,28 +7,28 @@ Content-Length: 0
Content-Type: text/plain; charset="utf-8"
bind_id: >1599<
bind_id: >1602<
bound_source_id: >11<
dav_displayname: >Updated Displayname with PROPPATCH<
dav_name: >/user4/user2/<
length: >8<
parent_container: >/user4/<
bind_id: >1600<
bind_id: >1603<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/user1/<
length: >8<
parent_container: >/user4/<
bind_id: >1604<
bind_id: >1607<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/base/user1/<
length: >8<
parent_container: >/user4/base/<
bind_id: >1605<
bind_id: >1608<
bound_source_id: >11<
dav_displayname: >User 2's Calendar, as uploaded by Admin<
dav_name: >/user4/base/user2/<

View File

@ -9,28 +9,28 @@ Content-Type: text/xml; charset="utf-8"
<error xmlns="DAV:">
<can-overwrite/>A resource already exists at the destination.
</error>
bind_id: >1599<
bind_id: >1602<
bound_source_id: >11<
dav_displayname: >Updated Displayname with PROPPATCH<
dav_name: >/user4/user2/<
length: >8<
parent_container: >/user4/<
bind_id: >1600<
bind_id: >1603<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/user1/<
length: >8<
parent_container: >/user4/<
bind_id: >1604<
bind_id: >1607<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/base/user1/<
length: >8<
parent_container: >/user4/base/<
bind_id: >1605<
bind_id: >1608<
bound_source_id: >11<
dav_displayname: >User 2's Calendar, as uploaded by Admin<
dav_name: >/user4/base/user2/<

View File

@ -6,7 +6,7 @@
<prop>
<displayname>A normal collection</displayname>
<resource-id>
<href>/caldav.php/.resources/1602</href>
<href>/caldav.php/.resources/1605</href>
</resource-id>
<parent-set>
<parent>
@ -90,7 +90,7 @@
<prop>
<displayname>A sub collection</displayname>
<resource-id>
<href>/caldav.php/.resources/1603</href>
<href>/caldav.php/.resources/1606</href>
</resource-id>
<parent-set>
<parent>

View File

@ -6,7 +6,7 @@
<prop>
<displayname>A normal collection</displayname>
<resource-id>
<href>/caldav.php/.resources/1602</href>
<href>/caldav.php/.resources/1605</href>
</resource-id>
<parent-set>
<parent>

View File

@ -7,7 +7,7 @@ Content-Length: 0
Content-Type: text/plain; charset="utf-8"
bind_id: >1599<
bind_id: >1602<
bind_owner: >1005<
bound_source_id: >11<
dav_displayname: >Updated Displayname with PROPPATCH<
@ -19,7 +19,7 @@ target_collection: >11<
target_resource_i: >NULL<
ticket_owner: >1003<
bind_id: >1600<
bind_id: >1603<
bind_owner: >1005<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
@ -31,7 +31,7 @@ target_collection: >10<
target_resource_i: >NULL<
ticket_owner: >1002<
bind_id: >1604<
bind_id: >1607<
bind_owner: >1005<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
@ -43,7 +43,7 @@ target_collection: >10<
target_resource_i: >NULL<
ticket_owner: >1002<
bind_id: >1605<
bind_id: >1608<
bind_owner: >1005<
bound_source_id: >11<
dav_displayname: >User 2's Calendar, as uploaded by Admin<
@ -55,7 +55,7 @@ target_collection: >11<
target_resource_i: >NULL<
ticket_owner: >1003<
bind_id: >1626<
bind_id: >1629<
bind_owner: >1<
bound_source_id: >12<
dav_displayname: >user3 home<

View File

@ -6,14 +6,14 @@ Content-Length: 0
Content-Type: text/plain; charset="utf-8"
bind_id: >1604<
bind_id: >1607<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/base/user1/<
dav_owner_id: >1005<
parent_container: >/user4/base/<
bind_id: >1605<
bind_id: >1608<
bound_source_id: >11<
dav_displayname: >User 2's Calendar, as uploaded by Admin<
dav_name: >/user4/base/user2/<

View File

@ -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: 21618
Content-Length: 22330
Etag: "ae93907cb03bc025b8e733eb61f3a09e"
Content-Type: text/calendar; charset="utf-8"
@ -108,13 +108,9 @@ END:VEVENT
BEGIN:VEVENT
UID:20061101T073000Z-10468-1000-1-7@ubu
DTSTAMP:20061101T073000Z
DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061
101T100000
DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006110
1T110000
SUMMARY:A Meeting
X-EVOLUTION-CALDAV-HREF:http://user1@mycaldav/caldav.php/user1/home/2006
1101T073004Z.ics
DTSTART;TZID=Pacific/Auckland:20061101T100000
DTEND;TZID=Pacific/Auckland:20061101T110000
SUMMARY:A Changed Meeting
BEGIN:VALARM
X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu
ACTION:DISPLAY
@ -313,6 +309,26 @@ DTSTAMP:20091006T225808Z
SEQUENCE:1
END:VEVENT
BEGIN:VEVENT
CREATED:20111004T153507Z
UID:0544-gzip-PUT
TRANSP:OPAQUE
SUMMARY:In Central Europe, 2pm, Oct 5th for 1 hour
DTSTART;TZID=Somewhere_in_Central_Europe:20111005T140000
DTEND;TZID=Somewhere_in_Central_Europe:20111005T150000
DTSTAMP:20111004T153507Z
SEQUENCE:1
END:VEVENT
BEGIN:VEVENT
CREATED:20111004T153507Z
UID:0545-deflate-PUT
TRANSP:OPAQUE
SUMMARY:In Prague, 10am, Oct 7th for 1 hour
DTSTART;TZID=Prague_in_Central_Europe:20111007T100000
DURATION:PT1H
DTSTAMP:20111004T153507Z
SEQUENCE:1
END:VEVENT
BEGIN:VEVENT
DESCRIPTION:Have a party. All the best parties are monthly!
UID:DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74
DTSTAMP:20081024T220925Z
@ -618,24 +634,6 @@ TZOFFSETTO:+1200
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
TZNAME:NZST
DTSTART:19700315T030000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
TZNAME:NZDT
DTSTART:19701004T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:/mozilla.org/20050126_1/Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
BEGIN:STANDARD
@ -706,4 +704,40 @@ TZNAME:GMT+01:00
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Somewhere_in_Central_Europe
X-MICROSOFT-CDO-TZID:4
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:GMT+02:00
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:GMT+01:00
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Prague_in_Central_Europe
X-MICROSOFT-CDO-TZID:4
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:GMT+02:00
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:GMT+01:00
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

View File

@ -7,36 +7,36 @@ Content-Length: 0
Content-Type: text/plain; charset="utf-8"
bind_id: >1599<
bind_id: >1602<
bound_source_id: >11<
dav_displayname: >Updated Displayname with PROPPATCH<
dav_name: >/user4/user2/<
length: >8<
parent_container: >/user4/<
bind_id: >1600<
bind_id: >1603<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/user1/<
length: >8<
parent_container: >/user4/<
bind_id: >1604<
bind_id: >1607<
bound_source_id: >10<
dav_displayname: >User 1's Calendaranza<
dav_name: >/user4/base/user1/<
length: >8<
parent_container: >/user4/base/<
bind_id: >1605<
bind_id: >1608<
bound_source_id: >11<
dav_displayname: >User 2's Calendar, as uploaded by Admin<
dav_name: >/user4/base/user2/<
length: >8<
parent_container: >/user4/base/<
bind_id: >1627<
bound_source_id: >1602<
bind_id: >1630<
bound_source_id: >1605<
dav_displayname: >A normal collection<
dav_name: >/user4/boundbase/<
length: >NULL<

View File

@ -6,7 +6,7 @@
<prop>
<displayname>A normal collection</displayname>
<resource-id>
<href>/caldav.php/.resources/1602</href>
<href>/caldav.php/.resources/1605</href>
</resource-id>
<parent-set>
<parent>
@ -90,7 +90,7 @@
<prop>
<displayname>A sub collection</displayname>
<resource-id>
<href>/caldav.php/.resources/1603</href>
<href>/caldav.php/.resources/1606</href>
</resource-id>
<parent-set>
<parent>
@ -112,7 +112,7 @@
<prop>
<displayname>newcalendar</displayname>
<resource-id>
<href>/caldav.php/.resources/1616</href>
<href>/caldav.php/.resources/1619</href>
</resource-id>
<parent-set>
<parent>

View File

@ -6,7 +6,7 @@
<prop>
<displayname>A normal collection</displayname>
<resource-id>
<href>/caldav.php/.resources/1602</href>
<href>/caldav.php/.resources/1605</href>
</resource-id>
<parent-set>
<parent>
@ -99,7 +99,7 @@
<prop>
<displayname>A sub collection</displayname>
<resource-id>
<href>/caldav.php/.resources/1603</href>
<href>/caldav.php/.resources/1606</href>
</resource-id>
<parent-set>
<parent>
@ -125,7 +125,7 @@
<prop>
<displayname>newcalendar</displayname>
<resource-id>
<href>/caldav.php/.resources/1616</href>
<href>/caldav.php/.resources/1619</href>
</resource-id>
<parent-set>
<parent>

View File

@ -1,6 +1,6 @@
setval
--------
1598
1601
(1 row)
setval
@ -30,7 +30,7 @@
setval
--------
11
13
(1 row)
setval

View File

@ -2,7 +2,7 @@ HTTP/1.1 403 Forbidden
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: 91
Content-Length: 92
Content-Type: text/plain; charset="utf-8"
PUT on a collection is only allowed for text/calendar content against a calendar collection
PUT on a collection is only allowed for text/vcard content against an addressbook collection

View File

@ -1,6 +1,6 @@
HTTP/1.1 301 Moved Permanently
Date: Dow, 01 Jan 2000 00:00:00 GMT
Location: /caldav.php/
Location: http://mycaldav/caldav.php/
Content-Length: 0
Content-Type: text/plain; charset="utf-8"

View File

@ -1,6 +1,6 @@
HTTP/1.1 301 Moved Permanently
Date: Dow, 01 Jan 2000 00:00:00 GMT
Location: /caldav.php/
Location: http://mycaldav/caldav.php/
Content-Length: 0
Content-Type: text/plain; charset="utf-8"

View File

@ -0,0 +1,33 @@
HTTP/1.1 207 Multi-Status
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: "c407a846b30b1e658173c72fab664629"
Content-Length: 636
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:A="http://apache.org/dav/props/" xmlns:C="urn:ietf:params:xml:ns:carddav">
<response>
<href>/caldav.php/user3/addresses/</href>
<propstat>
<prop>
<getlastmodified>Sun, 15 Mar 1998 12:00:00 GMT</getlastmodified>
<resourcetype>
<collection/>
<C:addressbook/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<getcontentlength/>
<A:executable/>
<checked-in/>
<checked-out/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
</multistatus>

View File

@ -0,0 +1,25 @@
#
# PROPFIND on addressbook resource
#
TYPE=PROPFIND
URL=http://regression.host/caldav.php/user3/addresses/
HEADER=User-Agent: cadaver/0.23.3 neon/0.29.6
HEADER=Content-Type: application/xml
HEADER=Depth: 1
HEAD
AUTH=user3:user3
BEGINDATA
<?xml version="1.0" encoding="utf-8"?>
<propfind xmlns="DAV:"><prop>
<getcontentlength xmlns="DAV:"/>
<getlastmodified xmlns="DAV:"/>
<executable xmlns="http://apache.org/dav/props/"/>
<resourcetype xmlns="DAV:"/>
<checked-in xmlns="DAV:"/>
<checked-out xmlns="DAV:"/>
</prop></propfind>
ENDDATA

View File

@ -1,6 +1,6 @@
setval
--------
1627
1630
(1 row)
setval
@ -30,7 +30,7 @@
setval
--------
11
13
(1 row)
setval

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "f7655907e64525c7ecaa409f800e8f8b"
Content-Length: 1805
ETag: "6224e345c323da0dfc00689c21171119"
Content-Length: 2254
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="http://calendarserver.org/ns/">
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="urn:ietf:params:xml:ns:carddav" xmlns:C2="http://calendarserver.org/ns/">
<response>
<href>/caldav.php/user1/</href>
<propstat>
@ -46,6 +46,25 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:addressbook/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<getcontentlength/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/calendar-proxy-read/</href>
<propstat>
@ -53,7 +72,7 @@ Content-Type: text/xml; charset="utf-8"
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:calendar-proxy-read/>
<C2:calendar-proxy-read/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
@ -72,7 +91,7 @@ Content-Type: text/xml; charset="utf-8"
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:calendar-proxy-write/>
<C2:calendar-proxy-write/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "297a698b8d8c51217f0de910462dc6d8"
Content-Length: 2206
ETag: "966d4f7d769690fca393be5ba814e8a2"
Content-Length: 2655
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="http://calendarserver.org/ns/">
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="urn:ietf:params:xml:ns:carddav" xmlns:C2="http://calendarserver.org/ns/">
<response>
<href>/caldav.php/user1/</href>
<propstat>
@ -46,6 +46,25 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:addressbook/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<getcontentlength/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>
@ -72,7 +91,7 @@ Content-Type: text/xml; charset="utf-8"
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:calendar-proxy-read/>
<C2:calendar-proxy-read/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
@ -91,7 +110,7 @@ Content-Type: text/xml; charset="utf-8"
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:calendar-proxy-write/>
<C2:calendar-proxy-write/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -6,4 +6,46 @@ HEADER=If-None-Match: *
HEADER=User-Agent: Evolution/1.8.1
HEADER=Content-Type: text/calendar
HEAD
DATA=20061101T073004Z.ics
BEGINDATA
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
VERSION:2.0
BEGIN:VEVENT
UID:20061101T073000Z-10468-1000-1-7@ubu
DTSTAMP:20061101T073000Z
DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T100000
DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T110000
SUMMARY:A Meeting
X-EVOLUTION-CALDAV-HREF:http:
//user1@mycaldav/caldav.php/user1/home/20061101T073004Z.ics
BEGIN:VALARM
X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu
ACTION:DISPLAY
TRIGGER;VALUE=DURATION;RELATED=START:-PT15M
DESCRIPTION:A Meeting
END:VALARM
END:VEVENT
BEGIN:VTIMEZONE
TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
TZNAME:NZST
DTSTART:19700315T030000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
TZNAME:NZDT
DTSTART:19701004T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
ENDDATA

View File

@ -2,12 +2,62 @@ HTTP/1.1 207 Multi-Status
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
ETag: "882eeadb4b2e998ed4358acda515e963"
Content-Length: 1421
ETag: "ab07e565993a377f23fc062109bbf013"
Content-Length: 2857
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<response>
<href>/caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics</href>
<propstat>
<prop>
<getetag>"509b0f0d8a3363379f9f5727f5dd74a0"</getetag>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20070805T200215Z
LAST-MODIFIED:20070805T201531Z
DTSTAMP:20070805T200215Z
UID:2178279a-aec2-471f-832d-1f6df6203f2f
SUMMARY:Incomplete\, uncancelled
X-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics
DESCRIPTION:This task is incomplete and has not been cancelled (has no
status at all)
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics</href>
<propstat>
<prop>
<getetag>"cb3d9dc3e8c157f53eba3ea0e1e0f146"</getetag>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20070805T201557Z
LAST-MODIFIED:20070805T201643Z
DTSTAMP:20070805T201557Z
UID:917b9e47-b748-4550-a566-657fbe672447
SUMMARY:50% Complete\, uncancelled
STATUS:IN-PROCESS
PERCENT-COMPLETE:50
X-MOZ-LOCATIONPATH:917b9e47-b748-4550-a566-657fbe672447.ics
DESCRIPTION:This task is in progress (50% complete) and has not been
cancelled.
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics</href>
<propstat>
@ -59,6 +109,16 @@ END:VCALENDAR
</response>
</multistatus>
dtstart: >NULL<
due: >NULL<
rrule: >NULL<
summary: >Incomplete, uncancelled<
dtstart: >NULL<
due: >NULL<
rrule: >NULL<
summary: >50% Complete, uncancelled<
dtstart: >2007-12-09 13:30:00+13<
due: >2007-12-09 13:30:00+13<
rrule: >NULL<

View File

@ -35,9 +35,14 @@ SELECT dtstart, due,
FROM calendar_item JOIN caldav_data USING (dav_id)
WHERE calendar_item.dav_name ~ '^/user1/home/'
AND caldav_data.caldav_type = 'VTODO'
AND (rrule IS NOT NULL
OR (dtstart >= '20071101T110000Z' AND dtstart < '20080104T110000Z')
OR (due >= '20071101T110000Z' AND dtstart < '20080104T110000Z')
)
AND (rrule IS NOT NULL OR dtstart IS NULL
OR (
(
(due IS NULL AND dtstart > '20071101T110000Z')
OR due > '20071101T110000Z'
)
AND dtstart < '20080104T110000Z'
)
)
ENDQUERY

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "929672a83aec9ab7d7b4a85c61814772"
Content-Length: 2161
ETag: "fd17acf5fe9ad6e6612323ef680b3d10"
Content-Length: 2601
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="http://calendarserver.org/ns/">
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="urn:ietf:params:xml:ns:carddav" xmlns:C2="http://calendarserver.org/ns/">
<response>
<href>/caldav.php/user1/</href>
<propstat>
@ -46,6 +46,25 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:addressbook/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<getetag/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>
@ -72,7 +91,7 @@ Content-Type: text/xml; charset="utf-8"
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:calendar-proxy-read/>
<C2:calendar-proxy-read/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
@ -91,7 +110,7 @@ Content-Type: text/xml; charset="utf-8"
<getcontenttype>httpd/unix-directory</getcontenttype>
<resourcetype>
<collection/>
<C1:calendar-proxy-write/>
<C2:calendar-proxy-write/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -0,0 +1,29 @@
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
Lock-Token: <opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>
Content-Length: 412
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<prop xmlns="DAV:">
<lockdiscovery>
<activelock>
<locktype>
<write/>
</locktype>
<lockscope>
<exclusive/>
</lockscope>
<depth>0</depth>
<owner>
<href/>
</owner>
<timeout>Second-30</timeout>
<locktoken>
<href>opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</href>
</locktoken>
</activelock>
</lockdiscovery>
</prop>

View File

@ -0,0 +1,15 @@
#
# Basic testing with Cadaver DAV client
#
TYPE=LOCK
URL=http://mycaldav/caldav.php/user1/home/20061101T073004Z.ics
HEADER=User-Agent: cadaver/0.23.3 neon/0.29.6
HEADER=Depth: 0
HEADER=Content-Type: application/xml
HEAD
BEGINDATA
<lockinfo xmlns='DAV:'>
<lockscope><exclusive/></lockscope>
<locktype><write/></locktype></lockinfo>
ENDDATA

View File

@ -1,3 +1,17 @@
#
# Doing a PUT with cadaver
#
TYPE=PUT
URL=http://regression.host/caldav.php/user1/home/20061101T073004Z.ics
GETSQL=locktoken
SELECT opaquelocktoken FROM locks WHERE dav_name = '/user1/home/20061101T073004Z.ics'
ENDSQL
HEADER=User-Agent: cadaver/0.22.3 neon/0.25.5
HEADER=If: <http://dev.davical.org:1080/caldav.php/user1/home/20061101T073004Z.ics> (<opaquelocktoken:##locktoken##>)
BEGINDATA
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
@ -5,13 +19,9 @@ VERSION:2.0
BEGIN:VEVENT
UID:20061101T073000Z-10468-1000-1-7@ubu
DTSTAMP:20061101T073000Z
DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T100000
DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T110000
SUMMARY:A Meeting
X-EVOLUTION-CALDAV-HREF:http:
//user1@mycaldav/caldav.php/user1/home/20061101T073004Z.ics
DTSTART;TZID=Pacific/Auckland:20061101T100000
DTEND;TZID=Pacific/Auckland:20061101T110000
SUMMARY:A Changed Meeting
BEGIN:VALARM
X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu
ACTION:DISPLAY
@ -20,8 +30,7 @@ DESCRIPTION:A Meeting
END:VALARM
END:VEVENT
BEGIN:VTIMEZONE
TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
TZID:Pacific/Auckland
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
@ -38,3 +47,4 @@ RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
ENDDATA

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "3d57f5e85f8e7d0fe3398eeace49ce1a"
Content-Length: 3181
ETag: "e3f59c55883b61b4390fd7ffbe74644b"
Content-Length: 3649
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:A="http://apple.com/ns/ical/" xmlns:C1="http://calendarserver.org/ns/">
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:A="http://apple.com/ns/ical/" xmlns:C1="urn:ietf:params:xml:ns:carddav" xmlns:C2="http://calendarserver.org/ns/">
<response>
<href>/caldav.php/user1/</href>
<propstat>
@ -48,6 +48,26 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<displayname>user1 addresses</displayname>
<resourcetype>
<collection/>
<C1:addressbook/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C:calendar-description/>
<A:calendar-color/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>
@ -115,7 +135,7 @@ Content-Type: text/xml; charset="utf-8"
<displayname>/user1/calendar-proxy-read/</displayname>
<resourcetype>
<collection/>
<C1:calendar-proxy-read/>
<C2:calendar-proxy-read/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
@ -135,7 +155,7 @@ Content-Type: text/xml; charset="utf-8"
<displayname>/user1/calendar-proxy-write/</displayname>
<resourcetype>
<collection/>
<C1:calendar-proxy-write/>
<C2:calendar-proxy-write/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -2,7 +2,7 @@ HTTP/1.1 207 Multi-Status
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: "c30ae7a73f7f3c95895032994b51554d"
ETag: "e76f1252cff440810b604e3903cc364b"
Content-Length: 675
Content-Type: text/xml; charset="utf-8"
@ -13,7 +13,7 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<displayname>user1 home</displayname>
<C:getctag>"c4b202f2177d8839c95d715f26cf62da"</C:getctag>
<C:getctag>"86d97f6156e59bbf1b1514e804a6cc1c"</C:getctag>
<resourcetype>
<collection/>
<C1:calendar/>

View File

@ -2,7 +2,7 @@ HTTP/1.1 207 Multi-Status
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: "c0dc924dbe52600ea776c98136f289b0"
ETag: "198df454dbf27f8311378759dfeaee14"
Content-Length: 4155
Content-Type: text/xml; charset="utf-8"
@ -40,7 +40,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/20061101T073004Z.ics</href>
<propstat>
<prop>
<getetag>"c3658901fd4689d4a1e1d6f08601ef4f"</getetag>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
<resourcetype/>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "b11fc11a4033759ef4a7694f058b95cc"
Content-Length: 3932
ETag: "8ae10873cb1929fd0e66571128cf01ea"
Content-Length: 4594
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav" xmlns:A="http://apple.com/ns/ical/">
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav" xmlns:A="http://apple.com/ns/ical/" xmlns:C2="urn:ietf:params:xml:ns:carddav">
<response>
<href>/caldav.php/user2/</href>
<propstat>
@ -58,6 +58,31 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user2/addresses/</href>
<propstat>
<prop>
<C:getctag>"7e58d63b60197ceb55a1c487989a3720"</C:getctag>
<displayname>user2 addresses</displayname>
<resourcetype>
<collection/>
<C2:addressbook/>
</resourcetype>
<C1:calendar-free-busy-set>
<href>/caldav.php/user2/home/</href>
</C1:calendar-free-busy-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user2/.in/</href>
<propstat>

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "3ff13339128a73ed5d25308b678c3bc5"
Content-Length: 4847
ETag: "45a0a8b922545d0793e9b0b9d10726fe"
Content-Length: 6054
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav">
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav" xmlns:C2="urn:ietf:params:xml:ns:carddav">
<response>
<href>/caldav.php/manager1/</href>
<propstat>
@ -82,6 +82,43 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/manager1/addresses/</href>
<propstat>
<prop>
<C:getctag>"c240642ddef994358c96da82c0361a58"</C:getctag>
<displayname>manager1 addresses</displayname>
<resourcetype>
<collection/>
<C2:addressbook/>
</resourcetype>
<group-membership>
<href>/caldav.php/assistant1/</href>
<href>/caldav.php/teamclient1/</href>
<href>/caldav.php/user1/</href>
<href>/caldav.php/user1/calendar-proxy-read/</href>
<href>/caldav.php/assistant1/calendar-proxy-read/</href>
<href>/caldav.php/resource1/calendar-proxy-read/</href>
<href>/caldav.php/resource2/calendar-proxy-read/</href>
</group-membership>
<C:calendar-proxy-read-for>
<href>/caldav.php/user1/</href>
<href>/caldav.php/assistant1/</href>
<href>/caldav.php/resource1/</href>
<href>/caldav.php/resource2/</href>
</C:calendar-proxy-read-for>
<C:calendar-proxy-write-for/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C1:calendar-description/>
<group-member-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/manager1/calendar-proxy-read/</href>
<propstat>

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "e7cd1ee6cd4eb1e0e2aaa1d2b5a0bfb1"
Content-Length: 15648
ETag: "9e402a9adb641a6ce4891a105f7963bd"
Content-Length: 17404
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav" xmlns:A="http://apple.com/ns/ical/">
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav" xmlns:A="http://apple.com/ns/ical/" xmlns:C2="urn:ietf:params:xml:ns:carddav">
<response>
<href>/caldav.php/user1/</href>
<propstat>
@ -161,6 +161,78 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<C:getctag>"24c9e15e52afc47c225b757e7bee1f9d"</C:getctag>
<displayname>user1 addresses</displayname>
<resourcetype>
<collection/>
<C2:addressbook/>
</resourcetype>
<C1:calendar-free-busy-set>
<href>/caldav.php/user1/home/</href>
<href>/caldav.php/user1/created/</href>
<href>/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/</href>
</C1:calendar-free-busy-set>
<C1:schedule-default-calendar-URL>
<href>/user1/home/</href>
</C1:schedule-default-calendar-URL>
<current-user-privilege-set>
<privilege>
<all/>
</privilege>
<privilege>
<read/>
</privilege>
<privilege>
<unlock/>
</privilege>
<privilege>
<read-acl/>
</privilege>
<privilege>
<read-current-user-privilege-set/>
</privilege>
<privilege>
<write-acl/>
</privilege>
<privilege>
<write/>
</privilege>
<privilege>
<write-properties/>
</privilege>
<privilege>
<write-content/>
</privilege>
<privilege>
<bind/>
</privilege>
<privilege>
<unbind/>
</privilege>
</current-user-privilege-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C:xmpp-server/>
<C:xmpp-uri/>
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
<C1:calendar-timezone/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>

View File

@ -2,7 +2,7 @@ HTTP/1.1 207 Multi-Status
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: "6466df744e5f263784fd0e85915683b6"
ETag: "c932a7b77636c45a6395fb906c9ff80c"
Content-Length: 4421
Content-Type: text/xml; charset="utf-8"
@ -40,7 +40,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/20061101T073004Z.ics</href>
<propstat>
<prop>
<getetag>"c3658901fd4689d4a1e1d6f08601ef4f"</getetag>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
<resourcetype/>
</prop>
<status>HTTP/1.1 200 OK</status>

Binary file not shown.

View File

@ -0,0 +1,8 @@
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: "6ddd18264a9d40c1c9d37a005eeb7e4f"
Content-Length: 0
Content-Type: text/plain; charset="utf-8"

View File

@ -0,0 +1,14 @@
#
# Testing with a process similar to iCal4
#
TYPE=PUT
URL=http://regression.host/caldav.php/user1/home/0544-gzip-PUT.ics
HEAD
HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504)
HEADER=Content-Type: text/calendar
HEADER=Content-Encoding: gzip
#
#
DATA=0544-gzip-PUT

View File

@ -0,0 +1,3 @@
}AoÚ0Çïþ¾·!v€Q\q0±°<E28093>:/¨á‚"š6h™¢pØ·ŸCh+<2B>m99ý{¿÷^Ê•2ló<>4;´•.SÖ°hDPê¬PaXTe<54>Ýñ­î°:Fa(š¦>¾W¿ðdDÂPä YOa+'WÖ)nÐr`ƒÒrg<72>D°ó´´-ßÎÕþxÚÇÕ©kË÷½<·ÍÏ
=ZÅÎf6<66> 6¸œž\!µZƒgØ$É$$ÎjvG(!ȹܗMœ|Z»Mñ¸,´5°^ŒýÊß\ ¸”Œ£9<C2A3>ˆøÏ ×^[ÉØec(Öðg<C3B0>OæK`ðñ¨>.ñ§Oô_Jþ.4ÿFI4¢7Bô*ôiÐÿ|e|Í\n¥;ÉA
Jý½ ÐéxJf;”ûhÉt2 ^ª×÷²«4÷Ñ:n²”Ù”?åe¹ÖÜL<>ð0²{LIùãÛC‡g]<5D>_S\7çö£“Ç~d øÃb”\ú¹ãпµèz`èôÖ5“^ÇĒѡաµËòóÕþ

View File

@ -0,0 +1,8 @@
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: "4a3aa58a3e11487e87d87024465d4182"
Content-Length: 0
Content-Type: text/plain; charset="utf-8"

View File

@ -0,0 +1,14 @@
#
# Testing with a process similar to iCal4
#
TYPE=PUT
URL=http://regression.host/caldav.php/user1/home/0545-deflate-PUT.ics
HEAD
HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504)
HEADER=Content-Type: text/calendar
HEADER=Content-Encoding: deflate
#
#
DATA=0545-deflate-PUT

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "ffa85945cfea407705b4af67ba7f4259"
Content-Length: 11513
ETag: "4f2f5fe4966246175dfc7a90396422d2"
Content-Length: 12754
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="http://calendarserver.org/ns/" xmlns:A="http://apple.com/ns/ical/">
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="http://calendarserver.org/ns/" xmlns:A="http://apple.com/ns/ical/" xmlns:C2="urn:ietf:params:xml:ns:carddav">
<response>
<href>/caldav.php/user1/</href>
<propstat>
@ -70,7 +70,7 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<displayname>user1 home</displayname>
<C1:getctag>"86a1e7300c8b748329ad3617974ad08a"</C1:getctag>
<C1:getctag>"243d78db0cc75a576d2603eef69efdc9"</C1:getctag>
<A:calendar-color>#0252D4FF</A:calendar-color>
<C:supported-calendar-component-set>
<C:comp name="VEVENT"/>
@ -131,6 +131,63 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<displayname>user1 addresses</displayname>
<C1:getctag>"24c9e15e52afc47c225b757e7bee1f9d"</C1:getctag>
<resourcetype>
<collection/>
<C2:addressbook/>
</resourcetype>
<current-user-privilege-set>
<privilege>
<all/>
</privilege>
<privilege>
<read/>
</privilege>
<privilege>
<unlock/>
</privilege>
<privilege>
<read-acl/>
</privilege>
<privilege>
<read-current-user-privilege-set/>
</privilege>
<privilege>
<write-acl/>
</privilege>
<privilege>
<write/>
</privilege>
<privilege>
<write-properties/>
</privilege>
<privilege>
<write-content/>
</privilege>
<privilege>
<bind/>
</privilege>
<privilege>
<unbind/>
</privilege>
</current-user-privilege-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C:calendar-description/>
<A:calendar-color/>
<C:supported-calendar-component-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "ffa85945cfea407705b4af67ba7f4259"
Content-Length: 11513
ETag: "4f2f5fe4966246175dfc7a90396422d2"
Content-Length: 12754
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="http://calendarserver.org/ns/" xmlns:A="http://apple.com/ns/ical/">
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="http://calendarserver.org/ns/" xmlns:A="http://apple.com/ns/ical/" xmlns:C2="urn:ietf:params:xml:ns:carddav">
<response>
<href>/caldav.php/user1/</href>
<propstat>
@ -70,7 +70,7 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<displayname>user1 home</displayname>
<C1:getctag>"86a1e7300c8b748329ad3617974ad08a"</C1:getctag>
<C1:getctag>"243d78db0cc75a576d2603eef69efdc9"</C1:getctag>
<A:calendar-color>#0252D4FF</A:calendar-color>
<C:supported-calendar-component-set>
<C:comp name="VEVENT"/>
@ -131,6 +131,63 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<displayname>user1 addresses</displayname>
<C1:getctag>"24c9e15e52afc47c225b757e7bee1f9d"</C1:getctag>
<resourcetype>
<collection/>
<C2:addressbook/>
</resourcetype>
<current-user-privilege-set>
<privilege>
<all/>
</privilege>
<privilege>
<read/>
</privilege>
<privilege>
<unlock/>
</privilege>
<privilege>
<read-acl/>
</privilege>
<privilege>
<read-current-user-privilege-set/>
</privilege>
<privilege>
<write-acl/>
</privilege>
<privilege>
<write/>
</privilege>
<privilege>
<write-properties/>
</privilege>
<privilege>
<write-content/>
</privilege>
<privilege>
<bind/>
</privilege>
<privilege>
<unbind/>
</privilege>
</current-user-privilege-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C:calendar-description/>
<A:calendar-color/>
<C:supported-calendar-component-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>

View File

@ -2,8 +2,8 @@ HTTP/1.1 207 Multi-Status
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: "571aa22469ee7442c32ba35664da10de"
Content-Length: 880
ETag: "64bfdf4e95a5799a86f1c79e0f3faf1d"
Content-Length: 1369
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -38,4 +38,24 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0544-gzip-PUT.ics</href>
<propstat>
<prop>
<getetag>"6ddd18264a9d40c1c9d37a005eeb7e4f"</getetag>
<resourcetype/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0545-deflate-PUT.ics</href>
<propstat>
<prop>
<getetag>"4a3aa58a3e11487e87d87024465d4182"</getetag>
<resourcetype/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "d98f282a5121894cde0b43b6ecf143df"
Content-Length: 4285
ETag: "4b62114cda76b7d0b7e18ee55488af71"
Content-Length: 4741
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="http://calendarserver.org/ns/">
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:C1="urn:ietf:params:xml:ns:carddav" xmlns:C2="http://calendarserver.org/ns/">
<response>
<href>/caldav.php/user1/</href>
<propstat>
@ -47,6 +47,25 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<displayname>user1 addresses</displayname>
<resourcetype>
<collection/>
<C1:addressbook/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C:supported-calendar-component-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>
@ -146,7 +165,7 @@ Content-Type: text/xml; charset="utf-8"
<displayname>/user1/calendar-proxy-read/</displayname>
<resourcetype>
<collection/>
<C1:calendar-proxy-read/>
<C2:calendar-proxy-read/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
@ -165,7 +184,7 @@ Content-Type: text/xml; charset="utf-8"
<displayname>/user1/calendar-proxy-write/</displayname>
<resourcetype>
<collection/>
<C1:calendar-proxy-write/>
<C2:calendar-proxy-write/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -0,0 +1,76 @@
HTTP/1.1 207 Multi-Status
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: "09eb139019832f5f89469c914c977636"
Content-Length: 1227
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
<response>
<href>/caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics</href>
<propstat>
<prop>
<getetag>"e8060931f30c1798ac58ffbe4ec0bffc"</getetag>
<getcontenttype>text/calendar</getcontenttype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics</href>
<propstat>
<prop>
<getetag>"6f16959eee5c920b45548840b1e9ea19"</getetag>
<getcontenttype>text/calendar</getcontenttype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0544-gzip-PUT.ics</href>
<propstat>
<prop>
<getetag>"6ddd18264a9d40c1c9d37a005eeb7e4f"</getetag>
<getcontenttype>text/calendar</getcontenttype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0545-deflate-PUT.ics</href>
<propstat>
<prop>
<getetag>"4a3aa58a3e11487e87d87024465d4182"</getetag>
<getcontenttype>text/calendar</getcontenttype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
dav_name: >/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics<
dtstart: >2006-11-02 10:00:00+13<
rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH<
dav_name: >/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics<
dtstart: >2007-12-11 07:45:00+13<
rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH<
dav_name: >/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics<
dtstart: >2006-11-03 16:00:00+13<
rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900<
dav_name: >/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics<
dtstart: >2006-11-03 07:30:00+13<
rrule: >FREQ=MONTHLY<
dav_name: >/user1/home/0544-gzip-PUT.ics<
dtstart: >2011-10-05 14:00:00+13<
rrule: >NULL<
dav_name: >/user1/home/0545-deflate-PUT.ics<
dtstart: >2011-10-07 10:00:00+13<
rrule: >NULL<

View File

@ -0,0 +1,43 @@
#
# Testing with a process similar to iPhone 5
#
TYPE=REPORT
URL=http://mycaldav/caldav.php/user1/home/
HEAD
AUTH=user1:user1
HEADER=User-Agent: iOS/10.7.2 (11C35) dataaccessd/1.0
HEADER=Content-Type: text/xml
HEADER=Depth: 1
#
BEGINDATA
<?xml version="1.0" encoding="UTF-8"?>
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
<A:prop xmlns:A="DAV:">
<A:getetag/>
<A:getcontenttype/>
</A:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:time-range start="20110922T000000Z"/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
ENDDATA
#
QUERY
SELECT caldav_data.dav_name, dtstart, rrule
FROM calendar_item JOIN caldav_data USING(dav_id)
WHERE caldav_data.dav_name ~ '^/user1/home/'
AND caldav_data.caldav_type = 'VEVENT'
AND (rrule IS NOT NULL OR dtstart IS NULL
OR ( (dtend IS NULL AND dtstart > '20110922T000000Z')
OR dtend > '20110922T000000Z'
)
)
ENDQUERY

View File

@ -2,8 +2,8 @@ HTTP/1.1 207 Multi-Status
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: "4455c8df8e5a0572ba52dccb00843cfe"
Content-Length: 4030
ETag: "f855e21bdab0b98d0bfefa0211bde9ac"
Content-Length: 4479
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -21,7 +21,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/20061101T073004Z.ics</href>
<propstat>
<prop>
<getetag>"c3658901fd4689d4a1e1d6f08601ef4f"</getetag>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
@ -152,5 +152,23 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0544-gzip-PUT.ics</href>
<propstat>
<prop>
<getetag>"6ddd18264a9d40c1c9d37a005eeb7e4f"</getetag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0545-deflate-PUT.ics</href>
<propstat>
<prop>
<getetag>"4a3aa58a3e11487e87d87024465d4182"</getetag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<sync-token>data:,2</sync-token>
</multistatus>

View File

@ -2,12 +2,30 @@ HTTP/1.1 207 Multi-Status
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: "a4ec15e128c8e06e81c57af754448f81"
Content-Length: 3786
ETag: "99574d7bc8d5f12a1a5ac80934cee9f2"
Content-Length: 4235
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
<response>
<href>/caldav.php/user1/home/0544-gzip-PUT.ics</href>
<propstat>
<prop>
<getetag>"6ddd18264a9d40c1c9d37a005eeb7e4f"</getetag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0545-deflate-PUT.ics</href>
<propstat>
<prop>
<getetag>"4a3aa58a3e11487e87d87024465d4182"</getetag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics</href>
<propstat>
@ -30,7 +48,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/20061101T073004Z.ics</href>
<propstat>
<prop>
<getetag>"c3658901fd4689d4a1e1d6f08601ef4f"</getetag>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>

View File

@ -2,8 +2,8 @@ HTTP/1.1 207 Multi-Status
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: "12c556718c27de34471b0b9f333610fc"
Content-Length: 15922
ETag: "b809f86b465fa4356c00d884de114029"
Content-Length: 17557
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -404,6 +404,72 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0544-gzip-PUT.ics</href>
<propstat>
<prop>
<C:calendar-home-set>
<href>/caldav.php/user1/</href>
</C:calendar-home-set>
<C:calendar-user-address-set>
<href>mailto:user1@example.net</href>
<href>/caldav.php/user1/</href>
</C:calendar-user-address-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<A:dropbox-home-URL/>
<A:notifications-URL/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0545-deflate-PUT.ics</href>
<propstat>
<prop>
<C:calendar-home-set>
<href>/caldav.php/user1/</href>
</C:calendar-home-set>
<C:calendar-user-address-set>
<href>mailto:user1@example.net</href>
<href>/caldav.php/user1/</href>
</C:calendar-user-address-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<A:dropbox-home-URL/>
<A:notifications-URL/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<C:calendar-home-set>
<href>/caldav.php/user1/</href>
</C:calendar-home-set>
<C:calendar-user-address-set>
<href>mailto:user1@example.net</href>
<href>/caldav.php/user1/</href>
</C:calendar-user-address-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<A:dropbox-home-URL/>
<A:notifications-URL/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>

View File

@ -2,8 +2,8 @@ HTTP/1.1 207 Multi-Status
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: "2c82262a1c8f2caf0dccf46188970a65"
Content-Length: 5036
ETag: "cb882ded16756e36bbd614591982f2e7"
Content-Length: 5572
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -52,6 +52,28 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/addresses/</href>
<propstat>
<prop>
<C:calendar-home-set>
<href>/caldav.php/user1/</href>
</C:calendar-home-set>
<C:calendar-user-address-set>
<href>mailto:user1@example.net</href>
<href>/caldav.php/user1/</href>
</C:calendar-user-address-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<A:dropbox-home-URL/>
<A:notifications-URL/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/created/</href>
<propstat>

View File

@ -3,7 +3,7 @@ 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
Lock-Token: <opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>
Content-Length: 460
Content-Length: 456
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -20,7 +20,7 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>http://andrew.mcmillan.net.nz/node/5/</href>
</owner>
<timeout>Second-8640000</timeout>
<timeout>Second-300</timeout>
<locktoken>
<href>opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</href>
</locktoken>

View File

@ -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: 460
Content-Length: 456
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -19,7 +19,7 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>http://andrew.mcmillan.net.nz/node/5/</href>
</owner>
<timeout>Second-8640000</timeout>
<timeout>Second-300</timeout>
<locktoken>
<href>opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</href>
</locktoken>

View File

@ -3,7 +3,7 @@ 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
Lock-Token: <opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>
Content-Length: 460
Content-Length: 456
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -20,7 +20,7 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>http://andrew.mcmillan.net.nz/node/5/</href>
</owner>
<timeout>Second-8640000</timeout>
<timeout>Second-300</timeout>
<locktoken>
<href>opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</href>
</locktoken>

View File

@ -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: 460
Content-Length: 456
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -19,7 +19,7 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>http://andrew.mcmillan.net.nz/node/5/</href>
</owner>
<timeout>Second-8640000</timeout>
<timeout>Second-300</timeout>
<locktoken>
<href>opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</href>
</locktoken>

View File

@ -78,11 +78,11 @@
<propstat>
<prop>
<creationdate>20061031T183000Z</creationdate>
<displayname>A Meeting</displayname>
<displayname>A Changed Meeting</displayname>
<getcontentlanguage/>
<getcontentlength>1059</getcontentlength>
<getcontentlength>829</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getetag>"c3658901fd4689d4a1e1d6f08601ef4f"</getetag>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
<supportedlock>
@ -598,6 +598,76 @@
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0544-gzip-PUT.ics</href>
<propstat>
<prop>
<creationdate>20111004T023507Z</creationdate>
<displayname>In Central Europe, 2pm, Oct 5th for 1 hour</displayname>
<getcontentlanguage/>
<getcontentlength>761</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getetag>"6ddd18264a9d40c1c9d37a005eeb7e4f"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
<supportedlock>
<lockentry>
<lockscope>
<exclusive/>
</lockscope>
<locktype>
<write/>
</locktype>
</lockentry>
</supportedlock>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<lockdiscovery/>
<source/>
<checked-in/>
<checked-out/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0545-deflate-PUT.ics</href>
<propstat>
<prop>
<creationdate>20111004T023507Z</creationdate>
<displayname>In Prague, 10am, Oct 7th for 1 hour</displayname>
<getcontentlanguage/>
<getcontentlength>710</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getetag>"4a3aa58a3e11487e87d87024465d4182"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
<supportedlock>
<lockentry>
<lockscope>
<exclusive/>
</lockscope>
<locktype>
<write/>
</locktype>
</lockentry>
</supportedlock>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<lockdiscovery/>
<source/>
<checked-in/>
<checked-out/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics</href>
<propstat>

View File

@ -3,7 +3,7 @@ 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
Lock-Token: <opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>
Content-Length: 460
Content-Length: 456
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -20,7 +20,7 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>http://andrew.mcmillan.net.nz/node/5/</href>
</owner>
<timeout>Second-8640000</timeout>
<timeout>Second-300</timeout>
<locktoken>
<href>opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</href>
</locktoken>

View File

@ -36,19 +36,19 @@ Content-Type: text/xml; charset="utf-8"
</response>
</multistatus>
changed_last_60se: >1<
changed_recently: >1<
dav_displayname: >user1 home<
is_calendar: >1<
resourcetypes: ><DAV::collection/><urn:ietf:params:xml:ns:caldav:calendar/><
changed_by: >10<
changed_last_30se: >1<
changed_recently: >1<
dav_name: >/user1/home/<
property_name: >http://apple.com/ns/ical/:calendar-color<
property_value: >#0252D4FF<
changed_by: >10<
changed_last_30se: >1<
changed_recently: >1<
dav_name: >/user1/home/<
property_name: >http://apple.com/ns/ical/:calendar-order<
property_value: >1<

View File

@ -30,13 +30,13 @@ ENDDATA
QUERY
SELECT dav_displayname, is_calendar, resourcetypes,
modified > (current_timestamp - '60 seconds'::interval) AS changed_last_60secs
modified > (current_timestamp - '120 seconds'::interval) AS changed_recently
FROM collection WHERE dav_name = '/user1/home/' ORDER BY collection_id
ENDQUERY
QUERY
SELECT dav_name, property_name, property_value, changed_by,
changed_on > (current_timestamp - '60 seconds'::interval) AS changed_last_30secs
changed_on > (current_timestamp - '120 seconds'::interval) AS changed_recently
FROM property
WHERE dav_name = '/user1/home/'
ORDER BY dav_name, property_name

View File

@ -2,8 +2,8 @@ HTTP/1.1 207 Multi-Status
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: "26a689e219dfe12c47d9bdf005cee099"
Content-Length: 1447
ETag: "680074e03fc52481b3dfabaa48d555a7"
Content-Length: 1217
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -12,7 +12,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/20061101T073004Z.ics</href>
<propstat>
<prop>
<getetag>"c3658901fd4689d4a1e1d6f08601ef4f"</getetag>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
<C:calendar-data>BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
@ -20,13 +20,9 @@ VERSION:2.0
BEGIN:VEVENT
UID:20061101T073000Z-10468-1000-1-7@ubu
DTSTAMP:20061101T073000Z
DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T100000
DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T110000
SUMMARY:A Meeting
X-EVOLUTION-CALDAV-HREF:http:
//user1@mycaldav/caldav.php/user1/home/20061101T073004Z.ics
DTSTART;TZID=Pacific/Auckland:20061101T100000
DTEND;TZID=Pacific/Auckland:20061101T110000
SUMMARY:A Changed Meeting
BEGIN:VALARM
X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu
ACTION:DISPLAY
@ -35,8 +31,7 @@ DESCRIPTION:A Meeting
END:VALARM
END:VEVENT
BEGIN:VTIMEZONE
TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
TZID:Pacific/Auckland
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200

View File

@ -2,8 +2,8 @@ HTTP/1.1 207 Multi-Status
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: "8a4795998583adf6b23d24f4a9e73448"
Content-Length: 5019
ETag: "474324273ec7b8c0d7e8b090e7ddcb42"
Content-Length: 4789
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -55,7 +55,7 @@ END:VCALENDAR
<href>/caldav.php/user1/home/20061101T073004Z.ics</href>
<propstat>
<prop>
<getetag>"c3658901fd4689d4a1e1d6f08601ef4f"</getetag>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
<C:calendar-data>BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
@ -63,13 +63,9 @@ VERSION:2.0
BEGIN:VEVENT
UID:20061101T073000Z-10468-1000-1-7@ubu
DTSTAMP:20061101T073000Z
DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T100000
DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T110000
SUMMARY:A Meeting
X-EVOLUTION-CALDAV-HREF:http:
//user1@mycaldav/caldav.php/user1/home/20061101T073004Z.ics
DTSTART;TZID=Pacific/Auckland:20061101T100000
DTEND;TZID=Pacific/Auckland:20061101T110000
SUMMARY:A Changed Meeting
BEGIN:VALARM
X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu
ACTION:DISPLAY
@ -78,8 +74,7 @@ DESCRIPTION:A Meeting
END:VALARM
END:VEVENT
BEGIN:VTIMEZONE
TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
TZID:Pacific/Auckland
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200

View File

@ -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: 10383
Content-Length: 11093
Etag: "855cbfab1940e342d7986c207bf3f973"
Content-Type: text/calendar; charset="utf-8"
@ -23,13 +23,9 @@ END:VEVENT
BEGIN:VEVENT
UID:20061101T073000Z-10468-1000-1-7@ubu
DTSTAMP:20061101T073000Z
DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061
101T100000
DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006110
1T110000
SUMMARY:A Meeting
X-EVOLUTION-CALDAV-HREF:http://user1@mycaldav/caldav.php/user1/home/2006
1101T073004Z.ics
DTSTART;TZID=Pacific/Auckland:20061101T100000
DTEND;TZID=Pacific/Auckland:20061101T110000
SUMMARY:A Changed Meeting
BEGIN:VALARM
X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu
ACTION:DISPLAY
@ -228,6 +224,26 @@ DTSTAMP:20091006T225808Z
SEQUENCE:1
END:VEVENT
BEGIN:VEVENT
CREATED:20111004T153507Z
UID:0544-gzip-PUT
TRANSP:OPAQUE
SUMMARY:In Central Europe, 2pm, Oct 5th for 1 hour
DTSTART;TZID=Somewhere_in_Central_Europe:20111005T140000
DTEND;TZID=Somewhere_in_Central_Europe:20111005T150000
DTSTAMP:20111004T153507Z
SEQUENCE:1
END:VEVENT
BEGIN:VEVENT
CREATED:20111004T153507Z
UID:0545-deflate-PUT
TRANSP:OPAQUE
SUMMARY:In Prague, 10am, Oct 7th for 1 hour
DTSTART;TZID=Prague_in_Central_Europe:20111007T100000
DURATION:PT1H
DTSTAMP:20111004T153507Z
SEQUENCE:1
END:VEVENT
BEGIN:VEVENT
DESCRIPTION:Have a party. All the best parties are monthly!
UID:DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74
DTSTAMP:20081024T220925Z
@ -266,8 +282,7 @@ TZOFFSETTO:+1200
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
TZID:Pacific/Auckland
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
@ -338,23 +353,6 @@ RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Pacific/Auckland
BEGIN:STANDARD
DTSTART:20000319T030000
RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=3
TZNAME:Pacific/Auckland
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20001001T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
TZNAME:Pacific/Auckland
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
@ -371,4 +369,40 @@ TZNAME:GMT+01:00
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Somewhere_in_Central_Europe
X-MICROSOFT-CDO-TZID:4
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:GMT+02:00
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:GMT+01:00
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Prague_in_Central_Europe
X-MICROSOFT-CDO-TZID:4
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:GMT+02:00
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:GMT+01:00
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

View File

@ -16,7 +16,7 @@ Content-Type: text/plain; charset="utf-8"
attendees: >40<
collection_id: >1564<
collection_id: >1566<
dav_displayname: >anotherone<
dav_etag: >f9a8ee6b41d9b02aa5176e6da349121a<
dav_name: >/user1/anotherone/<

View File

@ -2,12 +2,12 @@ HTTP/1.1 207 Multi-Status
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: "dc48f1e4638af53b05dd0f29f1906989"
Content-Length: 3827
ETag: "f640afc35eb1b3892d84512c69748944"
Content-Length: 4581
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav" xmlns:A="http://apple.com/ns/ical/">
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav" xmlns:A="http://apple.com/ns/ical/" xmlns:C2="urn:ietf:params:xml:ns:carddav">
<response>
<href>/caldav.php/User%20Six/</href>
<propstat>
@ -60,6 +60,32 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/User%20Six/addresses/</href>
<propstat>
<prop>
<C:getctag>"28e06afe6d538a7e84518750357ef98d"</C:getctag>
<displayname>User Six addresses</displayname>
<resourcetype>
<collection/>
<C2:addressbook/>
</resourcetype>
<C1:calendar-free-busy-set>
<href>/caldav.php/User%20Six/home/</href>
<href>/caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/</href>
</C1:calendar-free-busy-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/</href>
<propstat>

View File

@ -6,9 +6,9 @@ Content-Length: 0
Content-Type: text/plain; charset="utf-8"
cd_collection: >1564<
cd_collection: >1566<
cd_user_no: >10<
ci_collection: >1564<
ci_collection: >1566<
ci_user_no: >10<
data_name: >/user1/anotherone/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics<
item_name: >/user1/anotherone/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics<

View File

@ -2,8 +2,8 @@ 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
Etag: "c3658901fd4689d4a1e1d6f08601ef4f"
Content-Length: 826
Etag: "bcc402382688cb3e8e57379c757dbcb0"
Content-Length: 676
Content-Type: text/calendar; charset="utf-8"
BEGIN:VCALENDAR
@ -11,8 +11,7 @@ CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
TZID:Pacific/Auckland
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
@ -31,10 +30,8 @@ END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:Busy
CLASS:CONFIDENTIAL
DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T100000
DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:
20061101T110000
DTSTART;TZID=Pacific/Auckland:20061101T100000
DTEND;TZID=Pacific/Auckland:20061101T110000
UID:20061101T073000Z-10468-1000-1-7@ubu
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,41 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, calendar-access
Etag: "13249ced6c7527191a003f54f7e3cd25"
Content-Length: 834
Content-Type: text/calendar; charset="utf-8"
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
CREATED:20081023T055115Z
LAST-MODIFIED:20081023T055139Z
DTSTAMP:20081023T055115Z
UID:9429a973-2b13-4b1a-be09-948d75425c45
SUMMARY:Weekly catch-up
RRULE:FREQ=WEEKLY;INTERVAL=1
DTSTART;TZID=Pacific/Auckland:20081024T140000
DTEND;TZID=Pacific/Auckland:20081024T150000
X-MOZ-GENERATION:2
END:VEVENT
BEGIN:VTIMEZONE
TZID:Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
TZNAME:NZDT
DTSTART:19700927T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
TZNAME:NZST
DTSTART:19700405T030000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

View File

@ -0,0 +1,20 @@
#
# Test GET access to a non-public calendar using a ticket.
#
TYPE=GET
URL=http://regression.host/public.php/user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics
NOAUTH
# Get the ticket we created earlier in 948...
GETSQL=ticket
SELECT ticket_id FROM access_ticket
WHERE target_collection_id = 11 AND target_resource_id is null;
ENDSQL
HEADER=User-Agent: DAViCalTester/public
HEADER=Ticket: ##ticket##
HEAD
BEGINDATA
ENDDATA

View File

@ -2,12 +2,32 @@ HTTP/1.1 207 Multi-Status
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: "40e69ecd1e31ae458e1fa4505c1ee585"
Content-Length: 5879
ETag: "6d416d900e71bc416b72a7f97e779ed3"
Content-Length: 6466
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
<response>
<href>/caldav.php/user1/home/0544-gzip-PUT.ics</href>
<propstat>
<prop>
<getetag>"6ddd18264a9d40c1c9d37a005eeb7e4f"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0545-deflate-PUT.ics</href>
<propstat>
<prop>
<getetag>"4a3aa58a3e11487e87d87024465d4182"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics</href>
<propstat>
@ -32,7 +52,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/20061101T073004Z.ics</href>
<propstat>
<prop>
<getetag>"c3658901fd4689d4a1e1d6f08601ef4f"</getetag>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -54,6 +54,15 @@ INSERT INTO collection (user_no, parent_container, dav_name, dav_etag,
FALSE, FALSE, user_no, '<DAV::collection/><urn:ietf:params:xml:ns:caldav:calendar/>'
FROM usr;
INSERT INTO collection (user_no, parent_container, dav_name, dav_etag,
dav_displayname, is_calendar, is_addressbook, created, modified,
public_events_only, publicly_readable, collection_id, resourcetypes )
SELECT user_no, '/' || username || '/', '/' || username || '/addresses/', md5(username),
username || ' addresses', FALSE, TRUE, '1957-07-26', '1998-03-16',
FALSE, FALSE, user_no + 50, '<DAV::collection/><urn:ietf:params:xml:ns:carddav:addressbook/>'
FROM usr;
INSERT INTO principal (type_id, user_no, displayname, default_privileges)
SELECT 1, user_no, fullname, privilege_to_bits(ARRAY['read-free-busy','schedule-send','schedule-deliver']) FROM usr
WHERE NOT EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Group' AND role_member.user_no = usr.user_no)

View File

@ -1,6 +1,6 @@
setval
--------
1639
1642
(1 row)
setval
@ -30,7 +30,7 @@
setval
--------
11
13
(1 row)
setval

View File

@ -1,6 +1,6 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 2644
Content-Length: 3064
Content-Type: application/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -64,6 +64,13 @@ Content-Type: application/xml; charset="utf-8"
<inactive/>
<local-name lang="en_US">Pacific/Auckland</local-name>
</summary>
<summary>
<tzid>Prague_in_Central_Europe</tzid>
<last-modified>all good</last-modified>
<inactive/>
<alias/>
<local-name lang="en_US">Prague_in_Central_Europe</local-name>
</summary>
<summary>
<tzid>/softwarestudio.org/Olson_20011030_5/Pacific/Auckland</tzid>
<last-modified>all good</last-modified>
@ -71,6 +78,13 @@ Content-Type: application/xml; charset="utf-8"
<alias>Pacific/Auckland</alias>
<local-name lang="en_US">/softwarestudio.org/Olson_20011030_5/Pacific/Auckland</local-name>
</summary>
<summary>
<tzid>Somewhere_in_Central_Europe</tzid>
<last-modified>all good</last-modified>
<inactive/>
<alias/>
<local-name lang="en_US">Somewhere_in_Central_Europe</local-name>
</summary>
<summary>
<tzid>(UTC-05:00) Eastern Time (US &amp; Canada)</tzid>
<last-modified>all good</last-modified>

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,10 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
ETag: "Some good etag"
Last-Modified: Dow, 01 Jan 2000 00:00:00 GMT
Content-Disposition: Attachment; Filename="Pacific-Auckland.ics"
Content-Length: 3658
Content-Type: text/calendar
Content-Type: text/calendar; charset=UTF-8
BEGIN:VCALENDAR
VERSION:2.0

View File

@ -1,8 +1,10 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
ETag: "Some good etag"
Last-Modified: Dow, 01 Jan 2000 00:00:00 GMT
Content-Disposition: Attachment; Filename="Europe-Madrid.ics"
Content-Length: 611
Content-Type: text/calendar
Content-Type: text/calendar; charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//Morphoss Ltd//NONSGML aCal//EN

View File

@ -1,9 +1,9 @@
HTTP/1.1 403 Forbidden
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 148
Content-Length: 183
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<error xmlns="DAV:">
<error xmlns="urn:ietf:params:xml:ns:timezone-service">
<supported-format/>This server currently only supports text/calendar format.
</error>

View File

@ -1,9 +1,9 @@
HTTP/1.1 403 Forbidden
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 148
Content-Length: 183
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<error xmlns="DAV:">
<error xmlns="urn:ietf:params:xml:ns:timezone-service">
<supported-format/>This server currently only supports text/calendar format.
</error>

View File

@ -1,6 +1,6 @@
setval
--------
1649
1652
(1 row)
setval
@ -30,7 +30,7 @@
setval
--------
11
13
(1 row)
setval

View File

@ -13,5 +13,5 @@ TZDATAFILE="`ls -t tzdata*.tar.gz|tail -n 1`"
mkdir tzdata && cd tzdata && tar -xfz ../$TZDATAFILE
)
vzic --olson-dir tzdata --output-dir vtimezones
vzic --pure --olson-dir tzdata --output-dir vtimezones
echo "Olson `echo $TZDATAFILE | cut -f1 -d.`" >vtimezones/primary-source