Store DTSTART and DTEND from user in shadow columns

We want to store the calculated dtstart and dtend in the database so we can
use SQL to fetch records. However, we also need what the user sent us so we
can allow prop-filters to be used as well.

So we store what the user sends us in dtstart_orig and dtend_orig and only
use for relevant prop-filter reports.
This commit is contained in:
Andrew Ruthven 2023-02-06 00:15:32 +13:00 committed by Florian Schlichting
parent 5a73991496
commit 15d01c8bed
37 changed files with 1321 additions and 84 deletions

View File

@ -151,7 +151,9 @@ CREATE TABLE calendar_item (
last_modified TIMESTAMP,
dtstamp TIMESTAMP,
dtstart TIMESTAMP WITH TIME ZONE,
dtstart_orig TIMESTAMP WITH TIME ZONE,
dtend TIMESTAMP WITH TIME ZONE,
dtend_orig TIMESTAMP WITH TIME ZONE,
due TIMESTAMP WITH TIME ZONE,
summary TEXT,
location TEXT,
@ -497,4 +499,4 @@ CREATE SEQUENCE metrics_count_delticket;
CREATE SEQUENCE metrics_count_bind;
CREATE SEQUENCE metrics_count_unknown;
SELECT new_db_revision(1,3,4, 'Kwiecień' );
SELECT new_db_revision(1,3,5, 'Maj' );

25
dba/patches/1.3.5.sql Normal file
View File

@ -0,0 +1,25 @@
-- Notable enhancement: add shadow columns to calendar_item
BEGIN;
SELECT check_db_revision(1,3,4);
ALTER TABLE calendar_item
ADD COLUMN dtstart_orig TIMESTAMP WITH TIME ZONE,
ADD COLUMN dtend_orig TIMESTAMP WITH TIME ZONE;
-- We don't know what the user sent us without reparsing all the VCALENDAR
-- blobs, which I'm not going to do in SQL. We'll just have to wing it, and
-- hope this is good enough (it is no better than the current situation for
-- existing deployments) and dtstart_orig and dtend_orig will end up with
-- correct data over time as users re-upload the VCALENDAR blobs.
UPDATE calendar_item
SET
dtstart_orig = dtstart,
dtend_orig = dtend;
-- http://blogs.transparent.com/polish/names-of-the-months-and-their-meaning/
SELECT new_db_revision(1,3,5, 'Maj' );
COMMIT;
ROLLBACK;

View File

@ -124,7 +124,14 @@ class WritableCollection extends DAVResource {
return false;
}
$dtstart = $first->GetPValue('DTSTART');
$calitem_params[':dtstart_orig'] = $dtstart;
if ( (!isset($dtstart) || $dtstart == '') && $first->GetPValue('DUE') != '' ) {
$dtstart = $first->GetPValue('DUE');
}
$dtend = $first->GetPValue('DTEND');
$calitem_params[':dtend_orig'] = $dtend;
if ( isset($dtend) && $dtend != '' ) {
dbg_error_log( 'PUT', ' DTEND: "%s", DTSTART: "%s", DURATION: "%s"', $dtend, $first->GetPValue('DTSTART'), $first->GetPValue('DURATION') );
$calitem_params[':dtend'] = $dtend;
@ -218,26 +225,29 @@ class WritableCollection extends DAVResource {
if ( $create_resource ) {
$sql = <<<EOSQL
INSERT INTO calendar_item (user_no, dav_name, dav_id, dav_etag, uid, dtstamp,
dtstart, dtend, summary, location, class, transp,
description, rrule, tz_id, last_modified, url, priority,
created, due, percent_complete, status, collection_id,
first_instance_start, last_instance_end )
VALUES ( :user_no, :dav_name, currval('dav_id_seq'), :etag, :uid, :dtstamp,
:dtstart, $dtend, :summary, :location, :class, :transp,
:description, :rrule, :tzid, :modified, :url, :priority,
:created, :due, :percent_complete, :status, $collection_id,
:first_instance_start, :last_instance_end)
dtstart, dtstart_orig, dtend, dtend_orig, summary, location, class, transp,
description, rrule, tz_id, last_modified, url, priority, created, due,
percent_complete, status, collection_id, first_instance_start,
last_instance_end )
VALUES ( :user_no, :dav_name, currval('dav_id_seq'), :etag, :uid, :dtstamp,
:dtstart, :dtstart_orig, $dtend, :dtend_orig, :summary, :location, :class,
:transp, :description, :rrule, :tzid, :modified, :url, :priority,
:created, :due, :percent_complete, :status, $collection_id,
:first_instance_start, :last_instance_end)
EOSQL;
$sync_change = 201;
}
else {
$sql = <<<EOSQL
UPDATE calendar_item SET dav_etag=:etag, uid=:uid, dtstamp=:dtstamp,
dtstart=:dtstart, dtend=$dtend, summary=:summary, location=:location, class=:class, transp=:transp,
description=:description, rrule=:rrule, tz_id=:tzid, last_modified=:modified, url=:url, priority=:priority,
created=:created, due=:due, percent_complete=:percent_complete, status=:status,
first_instance_start=:first_instance_start, last_instance_end=:last_instance_end
WHERE user_no=:user_no AND dav_name=:dav_name
dtstart=:dtstart, dtstart_orig=:dtstart_orig, dtend=$dtend,
dtend_orig=:dtend_orig, summary=:summary, location=:location, class=:class,
transp=:transp, description=:description, rrule=:rrule, tz_id=:tzid,
last_modified=:modified, url=:url, priority=:priority, created=:created,
due=:due, percent_complete=:percent_complete, status=:status,
first_instance_start=:first_instance_start,
last_instance_end=:last_instance_end
WHERE user_no=:user_no AND dav_name=:dav_name
EOSQL;
$sync_change = 200;
}

View File

@ -1037,19 +1037,25 @@ UPDATE caldav_data SET user_no=:user_no, caldav_data=:dav_data, dav_etag=:etag,
EOSQL;
$calitem_insert = <<<EOSQL
INSERT INTO calendar_item (user_no, dav_name, dav_id, dav_etag, uid, dtstamp, dtstart, dtend, summary, location, class, transp,
description, rrule, tz_id, last_modified, url, priority, created, due, percent_complete, status, collection_id )
VALUES ( :user_no, :dav_name, currval('dav_id_seq'), :etag, :uid, :dtstamp, :dtstart, ##dtend##, :summary, :location, :class, :transp,
:description, :rrule, :tzid, :modified, :url, :priority, :created, :due, :percent_complete, :status, :collection_id)
INSERT INTO calendar_item (user_no, dav_name, dav_id, dav_etag, uid, dtstamp,
dtstart, dtstart_orig, dtend, dtend_orig, summary, location, class, transp,
description, rrule, tz_id, last_modified, url, priority, created, due,
percent_complete, status, collection_id )
VALUES ( :user_no, :dav_name, currval('dav_id_seq'), :etag, :uid, :dtstamp,
:dtstart, :dtstart_orig, ##dtend##, :dtend_orig, :summary, :location,
:class, :transp, :description, :rrule, :tzid, :modified, :url, :priority,
:created, :due, :percent_complete, :status, :collection_id)
EOSQL;
$calitem_update = <<<EOSQL
UPDATE calendar_item SET user_no=:user_no, dav_etag=:etag, uid=:uid, dtstamp=:dtstamp,
dtstart=:dtstart, dtend=##dtend##, summary=:summary, location=:location,
class=:class, transp=:transp, description=:description, rrule=:rrule,
tz_id=:tzid, last_modified=:modified, url=:url, priority=:priority,
due=:due, percent_complete=:percent_complete, status=:status
WHERE collection_id=:collection_id AND dav_name=:dav_name
UPDATE calendar_item
SET user_no=:user_no, dav_etag=:etag, uid=:uid, dtstamp=:dtstamp, dtstart=:dtstart,
dtstart_orig=:dtstart_orig, dtend=##dtend##, summary=:summary,
location=:location, class=:class, transp=:transp, description=:description,
rrule=:rrule, tz_id=:tzid, last_modified=:modified, url=:url,
priority=:priority, due=:due, percent_complete=:percent_complete,
status=:status
WHERE collection_id=:collection_id AND dav_name=:dav_name
EOSQL;
$last_olson = '';
@ -1080,7 +1086,9 @@ EOSQL;
$dav_data_params[':session_user'] = $session->user_no;
$dtstart = $first->GetPValue('DTSTART');
$calitem_params[':dtstart_orig'] = $dtstart;
$calitem_params[':dtstart'] = $dtstart;
if ( (!isset($dtstart) || $dtstart == '') && $first->GetPValue('DUE') != '' ) {
$dtstart = $first->GetPValue('DUE');
if ( isset($after) ) $dtstart_date = new RepeatRuleDateTime($first->GetProperty('DUE'));
@ -1121,6 +1129,8 @@ EOSQL;
}
$dtend = $first->GetPValue('DTEND');
$calitem_params[':dtend_orig'] = $dtend;
if ( isset($dtend) && $dtend != '' ) {
dbg_error_log( 'PUT', ' DTEND: "%s", DTSTART: "%s", DURATION: "%s"', $dtend, $dtstart, $first->GetPValue('DURATION') );
$calitem_params[':dtend'] = $dtend;
@ -1203,17 +1213,17 @@ EOSQL;
}
$sql = str_replace( '##dtend##', $dtend, ($inserting ? $calitem_insert : $calitem_update) );
$calitem_params[':uid'] = $first->GetPValue('UID');
$calitem_params[':url'] = $first->GetPValue('URL');
$calitem_params[':due'] = $first->GetPValue('DUE');
$calitem_params[':tzid'] = $tzid;
$calitem_params[':uid'] = $first->GetPValue('UID');
$calitem_params[':summary'] = $first->GetPValue('SUMMARY');
$calitem_params[':transp'] = $first->GetPValue('TRANSP');
$calitem_params[':status'] = $first->GetPValue('STATUS');
$calitem_params[':summary'] = $first->GetPValue('SUMMARY');
$calitem_params[':location'] = $first->GetPValue('LOCATION');
$calitem_params[':transp'] = $first->GetPValue('TRANSP');
$calitem_params[':description'] = $first->GetPValue('DESCRIPTION');
$calitem_params[':url'] = $first->GetPValue('URL');
$calitem_params[':priority'] = $first->GetPValue('PRIORITY');
$calitem_params[':due'] = $first->GetPValue('DUE');
$calitem_params[':description'] = $first->GetPValue('DESCRIPTION');
$calitem_params[':percent_complete'] = $first->GetPValue('PERCENT-COMPLETE');
$calitem_params[':status'] = $first->GetPValue('STATUS');
// Intentionally not populating first_instance_start and last_instance_end
// here, As they may depend on the default tzid of the collection, which as
@ -1469,12 +1479,16 @@ function write_resource( DAVResource $resource, $caldav_data, DAVResource $colle
if ( $first->GetType() == 'VTODO' ) $due = $first->GetPValue('DUE');
$calitem_params[':due'] = $due;
$dtstart = $first->GetPValue('DTSTART');
$calitem_params[':dtstart_orig'] = $dtstart;
if ( empty($dtstart) ) $dtstart = $due;
if (isset($dtstart) && preg_match("/^1[0-8][0-9][0-9][01][0-9][0-3][0-9]$/", $dtstart))
$dtstart = $dtstart . "T000000Z";
$calitem_params[':dtstart'] = $dtstart;
$dtend = $first->GetPValue('DTEND');
$calitem_params[':dtend_orig'] = $dtend;
if ( isset($dtend) && $dtend != '' ) {
dbg_error_log( 'PUT', ' DTEND: "%s", DTSTART: "%s", DURATION: "%s"', $dtend, $dtstart, $first->GetPValue('DURATION') );
if (preg_match("/^1[0-8][0-9][0-9][01][0-9][0-3][0-9]$/", $dtend))
@ -1632,15 +1646,15 @@ function write_resource( DAVResource $resource, $caldav_data, DAVResource $colle
if ( $put_action_type == 'INSERT' ) {
$sql = <<<EOSQL
INSERT INTO calendar_item (user_no, dav_name, dav_id, dav_etag, uid, dtstamp,
dtstart, dtend, summary, location, class, transp,
description, rrule, tz_id, last_modified, url, priority,
created, due, percent_complete, status, collection_id,
first_instance_start, last_instance_end )
VALUES ( :user_no, :dav_name, :dav_id, :etag, :uid, :dtstamp,
:dtstart, $dtend, :summary, :location, :class, :transp,
:description, :rrule, :tzid, :modified, :url, :priority,
:created, :due, :percent_complete, :status, :collection_id,
:first_instance_start, :last_instance_end)
dtstart, dtstart_orig, dtend, dtend_orig, summary, location, class, transp,
description, rrule, tz_id, last_modified, url, priority, created, due,
percent_complete, status, collection_id, first_instance_start,
last_instance_end )
VALUES ( :user_no, :dav_name, :dav_id, :etag, :uid, :dtstamp, :dtstart,
:dtstart_orig, $dtend, :dtend_orig, :summary, :location, :class, :transp,
:description, :rrule, :tzid, :modified, :url, :priority, :created, :due,
:percent_complete, :status, :collection_id, :first_instance_start,
:last_instance_end)
EOSQL;
$sync_change = 201;
$calitem_params[':collection_id'] = $collection_id;
@ -1651,12 +1665,14 @@ EOSQL;
else {
$sql = <<<EOSQL
UPDATE calendar_item SET dav_etag=:etag, uid=:uid, dtstamp=:dtstamp,
dtstart=:dtstart, dtend=$dtend, summary=:summary, location=:location,
class=:class, transp=:transp, description=:description, rrule=:rrule,
tz_id=:tzid, last_modified=:modified, url=:url, priority=:priority,
due=:due, percent_complete=:percent_complete, status=:status,
first_instance_start=:first_instance_start, last_instance_end=:last_instance_end
WHERE dav_id=:dav_id
dtstart=:dtstart, dtstart_orig=:dtstart_orig, dtend=$dtend,
dtend_orig=:dtend_orig, summary=:summary, location=:location, class=:class,
transp=:transp, description=:description, rrule=:rrule, tz_id=:tzid,
last_modified=:modified, url=:url, priority=:priority, due=:due,
percent_complete=:percent_complete, status=:status,
first_instance_start=:first_instance_start,
last_instance_end=:last_instance_end
WHERE dav_id=:dav_id
EOSQL;
$sync_change = 200;
}

View File

@ -105,7 +105,15 @@ function SqlFilterFragment( $filter, $components, $property = null, $parameter =
$base_property = $property;
}
// For some tables we want to check that the user actually sent us,
// and that may be in a column with a '_orig' suffix.
$property_suffix = '';
switch( $base_property ) {
case 'dtend':
case 'dtstart':
$property_suffix = '_orig';
case 'created':
case 'completed': /** @todo when it can be handled in the SQL - see around line 200 below */
case 'dtend':
@ -158,7 +166,7 @@ function SqlFilterFragment( $filter, $components, $property = null, $parameter =
}
if (isset($property_defined_match)) {
$sql .= sprintf( "AND %s %s%s ", $property, $not_defined, $property_defined_match );
$sql .= sprintf( "AND %s%s %s%s ", $property, $property_suffix, $not_defined, $property_defined_match );
}
}
break;

View File

@ -1,4 +1,4 @@
The database is version XX currently at revision 1.3.4.
The database is version XX currently at revision 1.3.5.
No patches were applied.
Supported locales updated.
Updated view: dav_principal.sql applied.

View File

@ -1,4 +1,4 @@
The database is version XX currently at revision 1.3.4.
The database is version XX currently at revision 1.3.5.
No patches were applied.
Supported locales updated.
Updated view: dav_principal.sql applied.

View File

@ -8,7 +8,7 @@ UID:19970901T130000Z-123405@host.com
DTSTAMP:19970901T130000Z
DTSTART:19970415T133000Z
DUE:19970516T045959Z
SUMMARY:Status is not set
SUMMARY:Status is not set, CLASS set, from import
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
@ -17,7 +17,7 @@ BEGIN:VTODO
UID:19920901T130000Z-123407@host.com
DTSTAMP:19920901T130000Z
DUE:19920516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from import
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
@ -29,7 +29,8 @@ BEGIN:VTODO
UID:19920901T130000Z-123408@host.com
DTSTAMP:19920901T130000Z
DTSTART:19920415T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set
DTEND:19920416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from import
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE

View File

@ -0,0 +1,46 @@
HTTP/1.1 201 Created
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "7f689d339d2aaa93571b78742a2e0f33"
Content-Length: 0
Content-Type: text/plain; charset="utf-8"
CalDAV Data: >BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VEVENT
SUMMARY:No DTEND, from PUT
DTSTART;VALUE=DATE:19971102
DTSTAMP:19970901T130000Z
UID:19970901T130000Z-123403@example.com
RRULE:FREQ=YEARLY
CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION
CLASS:CONFIDENTIAL
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
<
caldav_type: >VEVENT<
class: >CONFIDENTIAL<
dav_etag: >7f689d339d2aaa93571b78742a2e0f33<
description: >NULL<
dtend: >1997-11-03 00:00:00+13<
dtend_orig: >NULL<
dtstamp: >1997-09-01 13:00:00<
dtstart: >1997-11-02 00:00:00+13<
dtstart_orig: >1997-11-02 00:00:00+13<
due: >NULL<
location: >NULL<
logged_user: >10<
percent_complete: >NULL<
priority: >NULL<
rrule: >FREQ=YEARLY<
status: >NULL<
summary: >No DTEND, from PUT<
transp: >TRANSPARENT<
uid: >19970901T130000Z-123403@example.com<
url: >NULL<
user_no: >10<

View File

@ -0,0 +1,39 @@
#
# PUT a events into the database
#
TYPE=PUT
URL=http://regression.host/caldav.php/user1/events/hand-crafted-vevent.ics
HEADER=User-Agent: DAViCal Testing/1.12.x
HEADER=Content-Type: text/calendar; charset=utf-8
AUTH=user1:user1
HEAD
BEGINDATA
BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VEVENT
SUMMARY:No DTEND, from PUT
DTSTART;VALUE=DATE:19971102
DTSTAMP:19970901T130000Z
UID:19970901T130000Z-123403@example.com
RRULE:FREQ=YEARLY
CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION
CLASS:CONFIDENTIAL
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
ENDDATA
QUERY
SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user,
uid, dtstamp, dtstart, dtstart_orig, dtend, dtend_orig, due, summary,
location, description, priority, class, transp, rrule, url,
percent_complete, status, caldav_data AS " CalDAV Data"
FROM caldav_data
JOIN calendar_item AS ci USING(dav_name)
WHERE caldav_data.dav_name = '/user1/events/hand-crafted-vevent.ics';
ENDQUERY

View File

@ -0,0 +1,46 @@
HTTP/1.1 201 Created
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "1cb73d8b8271b3293874e4ecaae6b118"
Content-Length: 0
Content-Type: text/plain; charset="utf-8"
CalDAV Data: >BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19980901T130000Z-123405@host.com
DTSTAMP:19980901T130000Z
DTSTART:19980415T133000Z
DUE:19980516T045959Z
SUMMARY:Status is not set, CLASS set, from PUT
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
<
caldav_type: >VTODO<
class: >CONFIDENTIAL<
dav_etag: >1cb73d8b8271b3293874e4ecaae6b118<
description: >NULL<
dtend: >NULL<
dtend_orig: >NULL<
dtstamp: >1998-09-01 13:00:00<
dtstart: >1998-04-16 01:30:00+12<
dtstart_orig: >1998-04-16 01:30:00+12<
due: >1998-05-16 16:59:59+12<
location: >NULL<
logged_user: >10<
percent_complete: >NULL<
priority: >1<
rrule: >NULL<
status: >NULL<
summary: >Status is not set, CLASS set, from PUT<
transp: >NULL<
uid: >19980901T130000Z-123405@host.com<
url: >NULL<
user_no: >10<

View File

@ -0,0 +1,39 @@
#
# PUT a todo into the database
#
TYPE=PUT
URL=http://regression.host/caldav.php/user1/events/hand-crafted-vtodo-1.ics
HEADER=User-Agent: DAViCal Testing/1.12.x
HEADER=Content-Type: text/calendar; charset=utf-8
AUTH=user1:user1
HEAD
BEGINDATA
BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19980901T130000Z-123405@host.com
DTSTAMP:19980901T130000Z
DTSTART:19980415T133000Z
DUE:19980516T045959Z
SUMMARY:Status is not set, CLASS set, from PUT
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
ENDDATA
QUERY
SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user,
uid, dtstamp, dtstart, dtstart_orig, dtend, dtend_orig, due, summary,
location, description, priority, class, transp, rrule, url,
percent_complete, status, caldav_data AS " CalDAV Data"
FROM caldav_data
JOIN calendar_item AS ci USING(dav_name)
WHERE caldav_data.dav_name = '/user1/events/hand-crafted-vtodo-1.ics';
ENDQUERY

View File

@ -0,0 +1,48 @@
HTTP/1.1 201 Created
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "3f89f2173cd61aa277012407cf1f3d8e"
Content-Length: 0
Content-Type: text/plain; charset="utf-8"
CalDAV Data: >BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123407@host.com
DTSTAMP:19930901T130000Z
DUE:19930516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from PUT
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19950101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
<
caldav_type: >VTODO<
class: >PUBLIC<
dav_etag: >3f89f2173cd61aa277012407cf1f3d8e<
description: >NULL<
dtend: >NULL<
dtend_orig: >NULL<
dtstamp: >1993-09-01 13:00:00<
dtstart: >1993-05-16 16:59:59+12<
dtstart_orig: >NULL<
due: >1993-05-16 16:59:59+12<
location: >NULL<
logged_user: >10<
percent_complete: >NULL<
priority: >1<
rrule: >NULL<
status: >COMPLETED<
summary: >Status is set to COMPLETED, empty URL, CLASS set, from PUT<
transp: >NULL<
uid: >19930901T130000Z-123407@host.com<
url: ><
user_no: >10<

View File

@ -0,0 +1,41 @@
#
# PUT a todo into the database
#
TYPE=PUT
URL=http://regression.host/caldav.php/user1/events/hand-crafted-vtodo-2.ics
HEADER=User-Agent: DAViCal Testing/1.12.x
HEADER=Content-Type: text/calendar; charset=utf-8
AUTH=user1:user1
HEAD
BEGINDATA
BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123407@host.com
DTSTAMP:19930901T130000Z
DUE:19930516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from PUT
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19950101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
ENDDATA
QUERY
SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user,
uid, dtstamp, dtstart, dtstart_orig, dtend, dtend_orig, due, summary,
location, description, priority, class, transp, rrule, url,
percent_complete, status, caldav_data AS " CalDAV Data"
FROM caldav_data
JOIN calendar_item AS ci USING(dav_name)
WHERE caldav_data.dav_name = '/user1/events/hand-crafted-vtodo-2.ics';
ENDQUERY

View File

@ -0,0 +1,47 @@
HTTP/1.1 201 Created
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "782dee4f8d7cfdac111d80ce74530419"
Content-Length: 0
Content-Type: text/plain; charset="utf-8"
CalDAV Data: >BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123408@host.com
DTSTAMP:19930901T130000Z
DTSTART:19930415T133000Z
DTEND:19930416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
<
caldav_type: >VTODO<
class: >NULL<
dav_etag: >782dee4f8d7cfdac111d80ce74530419<
description: >NULL<
dtend: >1993-04-17 01:30:00+12<
dtend_orig: >1993-04-17 01:30:00+12<
dtstamp: >1993-09-01 13:00:00<
dtstart: >1993-04-16 01:30:00+12<
dtstart_orig: >1993-04-16 01:30:00+12<
due: >NULL<
location: >NULL<
logged_user: >10<
percent_complete: >NULL<
priority: >1<
rrule: >NULL<
status: >IN-PROCESS<
summary: >Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT<
transp: >NULL<
uid: >19930901T130000Z-123408@host.com<
url: >https://www.davical.org<
user_no: >10<

View File

@ -0,0 +1,40 @@
#
# PUT a todo into the database
#
TYPE=PUT
URL=http://regression.host/caldav.php/user1/events/hand-crafted-vtodo-3.ics
HEADER=User-Agent: DAViCal Testing/1.12.x
HEADER=Content-Type: text/calendar; charset=utf-8
AUTH=user1:user1
HEAD
BEGINDATA
BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123408@host.com
DTSTAMP:19930901T130000Z
DTSTART:19930415T133000Z
DTEND:19930416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
ENDDATA
QUERY
SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user,
uid, dtstamp, dtstart, dtstart_orig, dtend, dtend_orig, due, summary,
location, description, priority, class, transp, rrule, url,
percent_complete, status, caldav_data AS " CalDAV Data"
FROM caldav_data
JOIN calendar_item AS ci USING(dav_name)
WHERE caldav_data.dav_name = '/user1/events/hand-crafted-vtodo-3.ics';
ENDQUERY

View File

@ -2,8 +2,8 @@ HTTP/1.1 207 Multi-Status
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "59f93496e3ef79135478f26203487b2c"
Content-Length: 683
ETag: "3c108dfa61c05aef6748e4695e59b374"
Content-Length: 1249
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -21,12 +21,35 @@ UID:19970901T130000Z-123405@host.com
DTSTAMP:19970901T130000Z
DTSTART:19970415T133000Z
DUE:19970516T045959Z
SUMMARY:Status is not set
SUMMARY:Status is not set, CLASS set, from import
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-1.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19980901T130000Z-123405@host.com
DTSTAMP:19980901T130000Z
DTSTART:19980415T133000Z
DUE:19980516T045959Z
SUMMARY:Status is not set, CLASS set, from PUT
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</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: "e13eac7fed1103177aa17ad7379ea098"
Content-Length: 1333
ETag: "a96e0f18e10c1fea687382f6923e6928"
Content-Length: 2555
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -20,7 +20,7 @@ BEGIN:VTODO
UID:19920901T130000Z-123407@host.com
DTSTAMP:19920901T130000Z
DUE:19920516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from import
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
@ -46,13 +46,63 @@ BEGIN:VTODO
UID:19920901T130000Z-123408@host.com
DTSTAMP:19920901T130000Z
DTSTART:19920415T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set
DTEND:19920416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from import
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-2.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123407@host.com
DTSTAMP:19930901T130000Z
DUE:19930516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from PUT
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19950101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-3.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123408@host.com
DTSTAMP:19930901T130000Z
DTSTART:19930415T133000Z
DTEND:19930416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</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: "b9f1d001b8dd22ce62bf8e98c0bbca20"
Content-Length: 721
ETag: "2d3006a2bd83544b013f68196a3fc5d0"
Content-Length: 1350
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -20,13 +20,38 @@ BEGIN:VTODO
UID:19920901T130000Z-123408@host.com
DTSTAMP:19920901T130000Z
DTSTART:19920415T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set
DTEND:19920416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from import
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-3.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123408@host.com
DTSTAMP:19930901T130000Z
DTSTART:19930415T133000Z
DTEND:19930416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</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: "50cac5fed58d0f6d00abd3453b758f25"
Content-Length: 1295
ETag: "7cb8d3652fc88cbdce202a4028116fa2"
Content-Length: 2454
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -21,7 +21,7 @@ UID:19970901T130000Z-123405@host.com
DTSTAMP:19970901T130000Z
DTSTART:19970415T133000Z
DUE:19970516T045959Z
SUMMARY:Status is not set
SUMMARY:Status is not set, CLASS set, from import
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
@ -44,7 +44,7 @@ BEGIN:VTODO
UID:19920901T130000Z-123407@host.com
DTSTAMP:19920901T130000Z
DUE:19920516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from import
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
@ -53,6 +53,54 @@ COMPLETED:19940101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-1.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19980901T130000Z-123405@host.com
DTSTAMP:19980901T130000Z
DTSTART:19980415T133000Z
DUE:19980516T045959Z
SUMMARY:Status is not set, CLASS set, from PUT
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-2.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123407@host.com
DTSTAMP:19930901T130000Z
DUE:19930516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from PUT
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19950101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</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: "50cac5fed58d0f6d00abd3453b758f25"
Content-Length: 1295
ETag: "7cb8d3652fc88cbdce202a4028116fa2"
Content-Length: 2454
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -21,7 +21,7 @@ UID:19970901T130000Z-123405@host.com
DTSTAMP:19970901T130000Z
DTSTART:19970415T133000Z
DUE:19970516T045959Z
SUMMARY:Status is not set
SUMMARY:Status is not set, CLASS set, from import
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
@ -44,7 +44,7 @@ BEGIN:VTODO
UID:19920901T130000Z-123407@host.com
DTSTAMP:19920901T130000Z
DUE:19920516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from import
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
@ -53,6 +53,54 @@ COMPLETED:19940101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-1.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19980901T130000Z-123405@host.com
DTSTAMP:19980901T130000Z
DTSTART:19980415T133000Z
DUE:19980516T045959Z
SUMMARY:Status is not set, CLASS set, from PUT
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-2.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123407@host.com
DTSTAMP:19930901T130000Z
DUE:19930516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from PUT
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19950101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</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: "b9f1d001b8dd22ce62bf8e98c0bbca20"
Content-Length: 721
ETag: "2d3006a2bd83544b013f68196a3fc5d0"
Content-Length: 1350
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -20,13 +20,38 @@ BEGIN:VTODO
UID:19920901T130000Z-123408@host.com
DTSTAMP:19920901T130000Z
DTSTART:19920415T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set
DTEND:19920416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from import
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-3.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123408@host.com
DTSTAMP:19930901T130000Z
DTSTART:19930415T133000Z
DTEND:19930416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</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: "50cac5fed58d0f6d00abd3453b758f25"
Content-Length: 1295
ETag: "7cb8d3652fc88cbdce202a4028116fa2"
Content-Length: 2454
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -21,7 +21,7 @@ UID:19970901T130000Z-123405@host.com
DTSTAMP:19970901T130000Z
DTSTART:19970415T133000Z
DUE:19970516T045959Z
SUMMARY:Status is not set
SUMMARY:Status is not set, CLASS set, from import
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
@ -44,7 +44,7 @@ BEGIN:VTODO
UID:19920901T130000Z-123407@host.com
DTSTAMP:19920901T130000Z
DUE:19920516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from import
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
@ -53,6 +53,54 @@ COMPLETED:19940101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-1.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19980901T130000Z-123405@host.com
DTSTAMP:19980901T130000Z
DTSTART:19980415T133000Z
DUE:19980516T045959Z
SUMMARY:Status is not set, CLASS set, from PUT
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-2.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123407@host.com
DTSTAMP:19930901T130000Z
DUE:19930516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from PUT
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19950101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</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: "b9f1d001b8dd22ce62bf8e98c0bbca20"
Content-Length: 721
ETag: "2d3006a2bd83544b013f68196a3fc5d0"
Content-Length: 1350
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
@ -20,13 +20,38 @@ BEGIN:VTODO
UID:19920901T130000Z-123408@host.com
DTSTAMP:19920901T130000Z
DTSTART:19920415T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set
DTEND:19920416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from import
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-3.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123408@host.com
DTSTAMP:19930901T130000Z
DTSTART:19930415T133000Z
DTEND:19930416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>

View File

@ -0,0 +1,107 @@
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: "6d71edd0742cade0b6dd7cf7dbc2accb"
Content-Length: 2477
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<response>
<href>/caldav.php/user1/events/19970901T130000Z-123405host.com.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTODO
UID:19970901T130000Z-123405@host.com
DTSTAMP:19970901T130000Z
DTSTART:19970415T133000Z
DUE:19970516T045959Z
SUMMARY:Status is not set, CLASS set, from import
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/19920901T130000Z-123408host.com.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTODO
UID:19920901T130000Z-123408@host.com
DTSTAMP:19920901T130000Z
DTSTART:19920415T133000Z
DTEND:19920416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from import
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-1.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19980901T130000Z-123405@host.com
DTSTAMP:19980901T130000Z
DTSTART:19980415T133000Z
DUE:19980516T045959Z
SUMMARY:Status is not set, CLASS set, from PUT
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-3.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123408@host.com
DTSTAMP:19930901T130000Z
DTSTART:19930415T133000Z
DTEND:19930416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -0,0 +1,33 @@
#
# is-defined REPORT
#
# Regression test for https://gitlab.com/davical-project/davical/-/issues/279
#
# Check that DTSTART is defined.
#
TYPE=REPORT
URL=http://regression.host/caldav.php/user1/events/
HEADER=Content-Type: text/xml; charset="UTF-8"
HEADER=Depth: 0
HEAD
BEGINDATA
<?xml version='1.0' encoding='utf-8'?>
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<C:calendar-data/>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VTODO">
<C:prop-filter name="DTSTART">
<C:is-defined/>
</C:prop-filter>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
ENDDATA

View File

@ -0,0 +1,62 @@
HTTP/1.1 207 Multi-Status
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy
ETag: "ed5bce12bc74602dd4a4d8eaeab6d868"
Content-Length: 1327
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<response>
<href>/caldav.php/user1/events/19920901T130000Z-123407host.com.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTODO
UID:19920901T130000Z-123407@host.com
DTSTAMP:19920901T130000Z
DUE:19920516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from import
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19940101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-2.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123407@host.com
DTSTAMP:19930901T130000Z
DUE:19930516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from PUT
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19950101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -0,0 +1,33 @@
#
# is-not-defined REPORT
#
# Regression test for https://gitlab.com/davical-project/davical/-/issues/279
#
# Check that DTSTART is not defined.
#
TYPE=REPORT
URL=http://regression.host/caldav.php/user1/events/
HEADER=Content-Type: text/xml; charset="UTF-8"
HEADER=Depth: 0
HEAD
BEGINDATA
<?xml version='1.0' encoding='utf-8'?>
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<C:calendar-data/>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VTODO">
<C:prop-filter name="DTSTART">
<C:is-not-defined/>
</C:prop-filter>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
ENDDATA

View File

@ -0,0 +1,60 @@
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: "2d3006a2bd83544b013f68196a3fc5d0"
Content-Length: 1350
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<response>
<href>/caldav.php/user1/events/19920901T130000Z-123408host.com.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTODO
UID:19920901T130000Z-123408@host.com
DTSTAMP:19920901T130000Z
DTSTART:19920415T133000Z
DTEND:19920416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from import
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-3.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123408@host.com
DTSTAMP:19930901T130000Z
DTSTART:19930415T133000Z
DTEND:19930416T133000Z
SUMMARY:Status is IN-PROCESS, URL is set, CLASS isn't set, from PUT
STATUS:IN-PROCESS
URL:https://www.davical.org
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -0,0 +1,33 @@
#
# is-defined REPORT
#
# Regression test for https://gitlab.com/davical-project/davical/-/issues/279
#
# Check that DTEND is defined.
#
TYPE=REPORT
URL=http://regression.host/caldav.php/user1/events/
HEADER=Content-Type: text/xml; charset="UTF-8"
HEADER=Depth: 0
HEAD
BEGINDATA
<?xml version='1.0' encoding='utf-8'?>
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<C:calendar-data/>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VTODO">
<C:prop-filter name="DTEND">
<C:is-defined/>
</C:prop-filter>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
ENDDATA

View File

@ -0,0 +1,109 @@
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: "7cb8d3652fc88cbdce202a4028116fa2"
Content-Length: 2454
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<response>
<href>/caldav.php/user1/events/19970901T130000Z-123405host.com.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTODO
UID:19970901T130000Z-123405@host.com
DTSTAMP:19970901T130000Z
DTSTART:19970415T133000Z
DUE:19970516T045959Z
SUMMARY:Status is not set, CLASS set, from import
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/19920901T130000Z-123407host.com.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//davical.org//NONSGML AWL Calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTODO
UID:19920901T130000Z-123407@host.com
DTSTAMP:19920901T130000Z
DUE:19920516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from import
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19940101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-1.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19980901T130000Z-123405@host.com
DTSTAMP:19980901T130000Z
DTSTART:19980415T133000Z
DUE:19980516T045959Z
SUMMARY:Status is not set, CLASS set, from PUT
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY,FINANCE
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/user1/events/hand-crafted-vtodo-2.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VTODO
UID:19930901T130000Z-123407@host.com
DTSTAMP:19930901T130000Z
DUE:19930516T045959Z
SUMMARY:Status is set to COMPLETED, empty URL, CLASS set, from PUT
CLASS:PUBLIC
CATEGORIES:FAMILY,FINANCE
STATUS:COMPLETED
URL:
COMPLETED:19950101T000000Z
PRIORITY:1
END:VTODO
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -0,0 +1,33 @@
#
# is-not-defined REPORT
#
# Regression test for https://gitlab.com/davical-project/davical/-/issues/279
#
# Check that DTEND is not defined.
#
TYPE=REPORT
URL=http://regression.host/caldav.php/user1/events/
HEADER=Content-Type: text/xml; charset="UTF-8"
HEADER=Depth: 0
HEAD
BEGINDATA
<?xml version='1.0' encoding='utf-8'?>
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<C:calendar-data/>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VTODO">
<C:prop-filter name="DTEND">
<C:is-not-defined/>
</C:prop-filter>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
ENDDATA

View File

@ -0,0 +1,34 @@
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: "d7f94e424da8a0734990704f42b308d4"
Content-Length: 679
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<response>
<href>/caldav.php/user1/events/hand-crafted-vevent.ics</href>
<propstat>
<prop>
<C:calendar-data>BEGIN:VCALENDAR
PRODID:-//Puck Handcrafted VCAL//NONSGML Sunbird//EN
VERSION:2.0
BEGIN:VEVENT
SUMMARY:No DTEND, from PUT
DTSTART;VALUE=DATE:19971102
DTSTAMP:19970901T130000Z
UID:19970901T130000Z-123403@example.com
RRULE:FREQ=YEARLY
CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION
CLASS:CONFIDENTIAL
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
</C:calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>

View File

@ -0,0 +1,33 @@
#
# is-not-defined REPORT
#
# Regression test for https://gitlab.com/davical-project/davical/-/issues/279
#
# Check that DTEND is not defined for a VEVENT.
#
TYPE=REPORT
URL=http://regression.host/caldav.php/user1/events/
HEADER=Content-Type: text/xml; charset="UTF-8"
HEADER=Depth: 0
HEAD
BEGINDATA
<?xml version='1.0' encoding='utf-8'?>
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<C:calendar-data/>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:prop-filter name="DTEND">
<C:is-not-defined/>
</C:prop-filter>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
ENDDATA

View File

@ -1,4 +1,4 @@
The database is version XX currently at revision 1.3.4.
The database is version XX currently at revision 1.3.5.
No patches were applied.
Supported locales updated.
Updated view: dav_principal.sql applied.

View File

@ -1,4 +1,4 @@
The database is version XX currently at revision 1.3.4.
The database is version XX currently at revision 1.3.5.
No patches were applied.
Supported locales updated.
Updated view: dav_principal.sql applied.

View File

@ -1,4 +1,4 @@
The database is version XX currently at revision 1.3.3.
The database is version XX currently at revision 1.3.5.
No patches were applied.
Supported locales updated.
Updated view: dav_principal.sql applied.