Merge branch 'prometheus-metrics-database-1.3.2' into 'master'

Prometheus metrics (and  database 1.3.2)

This adds support for a /metrics.php endpoint which can be scraped by Prometheus for collecting monitoring and performance data.  The metrics can work in two different ways.

Firstly, they can work as a simple set of ever-increasing counters.  This is the basic mode, using PostgreSQL database sequences for the underlying data, and hence the new database version associated here.

Alternatively, they can work with memcache to build a more detailed performance picture with more advanced metrics about requests and processing.

If you enable memcache enough to get metrics, you will also get detailed result caching in DAViCal, which seems to work well, but if strange things start to happen that disappear when cache is disabled then it would be great if you could file a detailed bug report.

See merge request !32
This commit is contained in:
Jim Fenton 2016-07-14 21:10:13 +00:00
commit 2aba60d9e4
61 changed files with 1031 additions and 693 deletions

3
.gitignore vendored
View File

@ -41,3 +41,6 @@ zonedb/tzcode
zonedb/tzdata
zonedb/vtimezones
zonedb/*.tar.gz
.idea
*.orig
zonedb/releases

View File

@ -438,3 +438,26 @@ $c->admin_email ='calendar-admin@example.com';
// // 'debug_jid' => 'otheruser@example.com' // send a copy of all publishes to this jid
// );
// include ( 'pubsub.php' );
/***************************************************************************
* *
* Detailed Metrics *
* *
***************************************************************************/
/*
* This enables a /metrics.php URL containing detailed metrics about the
* operation of DAViCal. Ideally you will be running memcache if you are
* interested in keeping metrics, but there is a simple metrics collection
* available to you without running memcache.
*
* Note that there is currently no way of enabling metrics via memcache
* without memcache being enabled for all of DAViCal.
*/
// $c->metrics_style = 'counters'; // Just the simple counter-based metrics
// $c->metrics_style = 'memcache'; // Only the metrics using memcache
// $c->metrics_style = 'both'; // Both styles of metrics
// $c->metrics_collectors = array('127.0.0.1'); // Restrict access to only this IP address
// $c->metrics_require_user = 'metricsuser'; // Restrict access to only connections authenticating as this user

View File

@ -58,6 +58,26 @@ GRANT SELECT,UPDATE
ON principal_type_principal_type_id_seq
ON sync_tokens_sync_token_seq
ON timezones_our_tzno_seq
ON metrics_count_acl
ON metrics_count_bind
ON metrics_count_delete
ON metrics_count_delticket
ON metrics_count_get
ON metrics_count_head
ON metrics_count_lock
ON metrics_count_mkcalendar
ON metrics_count_mkcol
ON metrics_count_mkticket
ON metrics_count_move
ON metrics_count_options
ON metrics_count_post
ON metrics_count_propfind
ON metrics_count_proppatch
ON metrics_count_put
ON metrics_count_report
ON metrics_count_unknown
ON metrics_count_unlock
GRANT SELECT
ON supported_locales

View File

@ -406,6 +406,23 @@ CREATE TABLE calendar_alarm (
trigger_state CHAR DEFAULT 'N' -- 'N' => 'New/Needs setting', 'A' = 'Active', 'O' = 'Old'
);
CREATE TABLE calendar_attendee_email_status (
email_status_id INT8 PRIMARY KEY,
description TEXT NOT NULL
);
INSERT INTO calendar_attendee_email_status (email_status_id, description)
VALUES
(1, 'waiting for invitation to be sent'),
(2, 'invitation has been sent'),
(3, 'waiting for schedule change to be sent'),
(4, 'schedule change has been sent'),
(11, 'attendee has accepted'),
(12, 'attendee indicated maybe'),
(13, 'attendee has refused')
;
CREATE TABLE calendar_attendee (
dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE,
status TEXT,
@ -417,6 +434,8 @@ CREATE TABLE calendar_attendee (
property TEXT, -- The full text of the property
attendee_state TEXT, -- Internal DAViCal processing state
weak_etag TEXT, -- The week_etag applying for this attendee state
email_status INT REFERENCES calendar_attendee_email_status(email_status_id) DEFAULT 1 NOT NULL,
is_remote BOOLEAN DEFAULT false,
PRIMARY KEY ( dav_id, attendee )
);
@ -449,4 +468,25 @@ $$ LANGUAGE plpgsql ;
ALTER TABLE dav_binding ADD CONSTRAINT "dav_name_does_not_exist"
CHECK (NOT real_path_exists(dav_name));
SELECT new_db_revision(1,2,12, 'Decembre' );
-- We create a bunch of counters for reporting basic statistics
CREATE SEQUENCE metrics_count_get;
CREATE SEQUENCE metrics_count_put;
CREATE SEQUENCE metrics_count_propfind;
CREATE SEQUENCE metrics_count_proppatch;
CREATE SEQUENCE metrics_count_report;
CREATE SEQUENCE metrics_count_head;
CREATE SEQUENCE metrics_count_options;
CREATE SEQUENCE metrics_count_post;
CREATE SEQUENCE metrics_count_mkcalendar;
CREATE SEQUENCE metrics_count_mkcol;
CREATE SEQUENCE metrics_count_delete;
CREATE SEQUENCE metrics_count_move;
CREATE SEQUENCE metrics_count_acl;
CREATE SEQUENCE metrics_count_lock;
CREATE SEQUENCE metrics_count_unlock;
CREATE SEQUENCE metrics_count_mkticket;
CREATE SEQUENCE metrics_count_delticket;
CREATE SEQUENCE metrics_count_bind;
CREATE SEQUENCE metrics_count_unknown;
SELECT new_db_revision(1,3,2, 'Luty' );

36
dba/patches/1.3.1.sql Normal file
View File

@ -0,0 +1,36 @@
-- Notable enhancement: Add/Alter tables for dealing with remote attendee handling
BEGIN;
SELECT check_db_revision(1,2,12);
CREATE TABLE calendar_attendee_email_status (
email_status_id INT8 PRIMARY KEY,
description TEXT NOT NULL
);
INSERT INTO calendar_attendee_email_status (email_status_id, description)
VALUES
(1, 'waiting for invitation to be sent'),
(2, 'invitation has been sent'),
(3, 'waiting for schedule change to be sent'),
(4, 'schedule change has been sent'),
(11, 'attendee has accepted'),
(12, 'attendee indicated maybe'),
(13, 'attendee has refused')
;
ALTER TABLE calendar_attendee
ADD COLUMN email_status INT REFERENCES calendar_attendee_email_status(email_status_id) DEFAULT 1 NOT NULL ;
ALTER TABLE calendar_attendee
ADD COLUMN is_remote BOOLEAN DEFAULT FALSE;
-- A new year! http://blogs.transparent.com/polish/names-of-the-months-and-their-meaning/
SELECT new_db_revision(1,3,1, 'Styczeń' );
COMMIT;
ROLLBACK;

32
dba/patches/1.3.2.sql Normal file
View File

@ -0,0 +1,32 @@
-- Notable enhancement: Sequence counters for reporting metrics for monitoring.
BEGIN;
SELECT check_db_revision(1,3,1);
CREATE SEQUENCE metrics_count_get;
CREATE SEQUENCE metrics_count_put;
CREATE SEQUENCE metrics_count_propfind;
CREATE SEQUENCE metrics_count_proppatch;
CREATE SEQUENCE metrics_count_report;
CREATE SEQUENCE metrics_count_head;
CREATE SEQUENCE metrics_count_options;
CREATE SEQUENCE metrics_count_post;
CREATE SEQUENCE metrics_count_mkcalendar;
CREATE SEQUENCE metrics_count_mkcol;
CREATE SEQUENCE metrics_count_delete;
CREATE SEQUENCE metrics_count_move;
CREATE SEQUENCE metrics_count_acl;
CREATE SEQUENCE metrics_count_lock;
CREATE SEQUENCE metrics_count_unlock;
CREATE SEQUENCE metrics_count_mkticket;
CREATE SEQUENCE metrics_count_delticket;
CREATE SEQUENCE metrics_count_bind;
CREATE SEQUENCE metrics_count_unknown;
-- A new year! http://blogs.transparent.com/polish/names-of-the-months-and-their-meaning/
SELECT new_db_revision(1,3,2, 'Luty' );
COMMIT;
ROLLBACK;

View File

@ -42,6 +42,27 @@ function early_exception_handler($e) {
}
set_exception_handler('early_exception_handler');
function early_catch_fatal_error() {
global $request;
if ( !empty($request) ) return;
// Getting Last Error
$e = error_get_last();
// Check if Last error is of type FATAL
if (isset($e['type']) && $e['type'] == E_ERROR) {
if ( !headers_sent() ) {
header("Content-type: text/plain");
header( sprintf("HTTP/1.1 %d %s", 500, getStatusMessage(500)) );
}
echo "PHP Fatal error: ".$e['message']."\n";
echo "At line ", $e['line'], " of ", $e['file'], "\n";
error_log("PHP Fatal Error: '".$e['message']. "' at line ". $e['line']. " of ". $e['file']);
}
}
register_shutdown_function('early_catch_fatal_error');
$c->default_timezone = ini_get ( 'date.timezone' );
if (empty ( $c->default_timezone )) {
if (isset ( $_SERVER ['HTTP_X_DAVICAL_TESTCASE'] )) {

View File

@ -75,6 +75,17 @@ function send_dav_header() {
require_once('CalDAVRequest.php');
$request = new CalDAVRequest();
function late_catch_fatal_error() {
global $request;
// Getting Last Error
$e = error_get_last();
if (isset($e['type']) && $e['type'] == E_ERROR) {
$request->DoResponse(500, "Fatal PHP Error");
}
}
register_shutdown_function('late_catch_fatal_error');
//if ( $request->method == 'OPTIONS' || $c->always_send_dav_header )
send_dav_header(); // Avoid polluting global namespace
@ -94,50 +105,56 @@ if ( ! ($request->IsPrincipal() || isset($request->collection) || $request->meth
param_to_global('add_member', '.*', 'add-member');
$add_member = isset($add_member);
switch ( $request->method ) {
case 'OPTIONS': include_once('caldav-OPTIONS.php'); break;
case 'REPORT': include_once('caldav-REPORT.php'); break;
case 'PROPFIND': include('caldav-PROPFIND.php'); break;
case 'GET': include('caldav-GET.php'); break;
case 'HEAD': include('caldav-GET.php'); break;
case 'PROPPATCH': include('caldav-PROPPATCH.php'); break;
case 'POST':
if ( $request->content_type != 'text/vcard' && !$add_member ) {
include('caldav-POST.php');
try {
switch ( $request->method ) {
case 'OPTIONS': include_once('caldav-OPTIONS.php'); break;
case 'REPORT': include_once('caldav-REPORT.php'); break;
case 'PROPFIND': include('caldav-PROPFIND.php'); break;
case 'GET': include('caldav-GET.php'); break;
case 'HEAD': include('caldav-GET.php'); break;
case 'PROPPATCH': include('caldav-PROPPATCH.php'); break;
case 'POST':
if ( $request->content_type != 'text/vcard' && !$add_member ) {
include('caldav-POST.php');
break;
}
case 'PUT':
switch( $request->content_type ) {
case 'text/calendar':
include('caldav-PUT-vcalendar.php');
break;
case 'text/vcard':
case 'text/x-vcard':
include('caldav-PUT-vcard.php');
break;
default:
include('caldav-PUT-default.php');
break;
}
break;
}
case 'PUT':
switch( $request->content_type ) {
case 'text/calendar':
include('caldav-PUT-vcalendar.php');
break;
case 'text/vcard':
case 'text/x-vcard':
include('caldav-PUT-vcard.php');
break;
default:
include('caldav-PUT-default.php');
break;
}
break;
case 'MKCALENDAR': include('caldav-MKCOL.php'); break;
case 'MKCOL': include('caldav-MKCOL.php'); break;
case 'DELETE': include('caldav-DELETE.php'); break;
case 'MOVE': include('caldav-MOVE.php'); break;
case 'ACL': include('caldav-ACL.php'); break;
case 'LOCK': include('caldav-LOCK.php'); break;
case 'UNLOCK': include('caldav-LOCK.php'); break;
case 'MKTICKET': include('caldav-MKTICKET.php'); break;
case 'DELTICKET': include('caldav-DELTICKET.php'); break;
case 'BIND': include('caldav-BIND.php'); break;
case 'MKCALENDAR': include('caldav-MKCOL.php'); break;
case 'MKCOL': include('caldav-MKCOL.php'); break;
case 'DELETE': include('caldav-DELETE.php'); break;
case 'MOVE': include('caldav-MOVE.php'); break;
case 'ACL': include('caldav-ACL.php'); break;
case 'LOCK': include('caldav-LOCK.php'); break;
case 'UNLOCK': include('caldav-LOCK.php'); break;
case 'MKTICKET': include('caldav-MKTICKET.php'); break;
case 'DELTICKET': include('caldav-DELTICKET.php'); break;
case 'BIND': include('caldav-BIND.php'); break;
case 'TESTRRULE': include('test-RRULE-v2.php'); break;
case 'TESTRRULE': include('test-RRULE-v2.php'); break;
default:
dbg_error_log( 'caldav', 'Unhandled request method >>%s<<', $request->method );
dbg_log_array( 'caldav', '_SERVER', $_SERVER, true );
dbg_error_log( 'caldav', 'RAW: %s', str_replace("\n", '',str_replace("\r", '', $request->raw_post)) );
default:
dbg_error_log( 'caldav', 'Unhandled request method >>%s<<', $request->method );
dbg_log_array( 'caldav', '_SERVER', $_SERVER, true );
dbg_error_log( 'caldav', 'RAW: %s', str_replace("\n", '',str_replace("\r", '', $request->raw_post)) );
}
} catch (Exception $e) {
trace_bug('DAViCal Fatal Error');
$request->DoResponse( 500, translate('DAViCal Fatal Error') );
}
$request->DoResponse( 400, translate('The application program does not understand that request.') );

147
htdocs/metrics.php Normal file
View File

@ -0,0 +1,147 @@
<?php
/**
* DAViCal - metrics page for Prometheus
*
* @package davical
* @subpackage metrics
* @author Andrew McMillan <andrew@mcmillan.net.nz>
* @copyright Andrew McMillan <andrew@mcmillan.net.nz>
* @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later
*/
header("Content-type: text/plain; version=0.4.0");
require_once('./always.php');
// If necessary, validate they are coming from an allowed address
if ( isset($c->metrics_collectors) && !in_array($_SERVER['REMOTE_ADDR'], $c->metrics_collectors) ) {
echo "Nope.";
exit(0);
}
// If necessary, validate that they are coming in as an authorized user
if ( isset($c->metrics_require_user) ) {
require_once('HTTPAuthSession.php');
$session = new HTTPAuthSession();
if ( $session->username != $c->metrics_require_user ) {
$session->AuthFailedResponse();
echo "Nope.";
exit(0);
}
}
// Validate that the metrics are actually turned on!
if ( !isset($c->metrics_style) || $c->metrics_style === false ) {
echo "Metrics are not enabled.";
exit(0);
}
// Helper function to ensure we get the metric format consistent
function print_metric( $name, $qualifiers, $value ) {
print $name;
if ( !empty($qualifiers) ) {
print '{';
$continuation = '';
foreach( $qualifiers AS $k => $v ) {
if ( $continuation == '' ) {
$continuation = ',';
} else {
print $continuation;
}
printf( '%s="%s"', $k, $v);
}
print '}';
}
echo ' ', $value, "\n";
}
// If they want 'both' or 'all' or something then that's what they will get
// If they don't want counters, they must want to use memcache!
if ( $c->metrics_style != 'counters' ) {
// These are the preferred metrics, which include some internal details
// of the request processing.
include_once('AwlCache.php');
$cache = getCacheInstance();
$index = unserialize($cache->get('metrics', 'index'));
print "# HELP caldav_request_status The DAViCal requests broken down by HTTP method and response status\n";
print "# TYPE caldav_request_status counter\n";
foreach( $index['methods'] AS $method => $ignored ) {
foreach( $index['statuses'] AS $status => $ignored ) {
$count = $cache->get('metrics', $method.':'.$status );
if ( $count !== false ) {
print_metric("caldav_request_status", array('method'=>$method, 'status'=>$status), $count);
}
}
}
print "\n";
print "# HELP caldav_response_bytes The DAViCal response size by HTTP method\n";
print "# TYPE caldav_response_bytes counter\n";
foreach( $index['methods'] AS $method => $ignored ) {
$count = $cache->get('metrics', $method.':size');
print_metric("caldav_request_bytes", array('method'=>$method), $count);
}
$timings = array('script', 'query', 'flush');
print "\n";
print "# HELP caldav_request_microseconds The DAViCal response time taken in general, in queries, and in flushing buffers\n";
print "# TYPE caldav_request_microseconds counter\n";
foreach( $index['methods'] AS $method => $ignored ) {
foreach( $timings AS $timing ) {
$count = $cache->get('metrics', $method.':'.$timing.'_time');
print_metric("caldav_request_microseconds", array('method'=>$method, 'timing'=>$timing), $count);
}
}
}
// If they don't want memcache, they must want to use counters!
if ( $c->metrics_style != 'memcache' ) {
// These are more basic metrics. Just counts of requests, by type.
$sql = <<<QUERY
SELECT
(SELECT last_value FROM metrics_count_get) AS get_count,
(SELECT last_value FROM metrics_count_put) AS put_count,
(SELECT last_value FROM metrics_count_propfind) AS propfind_count,
(SELECT last_value FROM metrics_count_proppatch) AS proppatch_count,
(SELECT last_value FROM metrics_count_report) AS report_count,
(SELECT last_value FROM metrics_count_head) AS head_count,
(SELECT last_value FROM metrics_count_options) AS options_count,
(SELECT last_value FROM metrics_count_post) AS post_count,
(SELECT last_value FROM metrics_count_mkcalendar) AS mkcalendar_count,
(SELECT last_value FROM metrics_count_mkcol) AS mkcol_count,
(SELECT last_value FROM metrics_count_delete) AS delete_count,
(SELECT last_value FROM metrics_count_move) AS move_count,
(SELECT last_value FROM metrics_count_acl) AS acl_count,
(SELECT last_value FROM metrics_count_lock) AS lock_count,
(SELECT last_value FROM metrics_count_unlock) AS unlock_count,
(SELECT last_value FROM metrics_count_mkticket) AS mkticket_count,
(SELECT last_value FROM metrics_count_delticket) AS delticket_count,
(SELECT last_value FROM metrics_count_bind) AS bind_count,
(SELECT last_value FROM metrics_count_unknown) AS unknown_count
QUERY;
$qry = new AwlQuery($sql);
$result = $qry->Exec("metrics", __LINE__ , __FILE__);
$row = (array) $qry->Fetch();
print "\n";
print "# HELP caldav_request_count The DAViCal requests broken down by HTTP method (get, put, propfind, etc.).\n";
print "# TYPE caldav_request_count counter\n";
foreach ($row as $k => $v) {
print_metric("caldav_request_count", array( "method" => str_replace("_count", "", $k)), $v);
}
}
print "\n";
print "# HELP davical_up Are the servers up.\n";
print "# TYPE davical_up gauge\n";
print_metric("davical_up", array('server'=>$c->sysabbr), 1);
if ( function_exists('memory_get_usage') ) {
print "\n";
print "# HELP davical_process_memory How much memory is this process using.\n";
print "# TYPE davical_process_memory gauge\n";
print_metric("davical_process_memory", array("pid" => getmypid(), 'type' => 'curr'), memory_get_usage());
print_metric("davical_process_memory", array("pid" => getmypid(), 'type' => 'peak'), memory_get_peak_usage());
}

View File

@ -269,7 +269,7 @@ class CalDAVRequest
}
if ( !is_int($this->depth) && "infinity" == $this->depth ) $this->depth = DEPTH_INFINITY;
$this->depth = intval($this->depth);
/**
* MOVE/COPY use a "Destination" header and (optionally) an "Overwrite" one.
*/
@ -1301,20 +1301,22 @@ EOSQL;
}
}
$script_finish = microtime(true);
$script_time = $script_finish - $c->script_start_time;
$message_length = strlen($message);
if ( $message != '' ) {
if ( !headers_sent() ) header( "Content-Length: ".strlen($message) );
if ( !headers_sent() ) header( "Content-Length: ".$message_length );
echo $message;
}
if ( isset($c->dbg['caldav']) && $c->dbg['caldav'] ) {
if ( strlen($message) > 100 || strstr($message, "\n") ) {
$message = substr( preg_replace("#\s+#m", ' ', $message ), 0, 100) . (strlen($message) > 100 ? "..." : "");
if ( $message_length > 100 || strstr($message, "\n") ) {
$message = substr( preg_replace("#\s+#m", ' ', $message ), 0, 100) . ($message_length > 100 ? "..." : "");
}
dbg_error_log("caldav", "Status: %d, Message: %s, User: %d, Path: %s", $status, $message, $session->principal->user_no(), $this->path);
}
if ( isset($c->dbg['statistics']) && $c->dbg['statistics'] ) {
$script_time = microtime(true) - $c->script_start_time;
$memory = '';
if ( function_exists('memory_get_usage') ) {
$memory = sprintf( ', Memory: %dk, Peak: %dk', memory_get_usage()/1024, memory_get_peak_usage(true)/1024);
@ -1327,14 +1329,97 @@ EOSQL;
}
catch( Exception $ignored ) {}
if ( isset($c->metrics_style) && $c->metrics_style !== false ) {
$flush_time = microtime(true) - $script_finish;
$this->DoMetrics($status, $message_length, $script_time, $flush_time);
}
if ( isset($c->exit_after_memory_exceeds) && function_exists('memory_get_peak_usage') && memory_get_peak_usage(true) > $c->exit_after_memory_exceeds ) { // 64M
@dbg_error_log("statistics", "Peak memory use exceeds %d bytes (%d) - killing process %d", $c->exit_after_memory_exceeds, memory_get_peak_usage(true), getmypid());
register_shutdown_function( 'CalDAVRequest::kill_on_exit' );
}
exit(0);
}
/**
* Record the metrics related to this request.
*
* @param status The HTTP status code for this response
* @param response_size The size of the response (bytes).
* @param script_time The time taken to generate the response (pre-sending)
* @param flush_time The time taken to send the response (buffers flushed)
*/
function DoMetrics($status, $response_size, $script_time, $flush_time) {
global $c;
static $ns = 'metrics';
$method = (empty($this->method) ? 'UNKNOWN' : $this->method);
// If they want 'both' or 'all' or something then that's what they will get
// If they don't want counters, they must want to use memcache!
if ( $c->metrics_style != 'counters' ) {
$cache = getCacheInstance();
if ( $cache->isActive() ) {
$base_key = $method.':';
$count_like_this = $cache->increment( $ns, $base_key.$status );
$cache->increment( $ns, $base_key.'size', $response_size );
$cache->increment( $ns, $base_key.'script_time', intval($script_time * 1000000) );
$cache->increment( $ns, $base_key.'flush_time', intval($flush_time * 1000000) );
$cache->increment( $ns, $base_key.'query_time', intval($c->total_query_time * 1000000) );
if ( $count_like_this == 1 ) {
// We need to maintain a set of details regarding the methods and statuses we have
// encountered, so we know what to retrieve. Since this is the first one like
// this, we add it to the index.
try {
$index = unserialize($cache->get($ns, 'index'));
} catch (Exception $e) {
$index = array('methods' => array(), 'statuses' => array());
}
$index['methods'][$method] = 1;
$index['statuses'][$status] = 1;
$cache->set($ns, 'index', serialize($index), 0);
}
}
else {
error_log("Full statistics are only available with a working Memcache configuration");
}
}
// If they don't want memcache, they must want to use counters!
if ( $c->metrics_style != 'memcache' ) {
$qstring = "SELECT nextval('%s')";
switch( $method ) {
case 'OPTIONS':
case 'REPORT':
case 'PROPFIND':
case 'GET':
case 'PUT':
case 'HEAD':
case 'PROPPATCH':
case 'POST':
case 'MKCALENDAR':
case 'MKCOL':
case 'DELETE':
case 'MOVE':
case 'ACL':
case 'LOCK':
case 'UNLOCK':
case 'MKTICKET':
case 'DELTICKET':
case 'BIND':
$counter = strtolower($this->method);
break;
default:
$counter = 'unknown';
break;
}
$qry = new AwlQuery( "SELECT nextval('metrics_count_" . $counter . "')" );
$qry->Exec('always',__LINE__,__FILE__);
}
}
}

View File

@ -150,7 +150,7 @@ class Principal {
throw new Exception('Can only retrieve a Principal by user_no,principal_id,username or email address');
}
$cache = new AwlCache();
$cache = getCacheInstance();
if ( $use_cache && isset($session->principal_id) ) {
switch ( $type ) {
case 'user_no':
@ -498,7 +498,7 @@ class Principal {
public function unCache() {
if ( !isset($this->cacheNs) ) return;
$cache = new AwlCache();
$cache = getCacheInstance();
$cache->delete($this->cacheNs, null );
}
@ -601,7 +601,7 @@ class Principal {
}
static public function cacheFlush( $where, $whereparams=array() ) {
$cache = new AwlCache();
$cache = getCacheInstance();
if ( !$cache->isActive() ) return;
$qry = new AwlQuery('SELECT dav_name FROM dav_principal WHERE '.$where, $whereparams );
if ( $qry->Exec('Principal',__FILE__,__LINE__) ) {
@ -612,7 +612,7 @@ class Principal {
}
static public function cacheDelete( $type, $value ) {
$cache = new AwlCache();
$cache = getCacheInstance();
if ( !$cache->isActive() ) return;
if ( $type == 'username' ) {
$value = '/'.$value.'/';

View File

@ -42,6 +42,27 @@ function early_exception_handler($e) {
}
set_exception_handler('early_exception_handler');
function early_catch_fatal_error() {
global $request;
if ( !empty($request) ) return;
// Getting Last Error
$e = error_get_last();
// Check if Last error is of type FATAL
if (isset($e['type']) && $e['type'] == E_ERROR) {
if ( !headers_sent() ) {
header("Content-type: text/plain");
header( sprintf("HTTP/1.1 %d %s", 500, getStatusMessage(500)) );
}
echo "PHP Fatal error: ".$e['message']."\n";
echo "At line ", $e['line'], " of ", $e['file'], "\n";
error_log("PHP Fatal Error: '".$e['message']. "' at line ". $e['line']. " of ". $e['file']);
}
}
register_shutdown_function('early_catch_fatal_error');
$c->default_timezone = ini_get ( 'date.timezone' );
if (empty ( $c->default_timezone )) {
if (isset ( $_SERVER ['HTTP_X_DAVICAL_TESTCASE'] )) {

View File

@ -20,6 +20,8 @@ $lock_opener = $request->FailIfLocked();
require_once('schedule-functions.php');
function delete_collection( $id ) {
global $session, $request;
$params = array( ':collection_id' => $id );
$qry = new AwlQuery('SELECT child.collection_id AS child_id FROM collection child JOIN collection parent ON (parent.dav_name = child.parent_container) WHERE parent.collection_id = :collection_id', $params );
if ( $qry->Exec('DELETE',__LINE__,__FILE__) && $qry->rows() > 0 ) {
@ -43,6 +45,7 @@ function delete_collection( $id ) {
if ( !$dav_resource->Exists() )$request->DoResponse( 404 );
if ( ! ( $dav_resource->resource_id() > 0 ) ) {
@dbg_error_log( "DELETE", ": failed: User: %d, ETag: %s, Path: %s, ResourceID: %d", $session->user_no, $request->etag_if_match, $request->path, $dav_resource->resource_id());
$request->DoResponse( 403 );
}
@ -50,11 +53,16 @@ $qry = new AwlQuery();
$qry->Begin();
if ( $dav_resource->IsCollection() ) {
$cache = getCacheInstance();
$myLock = $cache->acquireLock('collection-'.$dav_resource->parent_path());
if ( $dav_resource->IsBinding() ) {
$params = array( ':dav_name' => $dav_resource->dav_name() );
if ( $qry->QDo("DELETE FROM dav_binding WHERE dav_name = :dav_name", $params )
&& $qry->Commit() ) {
$cache->delete( 'collection-'.$dav_resource->dav_name(), null );
$cache->delete( 'collection-'.$dav_resource->parent_path(), null );
$cache->releaseLock($myLock);
@dbg_error_log( "DELETE", "DELETE: Binding: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path);
$request->DoResponse( 204 );
}
@ -62,11 +70,13 @@ if ( $dav_resource->IsCollection() ) {
else {
if ( delete_collection( $dav_resource->resource_id() ) && $qry->Commit() ) {
// Uncache anything to do with the collection
$cache = getCacheInstance();
$cache->delete( 'collection-'.$dav_resource->dav_name(), null );
$cache->delete( 'collection-'.$dav_resource->parent_path(), null );
$cache->releaseLock($myLock);
$request->DoResponse( 204 );
}
}
$cache->releaseLock($myLock);
}
else {
if ( isset($request->etag_if_match) && $request->etag_if_match != $dav_resource->unique_tag() && $request->etag_if_match != "*" ) {

View File

@ -98,7 +98,7 @@ function controlRequestContainer( $username, $user_no, $path, $caldav_context, $
$sql = 'SELECT * FROM collection WHERE dav_name = :dav_name';
$qry = new AwlQuery( $sql, array( ':dav_name' => $request_container) );
if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) {
rollback_on_error( $caldav_context, $user_no, $path );
rollback_on_error( $caldav_context, $user_no, $path, 'Database error in: '.$sql );
}
if ( !isset($c->readonly_webdav_collections) || $c->readonly_webdav_collections == true ) {
if ( $qry->rows() == 0 ) {
@ -132,7 +132,7 @@ VALUES( :user_no, :parent_container, :dav_name, :dav_etag, :dav_displayname, TRU
$sql = 'UPDATE collection SET publicly_readable = :is_public::boolean WHERE collection_id = :collection_id';
$params = array( ':is_public' => ($public?'t':'f'), ':collection_id' => $collection->collection_id );
if ( ! $qry->QDo($sql,$params) ) {
rollback_on_error( $caldav_context, $user_no, $path );
rollback_on_error( $caldav_context, $user_no, $path, 'Database error in: '.$sql );
}
}
}
@ -373,7 +373,7 @@ function do_scheduling_reply( vCalendar $resource, vProperty $organizer ) {
$response = '3.7'; // Organizer was not found on server.
if ( !$organizer_calendar->Exists() ) {
dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"',
$organizer_calendar->dav_name(), $schedule_target->username());
$organizer_calendar->dav_name(), $organizer_principal->username());
$response = '5.2'; // No scheduling support for user
}
else {
@ -384,7 +384,7 @@ function do_scheduling_reply( vCalendar $resource, vProperty $organizer ) {
$response = '1.2'; // Scheduling reply delivered successfully
if ( $organizer_calendar->WriteCalendarMember($schedule_original, false, false, $segment_name) === false ) {
dbg_error_log('ERROR','Could not write updated calendar member to %s',
$attendee_calendar->dav_name(), $attendee_calendar->dav_name(), $schedule_target->username());
$organizer_calendar->dav_name());
trace_bug('Failed to write scheduling resource.');
}
}
@ -694,10 +694,10 @@ function import_addressbook_collection( $vcard_content, $user_no, $path, $caldav
$sql = 'SELECT * FROM collection WHERE dav_name = :dav_name';
$qry = new AwlQuery( $sql, array( ':dav_name' => $path) );
if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path );
if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path, 'Database error in: '.$sql );
if ( ! $qry->rows() == 1 ) {
dbg_error_log( 'ERROR', ' PUT: Collection does not exist at "%s" for user %d', $path, $user_no );
rollback_on_error( $caldav_context, $user_no, $path );
rollback_on_error( $caldav_context, $user_no, $path, sprintf('Error: Collection does not exist at "%s" for user %d', $path, $user_no ));
}
$collection = $qry->Fetch();
@ -709,7 +709,7 @@ function import_addressbook_collection( $vcard_content, $user_no, $path, $caldav
);
if ( !$appending ) {
if ( !$qry->QDo('DELETE FROM caldav_data WHERE collection_id = :collection_id', $base_params) )
rollback_on_error( $caldav_context, $user_no, $collection->collection_id );
rollback_on_error( $caldav_context, $user_no, $collection->collection_id, 'Database error on DELETE of existing rows' );
}
$dav_data_insert = <<<EOSQL
@ -755,7 +755,7 @@ EOSQL;
if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Begin();
if ( !$qry->QDo($dav_data_insert,$dav_data_params) ) rollback_on_error( $caldav_context, $user_no, $path );
if ( !$qry->QDo($dav_data_insert,$dav_data_params) ) rollback_on_error( $caldav_context, $user_no, $path, 'Database error on: '.$dav_data_insert );
$qry->QDo('SELECT dav_id FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $dav_data_params[':dav_name']));
if ( $qry->rows() == 1 && $row = $qry->Fetch() ) {
@ -768,7 +768,7 @@ EOSQL;
}
if ( !(isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import) ) {
if ( ! $qry->Commit() ) rollback_on_error( $caldav_context, $user_no, $path);
if ( ! $qry->Commit() ) rollback_on_error( $caldav_context, $user_no, $path, 'Database error on COMMIT');
}
}
@ -808,7 +808,7 @@ function import_calendar_collection( $ics_content, $user_no, $path, $caldav_cont
if ( !$appending && isset($displayname) ) {
$sql = 'UPDATE collection SET dav_displayname = :displayname WHERE dav_name = :dav_name';
$qry = new AwlQuery( $sql, array( ':displayname' => $displayname, ':dav_name' => $path) );
if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path );
if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path, 'Database error on: '.$sql );
}
@ -839,10 +839,10 @@ function import_calendar_collection( $ics_content, $user_no, $path, $caldav_cont
$sql = 'SELECT * FROM collection WHERE dav_name = :dav_name';
$qry = new AwlQuery( $sql, array( ':dav_name' => $path) );
if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path );
if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path, 'Database error on: '.$sql );
if ( ! $qry->rows() == 1 ) {
dbg_error_log( 'ERROR', ' PUT: Collection does not exist at "%s" for user %d', $path, $user_no );
rollback_on_error( $caldav_context, $user_no, $path );
rollback_on_error( $caldav_context, $user_no, $path, sprintf( 'Error: Collection does not exist at "%s" for user %d', $path, $user_no ));
}
$collection = $qry->Fetch();
$collection_id = $collection->collection_id;
@ -944,7 +944,7 @@ EOSQL;
// Write to the caldav_data table
if ( !$qry->QDo( ($inserting ? $dav_data_insert : $dav_data_update), $dav_data_params) )
rollback_on_error( $caldav_context, $user_no, $path );
rollback_on_error( $caldav_context, $user_no, $path, 'Database error on:'. ($inserting ? $dav_data_insert : $dav_data_update));
// Get the dav_id for this row
$qry->QDo('SELECT dav_id FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $dav_data_params[':dav_name']));
@ -1249,7 +1249,7 @@ function write_resource( DAVResource $resource, $caldav_data, DAVResource $colle
}
if ( $qry->rows() != 1 || !($row = $qry->Fetch()) ) {
// No dav_id? => We're toast!
trace_bug( 'No dav_id for "%s" on %s!!!', $path, ($create_resource ? 'create': 'update'));
trace_bug( 'No dav_id for "%s" on %s!!!', $path, ($put_action_type == 'INSERT' ? 'create': 'update'));
rollback_on_error( $caldav_context, $user_no, $path);
return false;
}

View File

@ -54,7 +54,8 @@ if ( count($qry_filters) == 0 ) {
$qry_limit = -1; // everything
$qry_filters_combination='OR';
if ( is_array($qry_filters) ) {
$filters_parent = $xmltree->GetPath('/urn:ietf:params:xml:ns:carddav:addressbook-query/urn:ietf:params:xml:ns:carddav:filter')[0];
$filters_parent = $xmltree->GetPath('/urn:ietf:params:xml:ns:carddav:addressbook-query/urn:ietf:params:xml:ns:carddav:filter');
$filters_parent = $filters_parent[0];
// only anyof (OR) or allof (AND) allowed, if missing anyof is default (RFC6352 10.5)
if ( $filters_parent->GetAttribute("test") == 'allof' ) {
$qry_filters_combination='AND';

View File

@ -33,7 +33,7 @@ if ( $sync_level == DEPTH_INFINITY ) {
$sync_tokens = $xmltree->GetPath('/DAV::sync-collection/DAV::sync-token');
if ( isset($sync_tokens[0]) ) $sync_token = $sync_tokens[0]->GetContent();
if ( !isset($sync_token) ) $sync_token = 0;
$sync_token = intval(str_ireplace('data:,', '', $sync_token ));
$sync_token = intval(str_replace('data:,', '', strtolower($sync_token) ));
dbg_error_log( 'sync', " sync-token: %s", $sync_token );
$proplist = array();

View File

@ -73,7 +73,7 @@ function doItipAttendeeReply( vCalendar $resource, $partstat ) {
if ( !$organizer_principal->Exists() ) {
dbg_error_log( 'schedule', 'Unknown ORGANIZER "%s" - unable to notify.', $organizer->Value() );
header( "Debug: Could maybe do the iMIP message dance for organizer ". $organizer->Value() );
//TODO: header( "Debug: Could maybe do the iMIP message dance for organizer ". $organizer->Value() );
return true;
}
@ -177,7 +177,7 @@ function doItipAttendeeReply( vCalendar $resource, $partstat ) {
}
}
else {
header( "Debug: Could maybe do the iMIP message dance for attendee ". $email );
//TODO: header( "Debug: Could maybe do the iMIP message dance for attendee ". $email );
}
}
@ -280,7 +280,7 @@ function processItipCancel( vCalendar $vcal, vProperty $attendee, WritableCollec
global $request;
dbg_error_log( 'schedule', 'Processing iTIP CANCEL to %s', $attendee->Value());
header( "Debug: Could maybe do the iMIP message dance for attendee ". $attendee->Value() );
//TODO: header( "Debug: Could maybe do the iMIP message dance for attendee ". $attendee->Value() );
if ( !$attendee_calendar->Exists() ) {
if ( doImipMessage('CANCEL', $attendee_principal->email(), $vcal) ) {
return '1.1'; // Scheduling whoosit 'Sent'
@ -332,7 +332,7 @@ function processItipCancel( vCalendar $vcal, vProperty $attendee, WritableCollec
*/
function deliverItipCancel( vCalendar $iTIP, vProperty $attendee, WritableCollection $attendee_inbox ) {
$attendee_inbox->WriteCalendarMember($iTIP, false);
header( "Debug: Could maybe do the iMIP message dance canceling for attendee: ".$attendee->Value());
//TODO: header( "Debug: Could maybe do the iMIP message dance canceling for attendee: ".$attendee->Value());
}
require_once('Multipart.php');

View File

@ -24,6 +24,7 @@ $_SERVER['SERVER_NAME'] = 'localhost';
$args = (object) array();
$args->debug = false;
$args->set_last = false;
$args->slow_query_threshold = false; // Won't set higher threshold by default
$args->future = 'P400D';
$args->near_past = 'P1D';
@ -33,11 +34,12 @@ $debugging = null;
function parse_arguments() {
global $args;
$opts = getopt( 'f:p:s:d:lh' );
$opts = getopt( 'f:p:q:s:d:lh' );
foreach( $opts AS $k => $v ) {
switch( $k ) {
case 'f': $args->future = $v; break;
case 'p': $args->near_past = $v; break;
case 'q': $args->slow_query_threshold = $v; break;
case 's': $_SERVER['SERVER_NAME'] = $v; break;
case 'd': $args->debug = true; $debugging = explode(',',$v); break;
case 'l': $args->set_last = true; break;
@ -59,6 +61,7 @@ Usage:
-l Try to set the 'last' alarm date in historical alarms
-q <secs> Warn about slow queries which take longer than this many seconds (use AWL default).
-d xxx Enable debugging where 'xxx' is a comma-separated list of debug subsystems
USAGE;
@ -75,6 +78,9 @@ if ( $args->debug && is_array($debugging )) {
$args->near_past = '-' . $args->near_past;
require_once("./always.php");
if ( $args->slow_query_threshold !== false ) {
$c->default_query_warning_threshold = $args->slow_query_threshold;
}
require_once('AwlQuery.php');
require_once('RRule-v2.php');
require_once('vCalendar.php');

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "0e8180a5a3677b7b3e2156a8053882fe"
Content-Length: 1124
ETag: "303850daab72c97380c725e4d1b90be7"
Content-Length: 1160
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -32,7 +32,7 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<getcontentlength>731</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
</prop>
<status>HTTP/1.1 200 OK</status>
@ -43,7 +43,7 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<getcontentlength>705</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
</prop>
<status>HTTP/1.1 200 OK</status>

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "5fec6bf01e8802ec9facdb7adc7ab93f"
Content-Length: 1124
ETag: "88e33ac34090404791bb5d0d5208993f"
Content-Length: 1160
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -32,7 +32,7 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<getcontentlength>731</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
</prop>
<status>HTTP/1.1 200 OK</status>
@ -43,7 +43,7 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<getcontentlength>747</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -4,7 +4,7 @@ DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
Etag: "2c32a2f8aba853654eb17fe037a4db4d"
Content-Length: 780
Content-Type: text/calendar; charset="utf-8"
Content-Type: text/calendar; component=vevent; charset="utf-8"
BEGIN:VCALENDAR
CALSCALE:GREGORIAN

View File

@ -4,7 +4,7 @@ DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
Etag: "fdcc61a1e0d76b177ad81cf7c8bdacaf"
Content-Length: 1106
Content-Type: text/calendar; charset="utf-8"
Content-Type: text/calendar; component=vevent; charset="utf-8"
BEGIN:VCALENDAR
CALSCALE:GREGORIAN

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "8ea04cfcf16d0c3ec23b67c6a479cce4"
Content-Length: 4293
ETag: "b9794562e6fd1d230515a6d4a8c211a4"
Content-Length: 4504
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -31,7 +31,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getetag>"2c32a2f8aba853654eb17fe037a4db4d"</getetag>
</prop>
@ -42,7 +42,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/20061101T073004Z.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getetag>"fdcc61a1e0d76b177ad81cf7c8bdacaf"</getetag>
</prop>
@ -53,7 +53,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getetag>"a1c6404d61190f9574e2bfd69383f144"</getetag>
</prop>
@ -64,7 +64,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getetag>"08a435c2abaf38f4a50a997343c098a7"</getetag>
</prop>
@ -75,7 +75,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getetag>"5def8ae2b20893a1c7f4dbaeb008f2f1"</getetag>
</prop>
@ -86,7 +86,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getetag>"ac90acd649c25070b1a2a17fb31a105a"</getetag>
</prop>
@ -97,7 +97,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<resourcetype/>
<getetag>"509b0f0d8a3363379f9f5727f5dd74a0"</getetag>
</prop>
@ -108,7 +108,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<resourcetype/>
<getetag>"cb3d9dc3e8c157f53eba3ea0e1e0f146"</getetag>
</prop>
@ -119,7 +119,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<resourcetype/>
<getetag>"00ad5eb1eb5507884710b0b66aa5d5c4"</getetag>
</prop>
@ -130,7 +130,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<resourcetype/>
<getetag>"a2990674708634a311bb98a59865ca50"</getetag>
</prop>
@ -141,7 +141,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getetag>"e8060931f30c1798ac58ffbe4ec0bffc"</getetag>
</prop>
@ -152,7 +152,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<resourcetype/>
<getetag>"8f581a053df6d833254756dfd7553d37"</getetag>
</prop>

View File

@ -2,19 +2,21 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 326
Content-Length: 359
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
<href>/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<displayname/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<displayname/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
dav_displayname: >iCal Calendar<

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "a8d0404f59a91a8a4ef9ab3fd8b356b2"
Content-Length: 1354
ETag: "1a0c2d97d0118e22caff1e90871e41dd"
Content-Length: 1206
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -18,9 +18,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:schedule-inbox/>
</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>
@ -29,6 +26,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -39,9 +37,6 @@ Content-Type: text/xml; charset="utf-8"
<prop>
<displayname>test meeting</displayname>
<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>
@ -51,6 +46,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "ccb220eb6558890eb17d5e1da8b45269"
Content-Length: 785
ETag: "294d286a110b237df5c768aaeb7dda5a"
Content-Length: 711
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -18,9 +18,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:schedule-outbox/>
</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>
@ -29,6 +26,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "80d6f30ef4f9a0b77a2eb6c28d935804"
Content-Length: 4594
ETag: "fb3fbd1d4d0cc1e1926d0291a2be17a8"
Content-Length: 4076
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -18,9 +18,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<principal/>
</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>
@ -29,6 +26,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -43,9 +41,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:calendar/>
</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>
@ -54,6 +49,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -68,9 +64,6 @@ Content-Type: text/xml; charset="utf-8"
<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>
@ -79,6 +72,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -93,9 +87,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:schedule-inbox/>
</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>
@ -104,6 +95,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -118,9 +110,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:schedule-outbox/>
</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>
@ -129,6 +118,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -143,9 +133,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C:calendar-proxy-read/>
</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>
@ -154,6 +141,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -168,9 +156,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C:calendar-proxy-write/>
</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>
@ -179,6 +164,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "71bc1e00471cee14ce3dd36752320e6c"
Content-Length: 17305
ETag: "2f6bc2532047e694057b7ec66bd80b65"
Content-Length: 15568
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -18,11 +18,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<principal/>
</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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -72,6 +67,7 @@ Content-Type: text/xml; charset="utf-8"
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -95,11 +91,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:calendar/>
</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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -151,6 +142,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -169,11 +161,6 @@ Content-Type: text/xml; charset="utf-8"
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -223,6 +210,7 @@ Content-Type: text/xml; charset="utf-8"
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -246,11 +234,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:calendar/>
</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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -302,6 +285,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -325,11 +309,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:schedule-inbox/>
</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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -390,6 +369,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -413,11 +393,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:schedule-outbox/>
</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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -478,6 +453,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -502,11 +478,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:calendar/>
</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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -557,6 +528,7 @@ Content-Type: text/xml; charset="utf-8"
<C:xmpp-uri/>
<C1:calendar-description/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -575,11 +547,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C:calendar-proxy-read/>
</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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -632,6 +599,7 @@ Content-Type: text/xml; charset="utf-8"
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -650,11 +618,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C:calendar-proxy-write/>
</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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -707,6 +670,7 @@ Content-Type: text/xml; charset="utf-8"
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>

View File

@ -2,17 +2,19 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 335
Content-Length: 368
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:A="http://apple.com/ns/ical/">
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<A:calendar-color/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<A:calendar-color/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -2,17 +2,19 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 335
Content-Length: 368
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:A="http://apple.com/ns/ical/">
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<A:calendar-order/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<A:calendar-order/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -2,15 +2,17 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 267
Content-Length: 298
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop/>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop/>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "3c1ce7546b05f98eabd8cbe7680646d8"
Content-Length: 19736
ETag: "84f6ab86e65ad459a930d65cf80aad20"
Content-Length: 17999
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -21,11 +21,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -75,6 +70,7 @@ Content-Type: text/xml; charset="utf-8"
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -111,11 +107,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -165,6 +156,7 @@ Content-Type: text/xml; charset="utf-8"
<C:xmpp-server/>
<C:xmpp-uri/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -194,11 +186,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -248,6 +235,7 @@ Content-Type: text/xml; charset="utf-8"
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -282,11 +270,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -338,6 +321,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -372,11 +356,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -437,6 +416,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -471,11 +451,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -536,6 +511,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -571,11 +547,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -626,6 +597,7 @@ Content-Type: text/xml; charset="utf-8"
<C:xmpp-uri/>
<C1:calendar-description/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -655,11 +627,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -712,6 +679,7 @@ Content-Type: text/xml; charset="utf-8"
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>
@ -741,11 +709,6 @@ Content-Type: text/xml; charset="utf-8"
<owner>
<href>/caldav.php/user1/</href>
</owner>
<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>/caldav.php/user1/home/</href>
</C1:schedule-default-calendar-URL>
@ -798,6 +761,7 @@ Content-Type: text/xml; charset="utf-8"
<A:calendar-color/>
<A:calendar-order/>
<C1:supported-calendar-component-set/>
<C1:calendar-free-busy-set/>
<C1:schedule-calendar-transp/>
<quota-available-bytes/>
<quota-used-bytes/>

View File

@ -4,24 +4,19 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "0bb6363a73d84bce63210f8956a67b9c"
Content-Length: 29507
ETag: "803271349e94513fdc607adc2fc2df6f"
Content-Length: 27776
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:M="http://me.com/_namespace/" xmlns:A="http://apple.com/ns/ical/" xmlns:C2="urn:ietf:params:xml:ns:carddav">
<multistatus xmlns="DAV:" xmlns:C="http://calendarserver.org/ns/" xmlns:C1="urn:ietf:params:xml:ns:caldav" xmlns:M="http://me.com/_namespace/" xmlns:A="http://apple.com/ns/ical/" xmlns:C2="urn:ietf:params:xml:ns:carddav">
<response>
<href>/caldav.php/user1/</href>
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/?add-member</href>
<href>/caldav.php/user1/?add_member</href>
</add-member>
<C: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>
</C:calendar-free-busy-set>
<current-user-privilege-set>
<privilege>
<all/>
@ -58,7 +53,7 @@ Content-Type: text/xml; charset="utf-8"
</privilege>
</current-user-privilege-set>
<displayname>User 1</displayname>
<C1:getctag>"89514106d00f37cc9ee71689c450d2ef"</C1:getctag>
<C:getctag>"89514106d00f37cc9ee71689c450d2ef"</C:getctag>
<owner>
<href>/caldav.php/user1/</href>
</owner>
@ -69,9 +64,9 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<principal/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
</C1:schedule-default-calendar-URL>
<supported-report-set>
<supported-report>
<report>
@ -99,30 +94,31 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<A:calendar-color/>
<C:calendar-description/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<A:calendar-order/>
<C:calendar-timezone/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C2:max-resource-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C:supported-calendar-component-set/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C1:supported-calendar-component-set/>
<sync-token/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -132,14 +128,9 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/home/?add-member</href>
<href>/caldav.php/user1/home/?add_member</href>
</add-member>
<A:calendar-color>#0252D4FF</A:calendar-color>
<C: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>
</C:calendar-free-busy-set>
<A:calendar-order>1</A:calendar-order>
<current-user-privilege-set>
<privilege>
@ -161,7 +152,7 @@ Content-Type: text/xml; charset="utf-8"
<write-acl/>
</privilege>
<privilege>
<C:read-free-busy/>
<C1:read-free-busy/>
</privilege>
<privilege>
<write/>
@ -180,7 +171,7 @@ Content-Type: text/xml; charset="utf-8"
</privilege>
</current-user-privilege-set>
<displayname>user1 home</displayname>
<C1:getctag>"243d78db0cc75a576d2603eef69efdc9"</C1:getctag>
<C:getctag>"243d78db0cc75a576d2603eef69efdc9"</C:getctag>
<owner>
<href>/caldav.php/user1/</href>
</owner>
@ -189,16 +180,16 @@ Content-Type: text/xml; charset="utf-8"
</resource-id>
<resourcetype>
<collection/>
<C:calendar/>
<C1:calendar/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
<C:supported-calendar-component-set>
<C:comp name="VEVENT"/>
<C:comp name="VTODO"/>
<C:comp name="VJOURNAL"/>
</C:supported-calendar-component-set>
</C1:schedule-default-calendar-URL>
<C1:supported-calendar-component-set>
<C1:comp name="VEVENT"/>
<C1:comp name="VTODO"/>
<C1:comp name="VJOURNAL"/>
</C1:supported-calendar-component-set>
<supported-report-set>
<supported-report>
<report>
@ -222,17 +213,17 @@ Content-Type: text/xml; charset="utf-8"
</supported-report>
<supported-report>
<report>
<C:calendar-query/>
<C1:calendar-query/>
</report>
</supported-report>
<supported-report>
<report>
<C:calendar-multiget/>
<C1:calendar-multiget/>
</report>
</supported-report>
<supported-report>
<report>
<C:free-busy-query/>
<C1:free-busy-query/>
</report>
</supported-report>
</supported-report-set>
@ -242,26 +233,27 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<C:calendar-description/>
<C:calendar-timezone/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C2:max-resource-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -271,13 +263,8 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/addresses/?add-member</href>
<href>/caldav.php/user1/addresses/?add_member</href>
</add-member>
<C: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>
</C:calendar-free-busy-set>
<current-user-privilege-set>
<privilege>
<all/>
@ -314,7 +301,7 @@ Content-Type: text/xml; charset="utf-8"
</privilege>
</current-user-privilege-set>
<displayname>user1 addresses</displayname>
<C1:getctag>"24c9e15e52afc47c225b757e7bee1f9d"</C1:getctag>
<C:getctag>"24c9e15e52afc47c225b757e7bee1f9d"</C:getctag>
<C2:max-resource-size>65500</C2:max-resource-size>
<owner>
<href>/caldav.php/user1/</href>
@ -326,9 +313,9 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C2:addressbook/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
</C1:schedule-default-calendar-URL>
<supported-report-set>
<supported-report>
<report>
@ -367,28 +354,29 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<A:calendar-color/>
<C:calendar-description/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<A:calendar-order/>
<C:calendar-timezone/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C:supported-calendar-component-set/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C1:supported-calendar-component-set/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -398,13 +386,8 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/created/?add-member</href>
<href>/caldav.php/user1/created/?add_member</href>
</add-member>
<C: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>
</C:calendar-free-busy-set>
<current-user-privilege-set>
<privilege>
<all/>
@ -425,7 +408,7 @@ Content-Type: text/xml; charset="utf-8"
<write-acl/>
</privilege>
<privilege>
<C:read-free-busy/>
<C1:read-free-busy/>
</privilege>
<privilege>
<write/>
@ -444,7 +427,7 @@ Content-Type: text/xml; charset="utf-8"
</privilege>
</current-user-privilege-set>
<displayname>created</displayname>
<C1:getctag>"bac273dae96780a3c8ed0c032266322c"</C1:getctag>
<C:getctag>"bac273dae96780a3c8ed0c032266322c"</C:getctag>
<owner>
<href>/caldav.php/user1/</href>
</owner>
@ -453,16 +436,16 @@ Content-Type: text/xml; charset="utf-8"
</resource-id>
<resourcetype>
<collection/>
<C:calendar/>
<C1:calendar/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
<C:supported-calendar-component-set>
<C:comp name="VEVENT"/>
<C:comp name="VTODO"/>
<C:comp name="VJOURNAL"/>
</C:supported-calendar-component-set>
</C1:schedule-default-calendar-URL>
<C1:supported-calendar-component-set>
<C1:comp name="VEVENT"/>
<C1:comp name="VTODO"/>
<C1:comp name="VJOURNAL"/>
</C1:supported-calendar-component-set>
<supported-report-set>
<supported-report>
<report>
@ -486,17 +469,17 @@ Content-Type: text/xml; charset="utf-8"
</supported-report>
<supported-report>
<report>
<C:calendar-query/>
<C1:calendar-query/>
</report>
</supported-report>
<supported-report>
<report>
<C:calendar-multiget/>
<C1:calendar-multiget/>
</report>
</supported-report>
<supported-report>
<report>
<C:free-busy-query/>
<C1:free-busy-query/>
</report>
</supported-report>
</supported-report-set>
@ -506,28 +489,29 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<A:calendar-color/>
<C:calendar-description/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<A:calendar-order/>
<C:calendar-timezone/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C2:max-resource-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -537,13 +521,8 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/.in/?add-member</href>
<href>/caldav.php/user1/.in/?add_member</href>
</add-member>
<C: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>
</C:calendar-free-busy-set>
<current-user-privilege-set>
<privilege>
<all/>
@ -579,20 +558,20 @@ Content-Type: text/xml; charset="utf-8"
<unbind/>
</privilege>
<privilege>
<C:schedule-deliver/>
<C1:schedule-deliver/>
</privilege>
<privilege>
<C:schedule-deliver-invite/>
<C1:schedule-deliver-invite/>
</privilege>
<privilege>
<C:schedule-deliver-reply/>
<C1:schedule-deliver-reply/>
</privilege>
<privilege>
<C:schedule-query-freebusy/>
<C1:schedule-query-freebusy/>
</privilege>
</current-user-privilege-set>
<displayname>User 1 Inbox</displayname>
<C1:getctag>"435712d0457c874316eb9cdd41cf92bc"</C1:getctag>
<C:getctag>"435712d0457c874316eb9cdd41cf92bc"</C:getctag>
<owner>
<href>/caldav.php/user1/</href>
</owner>
@ -601,16 +580,16 @@ Content-Type: text/xml; charset="utf-8"
</resource-id>
<resourcetype>
<collection/>
<C:schedule-inbox/>
<C1:schedule-inbox/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
<C:supported-calendar-component-set>
<C:comp name="VEVENT"/>
<C:comp name="VTODO"/>
<C:comp name="VFREEBUSY"/>
</C:supported-calendar-component-set>
</C1:schedule-default-calendar-URL>
<C1:supported-calendar-component-set>
<C1:comp name="VEVENT"/>
<C1:comp name="VTODO"/>
<C1:comp name="VFREEBUSY"/>
</C1:supported-calendar-component-set>
<supported-report-set>
<supported-report>
<report>
@ -639,28 +618,29 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<A:calendar-color/>
<C:calendar-description/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<A:calendar-order/>
<C:calendar-timezone/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C2:max-resource-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -670,13 +650,8 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/.out/?add-member</href>
<href>/caldav.php/user1/.out/?add_member</href>
</add-member>
<C: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>
</C:calendar-free-busy-set>
<current-user-privilege-set>
<privilege>
<all/>
@ -712,20 +687,20 @@ Content-Type: text/xml; charset="utf-8"
<unbind/>
</privilege>
<privilege>
<C:schedule-send/>
<C1:schedule-send/>
</privilege>
<privilege>
<C:schedule-send-invite/>
<C1:schedule-send-invite/>
</privilege>
<privilege>
<C:schedule-send-reply/>
<C1:schedule-send-reply/>
</privilege>
<privilege>
<C:schedule-send-freebusy/>
<C1:schedule-send-freebusy/>
</privilege>
</current-user-privilege-set>
<displayname>User 1 Outbox</displayname>
<C1:getctag>"1"</C1:getctag>
<C:getctag>"1"</C:getctag>
<owner>
<href>/caldav.php/user1/</href>
</owner>
@ -734,16 +709,16 @@ Content-Type: text/xml; charset="utf-8"
</resource-id>
<resourcetype>
<collection/>
<C:schedule-outbox/>
<C1:schedule-outbox/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
<C:supported-calendar-component-set>
<C:comp name="VEVENT"/>
<C:comp name="VTODO"/>
<C:comp name="VFREEBUSY"/>
</C:supported-calendar-component-set>
</C1:schedule-default-calendar-URL>
<C1:supported-calendar-component-set>
<C1:comp name="VEVENT"/>
<C1:comp name="VTODO"/>
<C1:comp name="VFREEBUSY"/>
</C1:supported-calendar-component-set>
<supported-report-set>
<supported-report>
<report>
@ -772,28 +747,29 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<A:calendar-color/>
<C:calendar-description/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<A:calendar-order/>
<C:calendar-timezone/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C2:max-resource-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -803,14 +779,9 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/?add-member</href>
<href>/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/?add_member</href>
</add-member>
<A:calendar-color>#391B71A0</A:calendar-color>
<C: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>
</C:calendar-free-busy-set>
<current-user-privilege-set>
<privilege>
<all/>
@ -831,7 +802,7 @@ Content-Type: text/xml; charset="utf-8"
<write-acl/>
</privilege>
<privilege>
<C:read-free-busy/>
<C1:read-free-busy/>
</privilege>
<privilege>
<write/>
@ -850,7 +821,7 @@ Content-Type: text/xml; charset="utf-8"
</privilege>
</current-user-privilege-set>
<displayname>iCal Calendar</displayname>
<C1:getctag>"ac192d10783fff90598af2facc8259df"</C1:getctag>
<C:getctag>"ac192d10783fff90598af2facc8259df"</C:getctag>
<owner>
<href>/caldav.php/user1/</href>
</owner>
@ -859,16 +830,16 @@ Content-Type: text/xml; charset="utf-8"
</resource-id>
<resourcetype>
<collection/>
<C:calendar/>
<C1:calendar/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
<C:supported-calendar-component-set>
<C:comp name="VEVENT"/>
<C:comp name="VTODO"/>
<C:comp name="VJOURNAL"/>
</C:supported-calendar-component-set>
</C1:schedule-default-calendar-URL>
<C1:supported-calendar-component-set>
<C1:comp name="VEVENT"/>
<C1:comp name="VTODO"/>
<C1:comp name="VJOURNAL"/>
</C1:supported-calendar-component-set>
<supported-report-set>
<supported-report>
<report>
@ -892,17 +863,17 @@ Content-Type: text/xml; charset="utf-8"
</supported-report>
<supported-report>
<report>
<C:calendar-query/>
<C1:calendar-query/>
</report>
</supported-report>
<supported-report>
<report>
<C:calendar-multiget/>
<C1:calendar-multiget/>
</report>
</supported-report>
<supported-report>
<report>
<C:free-busy-query/>
<C1:free-busy-query/>
</report>
</supported-report>
</supported-report-set>
@ -912,27 +883,28 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<C:calendar-description/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<A:calendar-order/>
<C:calendar-timezone/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C2:max-resource-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -942,13 +914,8 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/calendar-proxy-read/?add-member</href>
<href>/caldav.php/user1/calendar-proxy-read/?add_member</href>
</add-member>
<C: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>
</C:calendar-free-busy-set>
<current-user-privilege-set>
<privilege>
<all/>
@ -969,7 +936,7 @@ Content-Type: text/xml; charset="utf-8"
<write-acl/>
</privilege>
<privilege>
<C:read-free-busy/>
<C1:read-free-busy/>
</privilege>
<privilege>
<write/>
@ -988,17 +955,17 @@ Content-Type: text/xml; charset="utf-8"
</privilege>
</current-user-privilege-set>
<displayname>/user1/calendar-proxy-read/</displayname>
<C1:getctag>"abad5538c4aa570cc54b6ff0d36a4565"</C1:getctag>
<C:getctag>"abad5538c4aa570cc54b6ff0d36a4565"</C:getctag>
<owner>
<href>/caldav.php/user1/</href>
</owner>
<resourcetype>
<collection/>
<C1:calendar-proxy-read/>
<C:calendar-proxy-read/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
</C1:schedule-default-calendar-URL>
<supported-report-set>
<supported-report>
<report>
@ -1022,17 +989,17 @@ Content-Type: text/xml; charset="utf-8"
</supported-report>
<supported-report>
<report>
<C:calendar-query/>
<C1:calendar-query/>
</report>
</supported-report>
<supported-report>
<report>
<C:calendar-multiget/>
<C1:calendar-multiget/>
</report>
</supported-report>
<supported-report>
<report>
<C:free-busy-query/>
<C1:free-busy-query/>
</report>
</supported-report>
<supported-report>
@ -1051,31 +1018,32 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<A:calendar-color/>
<C:calendar-description/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<A:calendar-order/>
<C:calendar-timezone/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C2:max-resource-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<resource-id/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C:supported-calendar-component-set/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C1:supported-calendar-component-set/>
<sync-token/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -1085,13 +1053,8 @@ Content-Type: text/xml; charset="utf-8"
<propstat>
<prop>
<add-member>
<href>/caldav.php/user1/calendar-proxy-write/?add-member</href>
<href>/caldav.php/user1/calendar-proxy-write/?add_member</href>
</add-member>
<C: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>
</C:calendar-free-busy-set>
<current-user-privilege-set>
<privilege>
<all/>
@ -1112,7 +1075,7 @@ Content-Type: text/xml; charset="utf-8"
<write-acl/>
</privilege>
<privilege>
<C:read-free-busy/>
<C1:read-free-busy/>
</privilege>
<privilege>
<write/>
@ -1131,17 +1094,17 @@ Content-Type: text/xml; charset="utf-8"
</privilege>
</current-user-privilege-set>
<displayname>/user1/calendar-proxy-write/</displayname>
<C1:getctag>"04ba2c2164225fb5abce13f2c523b6c7"</C1:getctag>
<C:getctag>"04ba2c2164225fb5abce13f2c523b6c7"</C:getctag>
<owner>
<href>/caldav.php/user1/</href>
</owner>
<resourcetype>
<collection/>
<C1:calendar-proxy-write/>
<C:calendar-proxy-write/>
</resourcetype>
<C:schedule-default-calendar-URL>
<C1:schedule-default-calendar-URL>
<href>/caldav.php/user1/home/</href>
</C:schedule-default-calendar-URL>
</C1:schedule-default-calendar-URL>
<supported-report-set>
<supported-report>
<report>
@ -1165,17 +1128,17 @@ Content-Type: text/xml; charset="utf-8"
</supported-report>
<supported-report>
<report>
<C:calendar-query/>
<C1:calendar-query/>
</report>
</supported-report>
<supported-report>
<report>
<C:calendar-multiget/>
<C1:calendar-multiget/>
</report>
</supported-report>
<supported-report>
<report>
<C:free-busy-query/>
<C1:free-busy-query/>
</report>
</supported-report>
<supported-report>
@ -1194,31 +1157,32 @@ Content-Type: text/xml; charset="utf-8"
</propstat>
<propstat>
<prop>
<C1:allowed-sharing-modes/>
<C:allowed-sharing-modes/>
<M:bulk-requests/>
<A:calendar-color/>
<C:calendar-description/>
<C1:calendar-description/>
<C1:calendar-free-busy-set/>
<A:calendar-order/>
<C:calendar-timezone/>
<C1:calendar-timezone/>
<C2:max-image-size/>
<C2:max-resource-size/>
<C1:me-card/>
<C1:publish-url/>
<C1:push-transports/>
<C1:pushkey/>
<C:me-card/>
<C:publish-url/>
<C:push-transports/>
<C:pushkey/>
<quota-available-bytes/>
<quota-used-bytes/>
<A:refreshrate/>
<resource-id/>
<C:schedule-calendar-transp/>
<C1:source/>
<C1:subscribed-strip-alarms/>
<C1:subscribed-strip-attachments/>
<C1:subscribed-strip-todos/>
<C:supported-calendar-component-set/>
<C1:schedule-calendar-transp/>
<C:source/>
<C:subscribed-strip-alarms/>
<C:subscribed-strip-attachments/>
<C:subscribed-strip-todos/>
<C1:supported-calendar-component-set/>
<sync-token/>
<C1:xmpp-server/>
<C1:xmpp-uri/>
<C:xmpp-server/>
<C:xmpp-uri/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>

View File

@ -3,20 +3,22 @@ Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Location: /caldav.php/user1/SOHO%20collection/
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 424
Content-Length: 459
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:X="com.apple.ical:">
<href>/caldav.php/user1/SOHO%20collection/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<displayname/>
<C:calendar-description/>
<X:calendarcolor/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/SOHO%20collection/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<displayname/>
<C:calendar-description/>
<X:calendarcolor/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -46,7 +46,7 @@
<displayname>Lunch with David</displayname>
<getcontentlanguage/>
<getcontentlength>747</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"2c32a2f8aba853654eb17fe037a4db4d"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -81,7 +81,7 @@
<displayname>A Changed Meeting</displayname>
<getcontentlanguage/>
<getcontentlength>829</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"bcc402382688cb3e8e57379c757dbcb0"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -116,7 +116,7 @@
<displayname>Weekly Project Meeting</displayname>
<getcontentlanguage/>
<getcontentlength>999</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"a1c6404d61190f9574e2bfd69383f144"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -151,7 +151,7 @@
<displayname>Confidential Event</displayname>
<getcontentlanguage/>
<getcontentlength>956</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"08a435c2abaf38f4a50a997343c098a7"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -186,7 +186,7 @@
<displayname>Private Event</displayname>
<getcontentlanguage/>
<getcontentlength>970</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"5def8ae2b20893a1c7f4dbaeb008f2f1"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -221,7 +221,7 @@
<displayname>Tentative Event</displayname>
<getcontentlanguage/>
<getcontentlength>929</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"ac90acd649c25070b1a2a17fb31a105a"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -256,7 +256,7 @@
<displayname>Incomplete, uncancelled</displayname>
<getcontentlanguage/>
<getcontentlength>415</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<getetag>"509b0f0d8a3363379f9f5727f5dd74a0"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -291,7 +291,7 @@
<displayname>50% Complete, uncancelled</displayname>
<getcontentlanguage/>
<getcontentlength>449</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<getetag>"cb3d9dc3e8c157f53eba3ea0e1e0f146"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -326,7 +326,7 @@
<displayname>Due 7/8/7 16:30, completed</displayname>
<getcontentlanguage/>
<getcontentlength>961</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<getetag>"00ad5eb1eb5507884710b0b66aa5d5c4"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -361,7 +361,7 @@
<displayname>A Cancelled Task, with a start and due date</displayname>
<getcontentlanguage/>
<getcontentlength>1001</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<getetag>"a2990674708634a311bb98a59865ca50"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -396,7 +396,7 @@
<displayname>Morning Meeting</displayname>
<getcontentlanguage/>
<getcontentlength>1119</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"e8060931f30c1798ac58ffbe4ec0bffc"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -431,7 +431,7 @@
<displayname>Release 0.9.3</displayname>
<getcontentlanguage/>
<getcontentlength>1013</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vtodo</getcontenttype>
<getetag>"8f581a053df6d833254756dfd7553d37"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -466,7 +466,7 @@
<displayname>Beer O'Clock</displayname>
<getcontentlanguage/>
<getcontentlength>769</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"55f02f66966ee150320383803d1e0d34"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -501,7 +501,7 @@
<displayname>Morning Mgmt Mtg</displayname>
<getcontentlanguage/>
<getcontentlength>313</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"6f16959eee5c920b45548840b1e9ea19"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -536,7 +536,7 @@
<displayname>BBQ @ ML's</displayname>
<getcontentlanguage/>
<getcontentlength>981</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"efd0257efbc898d059c200d1391af060"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -571,7 +571,7 @@
<displayname>New Event</displayname>
<getcontentlanguage/>
<getcontentlength>676</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"257b9df4aaf573a578af4aadd033abf4"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -606,7 +606,7 @@
<displayname>In Central Europe, 2pm, Oct 5th for 1 hour</displayname>
<getcontentlanguage/>
<getcontentlength>761</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"6ddd18264a9d40c1c9d37a005eeb7e4f"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -641,7 +641,7 @@
<displayname>In Prague, 10am, Oct 7th for 1 hour</displayname>
<getcontentlanguage/>
<getcontentlength>710</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"4a3aa58a3e11487e87d87024465d4182"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -676,7 +676,7 @@
<displayname>Party all day!</displayname>
<getcontentlanguage/>
<getcontentlength>772</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"165746adbab8bc0c8336a63cc5332ff2"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>
@ -711,7 +711,7 @@
<displayname>Woohoo! Time to Par-tay!</displayname>
<getcontentlanguage/>
<getcontentlength>800</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"2a09ef8c6a9e0b6bc16228359b99d8e7"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>

View File

@ -93,7 +93,7 @@
<displayname>Morning Mgmt Mtg</displayname>
<getcontentlanguage/>
<getcontentlength>313</getcontentlength>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<getetag>"6f16959eee5c920b45548840b1e9ea19"</getetag>
<getlastmodified>Dow, 01 Jan 2000 00:00:00 GMT</getlastmodified>
<resourcetype/>

View File

@ -4,7 +4,7 @@
<href>/caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getcontentlength>313</getcontentlength>
<displayname>Morning Mgmt Mtg</displayname>

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 1256
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 7623
Content-Type: text/plain
Content-Type: text/plain;charset=UTF-8
#!/usr/bin/php
Testing the RRule v2 Library

View File

@ -1,7 +1,7 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 14720
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

View File

@ -1,7 +1,7 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 2708
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 2708
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

View File

@ -1,7 +1,7 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 222
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

View File

@ -1,7 +1,7 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 14720
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

View File

@ -1,7 +1,7 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 14720
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

View File

@ -2,22 +2,24 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 448
Content-Length: 484
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:D="urn:mcmillan:bogus:xml:ns:davical">
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<resourcetype/>
<displayname/>
<C:schedule-calendar-transp/>
<D:arbitrary/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<resourcetype/>
<displayname/>
<C:schedule-calendar-transp/>
<D:arbitrary/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
changed_last_5m: >1<

View File

@ -2,20 +2,22 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 313
Content-Length: 347
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<resourcetype/>
<displayname/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<resourcetype/>
<displayname/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
changed_last_5m: >1<

View File

@ -2,21 +2,23 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 374
Content-Length: 409
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:D="http://dotcal.com/principal-properties">
<href>/caldav.php/user1/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<D:country/>
<D:countrycode/>
<displayname/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<D:country/>
<D:countrycode/>
<displayname/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
displayname: >User Number One PROPPATCH'd in<

View File

@ -2,21 +2,23 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 374
Content-Length: 409
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:D="http://dotcal.com/principal-properties">
<href>/caldav.php/user1/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<displayname/>
<D:country/>
<D:countrycode/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<displayname/>
<D:country/>
<D:countrycode/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
displayname: >User 1<

View File

@ -2,23 +2,25 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 462
Content-Length: 499
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:X="http://xmlns.comical.net/birds">
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<resourcetype/>
<displayname/>
<C:schedule-calendar-transp/>
<X:spotted-grebe/>
<C:cats/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<resourcetype/>
<displayname/>
<C:schedule-calendar-transp/>
<X:spotted-grebe/>
<C:cats/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
changed_last_5m: >1<

View File

@ -2,21 +2,23 @@ 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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 386
Content-Length: 421
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">
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<resourcetype/>
<displayname/>
<C:schedule-calendar-transp/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<response>
<href>/caldav.php/user1/home/</href>
<responsedescription>All requested changes were made.</responsedescription>
<propstat>
<prop>
<resourcetype/>
<displayname/>
<C:schedule-calendar-transp/>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
changed_last_5m: >1<

View File

@ -1,7 +1,7 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 14720
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
Content-Length: 2752
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

View File

@ -1,7 +1,7 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
Content-Length: 14720
Content-Type: text/calendar
Content-Type: text/calendar;charset=UTF-8
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "f640afc35eb1b3892d84512c69748944"
Content-Length: 4581
ETag: "4958f56cf9ec116e609399113e3e021e"
Content-Length: 3633
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -18,10 +18,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<principal/>
</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>
@ -30,6 +26,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -44,10 +41,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:calendar/>
</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>
@ -56,6 +49,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -70,10 +64,6 @@ Content-Type: text/xml; charset="utf-8"
<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>
@ -82,6 +72,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -97,10 +88,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C1:calendar/>
</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>
@ -108,6 +95,7 @@ Content-Type: text/xml; charset="utf-8"
<prop>
<C1:calendar-description/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -122,10 +110,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C:calendar-proxy-read/>
</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>
@ -134,6 +118,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
@ -148,10 +133,6 @@ Content-Type: text/xml; charset="utf-8"
<collection/>
<C:calendar-proxy-write/>
</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>
@ -160,6 +141,7 @@ Content-Type: text/xml; charset="utf-8"
<C1:calendar-description/>
<A:calendar-color/>
<A:calendar-order/>
<C1:calendar-free-busy-set/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>

View File

@ -4,7 +4,7 @@ DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
Etag: "bcc402382688cb3e8e57379c757dbcb0"
Content-Length: 676
Content-Type: text/calendar; charset="utf-8"
Content-Type: text/calendar; component=vevent; charset="utf-8"
BEGIN:VCALENDAR
CALSCALE:GREGORIAN

View File

@ -3,7 +3,7 @@ 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"
Content-Type: text/calendar; component=vevent; charset="utf-8"
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

View File

@ -3,7 +3,7 @@ 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"
Content-Type: text/calendar; component=vevent; charset="utf-8"
BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN

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, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "looks like an etag"
Content-Length: 5464
Content-Length: 5572
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/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getcontentlength>999</getcontentlength>
<displayname>Weekly Project Meeting</displayname>
@ -44,7 +44,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getcontentlength>956</getcontentlength>
<displayname>Confidential Event</displayname>
@ -76,7 +76,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getcontentlength>970</getcontentlength>
<displayname>Private Event</displayname>
@ -108,7 +108,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getcontentlength>929</getcontentlength>
<displayname>Tentative Event</displayname>
@ -140,7 +140,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getcontentlength>769</getcontentlength>
<displayname>Beer O'Clock</displayname>
@ -172,7 +172,7 @@ Content-Type: text/xml; charset="utf-8"
<href>/caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics</href>
<propstat>
<prop>
<getcontenttype>text/calendar</getcontenttype>
<getcontenttype>text/calendar; component=vevent</getcontenttype>
<resourcetype/>
<getcontentlength>313</getcontentlength>
<displayname>Morning Mgmt Mtg</displayname>

View File

@ -1,4 +1,4 @@
The database is version 9.4 currently at revision 1.2.11.
The database is version 9.5 currently at revision 1.3.1.
No patches were applied.
Supported locales updated.
Updated view: dav_principal.sql applied.

View File

@ -52,7 +52,7 @@ INSERT INTO collection (user_no, parent_container, dav_name, dav_etag,
SELECT user_no, '/' || username || '/', '/' || username || '/home/', md5(username),
username || ' home', TRUE, '2009-06-03', '2009-06-04',
FALSE, FALSE, user_no + 150, '<DAV::collection/><urn:ietf:params:xml:ns:caldav:calendar/>'
FROM usr;
FROM usr ORDER BY user_no;
INSERT INTO collection (user_no, parent_container, dav_name, dav_etag,
dav_displayname, is_calendar, is_addressbook, created, modified,
@ -60,24 +60,24 @@ INSERT INTO collection (user_no, parent_container, dav_name, dav_etag,
SELECT user_no, '/' || username || '/', '/' || username || '/addresses/', md5(username),
username || ' addresses', FALSE, TRUE, '1957-07-26', '1998-03-16',
FALSE, FALSE, user_no + 450, '<DAV::collection/><urn:ietf:params:xml:ns:carddav:addressbook/>'
FROM usr;
FROM usr ORDER BY user_no;
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)
AND NOT EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Resource' AND role_member.user_no = usr.user_no)
AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no);
AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no) ORDER BY user_no;
INSERT INTO principal (type_id, user_no, displayname, default_privileges)
SELECT 2, user_no, fullname, privilege_to_bits(ARRAY['read','schedule-send','schedule-deliver']) FROM usr
WHERE EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Resource' AND role_member.user_no = usr.user_no)
AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no);
AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no) ORDER BY user_no;
INSERT INTO principal (type_id, user_no, displayname, default_privileges)
SELECT 3, user_no, fullname, privilege_to_bits(ARRAY['read-free-busy','schedule-send','schedule-deliver']) FROM usr
WHERE EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Group' AND role_member.user_no = usr.user_no)
AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no);
AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no) ORDER BY user_no;
-- Set the insert sequence to the next number, with a minimum of 1000
SELECT setval('relationship_type_rt_id_seq', (SELECT 10 UNION SELECT rt_id FROM relationship_type ORDER BY 1 DESC LIMIT 1) );
@ -114,7 +114,7 @@ UPDATE relationship r SET confers = (SELECT bit_confers FROM relationship_type r
INSERT INTO group_member ( group_id, member_id)
SELECT g.principal_id, m.principal_id
FROM relationship JOIN principal g ON(to_user=g.user_no AND g.type_id = 3) -- Group
JOIN principal m ON(from_user=m.user_no AND m.type_id IN (1,2)); -- Person | Resource
JOIN principal m ON(from_user=m.user_no AND m.type_id IN (1,2)) ORDER BY 1, 2; -- Person | Resource
INSERT INTO grants ( by_principal, to_principal, privileges, is_group )
SELECT pby.principal_id AS by_principal, pto.principal_id AS to_principal,
@ -123,4 +123,4 @@ INSERT INTO grants ( by_principal, to_principal, privileges, is_group )
JOIN usr t ON(t.user_no=r.to_user)
JOIN principal pby ON(t.user_no=pby.user_no)
JOIN principal pto ON(pto.user_no=f.user_no)
WHERE rt_id < 4 AND pby.type_id < 3;
WHERE rt_id < 4 AND pby.type_id < 3 ORDER BY 1, 2;