diff --git a/.gitignore b/.gitignore index c1a84238..0572c051 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ built-po *~ testing/dumps testing/regression.conf +subdav diff --git a/ChangeLog b/ChangeLog index 16385334..2e85ff38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,29 @@ +2009-10-07 Andrew McMillan + * Release 0.9.7.4 + * Fix setting of relationships in user administration. + * Add option to make freebusy information public. + * Correct structure of supported-privilege-set response. + * Move server-specific properties from CalDAVPrincipal to CalDAVRequest. + +2009-10-06 Andrew McMillan + * Release 0.9.7.3 + +2009-09-25 Andrew McMillan + * Fix overzealous URL encoding of mailto:username@domain.com + * Expand permissions on both sides of the group expansion. + * Update licensing to note external LGPL sources + * Add a 'Delete User' option. + * Add facility to create collection without uploading VCALENDAR + * Add ability to set calendar as public on creation. + +2009-09-14 Andrew McMillan + * Allow admin access to be restricted to a particular domain. + 2009-09-11 Andrew McMillan - * Add support for /principals/user/username so iPhone (& possibly + * Add support for /principals/users/username so iPhone (& possibly also iCal) users have a simpler setup experience. * Expand privileges to work with iPhone OS 3.1 + * Release 0.9.7.2 2009-09-05 Andrew McMillan * Fix call-time pass by reference warnings. diff --git a/VERSION b/VERSION index 2f2c04a0..0c513a3f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.7.3 +0.9.7.4 diff --git a/config/example-config.php b/config/example-config.php index 5e2665af..fbb3bd7e 100644 --- a/config/example-config.php +++ b/config/example-config.php @@ -162,6 +162,9 @@ $c->collections_always_exist = false; * and he used to authenticate the user should be at least 'password,user_no' * awl/inc/AuthPlugins.php is a sample file not used by showing what could be * a hook +* +* $c->authenticate_hook['optional'] = true; can be set to try default authentication +* as well in case the configured hook should report a failure. */ /********************************/ diff --git a/dba/appuser_permissions.txt b/dba/appuser_permissions.txt index 2bd842c5..71cf4842 100644 --- a/dba/appuser_permissions.txt +++ b/dba/appuser_permissions.txt @@ -30,11 +30,11 @@ GRANT SELECT,INSERT,UPDATE,DELETE ON role_member ON session ON tmp_password - ON dav_resource ON group_member ON principal - ON privilege ON relationship_type + ON sync_tokens + ON sync_changes GRANT SELECT,UPDATE ON relationship_type_rt_id_seq @@ -42,9 +42,9 @@ GRANT SELECT,UPDATE ON usr_user_no_seq ON roles_role_no_seq ON session_session_id_seq - ON dav_resource_type_resource_type_id_seq ON principal_principal_id_seq ON principal_type_principal_type_id_seq + ON sync_tokens_sync_token_seq GRANT SELECT,INSERT ON time_zone @@ -52,6 +52,5 @@ GRANT SELECT,INSERT GRANT SELECT ON supported_locales ON awl_db_revision - ON dav_resource_type ON principal_type diff --git a/dba/better_perms.sql b/dba/better_perms.sql new file mode 100644 index 00000000..dc07e0ad --- /dev/null +++ b/dba/better_perms.sql @@ -0,0 +1,371 @@ +CREATE or REPLACE FUNCTION legacy_privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ +DECLARE + in_priv ALIAS FOR $1; + out_bits BIT(24); +BEGIN + out_bits := 0::BIT(24); + IF in_priv ~* 'A' THEN + out_bits = ~ out_bits; + RETURN out_bits; + END IF; + + -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. + -- 1 DAV:read + -- 512 CalDAV:read-free-busy + -- 4096 CALDAV:schedule-query-freebusy + IF in_priv ~* 'R' THEN + out_bits := out_bits | 4609::BIT(24); + END IF; + + -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content + -- 2 DAV:write-properties + -- 4 DAV:write-content + -- 64 DAV:bind + -- 128 DAV:unbind + IF in_priv ~* 'W' THEN + out_bits := out_bits | 198::BIT(24); + END IF; + + -- 64 DAV:bind + IF in_priv ~* 'B' THEN + out_bits := out_bits | 64::BIT(24); + END IF; + + -- 128 DAV:unbind + IF in_priv ~* 'U' THEN + out_bits := out_bits | 128::BIT(24); + END IF; + + -- 512 CalDAV:read-free-busy + -- 4096 CALDAV:schedule-query-freebusy + IF in_priv ~* 'F' THEN + out_bits := out_bits | 4608::BIT(24); + END IF; + + RETURN out_bits; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + +-- This legacy conversion function will eventually be removed, once all logic +-- has been converted to use bitmaps, or to use the bits_to_priv() output. +-- +-- NOTE: Round-trip through this and then back through legacy_privilege_to_bits +-- function is lossy! Through legacy_privilege_to_bits() and back through +-- this one is not. +-- +CREATE or REPLACE FUNCTION bits_to_legacy_privilege( BIT(24) ) RETURNS TEXT AS $$ +DECLARE + in_bits ALIAS FOR $1; + out_priv TEXT; +BEGIN + out_priv := ''; + IF in_bits = (~ 0::BIT(24)) THEN + out_priv = 'A'; + RETURN out_priv; + END IF; + + -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. + -- 1 DAV:read + -- 512 CalDAV:read-free-busy + -- 4096 CALDAV:schedule-query-freebusy + IF (in_bits & 4609::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN + out_priv := 'R'; + ELSE + out_priv := 'F'; + END IF; + END IF; + + -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content + -- 2 DAV:write-properties + -- 4 DAV:write-content + -- 64 DAV:bind + -- 128 DAV:unbind + IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 6::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || 'W'; + ELSE + IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || 'B'; + END IF; + IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || 'U'; + END IF; + END IF; + END IF; + + RETURN out_priv; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + +CREATE or REPLACE FUNCTION get_permissions( INT, INT ) RETURNS TEXT AS $$ +DECLARE + in_from ALIAS FOR $1; + in_to ALIAS FOR $2; + out_confers TEXT; + bit_confers BIT(24); + group_role_no INT; + tmp_txt TEXT; + dbg TEXT DEFAULT ''; + r RECORD; + counter INT; +BEGIN + -- Self can always have full access + IF in_from = in_to THEN + RETURN 'A'; + END IF; + + -- dbg := 'S-'; + SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 + WHERE r1.from_user = in_from AND r1.to_user = in_to AND NOT usr_is_role(r1.to_user,'Group'); + IF FOUND THEN + RETURN dbg || out_confers; + END IF; + -- RAISE NOTICE 'No simple relationships between % and %', in_from, in_to; + + SELECT bit_or(r1.confers & r2.confers) INTO bit_confers + FROM relationship r1 + JOIN relationship r2 ON r1.to_user=r2.from_user + WHERE r1.from_user=in_from AND r2.to_user=in_to + AND r2.from_user IN (SELECT user_no FROM roles LEFT JOIN role_member USING(role_no) WHERE role_name='Group'); + IF bit_confers != 0::BIT(24) THEN + RETURN dbg || bits_to_legacy_privilege(bit_confers); + END IF; + + RETURN ''; + -- RAISE NOTICE 'No complex relationships between % and %', in_from, in_to; + + SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 LEFT OUTER JOIN relationship r2 ON(r1.to_user = r2.to_user) + WHERE r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user + AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) ; + + IF FOUND THEN + -- dbg := 'H-'; + -- RAISE NOTICE 'Permissions to shared group % ', out_confers; + RETURN dbg || out_confers; + END IF; + + -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; + + RETURN ''; +END; +$$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; + + +CREATE or REPLACE FUNCTION get_group_role_no() RETURNS INT AS $$ + SELECT role_no FROM roles WHERE role_name = 'Group' +$$ LANGUAGE 'SQL' IMMUTABLE; + +CREATE or REPLACE FUNCTION has_legacy_privilege( INT, TEXT, INT ) RETURNS BOOLEAN AS $$ +DECLARE + in_from ALIAS FOR $1; + in_legacy_privilege ALIAS FOR $2; + in_to ALIAS FOR $3; + in_confers BIT(24); + group_role_no INT; +BEGIN + -- Self can always have full access + IF in_from = in_to THEN + RETURN TRUE; + END IF; + + SELECT get_group_role_no() INTO group_role_no; + SELECT legacy_privilege_to_bits(in_legacy_privilege) INTO in_confers; + + IF EXISTS(SELECT 1 FROM relationship WHERE from_user = in_from AND to_user = in_to + AND (in_confers & confers) = in_confers + AND NOT EXISTS(SELECT 1 FROM role_member WHERE to_user = user_no AND role_no = group_role_no) ) THEN + -- A direct relationship from A to B that grants sufficient + -- RAISE NOTICE 'Permissions directly granted'; + RETURN TRUE; + END IF; + + IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user + WHERE (in_confers & r1.confers & r2.confers) = in_confers + AND r1.from_user=in_from AND r2.to_user=in_to + AND r2.from_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) ) THEN + -- An indirect relationship from A to B via group G that grants sufficient + -- RAISE NOTICE 'Permissions mediated via group'; + RETURN TRUE; + END IF; + + IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.to_user + WHERE (in_confers & r1.confers & r2.confers) = in_confers + AND r1.from_user=in_from AND r2.from_user=in_to + AND r2.to_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) + AND NOT EXISTS(SELECT 1 FROM relationship WHERE from_user=r2.to_user) ) THEN + -- An indirect reflexive relationship from both A & B to group G which grants sufficient + -- RAISE NOTICE 'Permissions to shared group'; + RETURN TRUE; + END IF; + + -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; + + RETURN FALSE; +END; +$$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; + + +-- Given a verbose DAV: or CalDAV: privilege name return the bitmask +CREATE or REPLACE FUNCTION privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ +DECLARE + raw_priv ALIAS FOR $1; + in_priv TEXT; +BEGIN + in_priv := trim(lower(regexp_replace(raw_priv, '^.*:', ''))); + IF in_priv = 'all' THEN + RETURN ~ 0::BIT(24); + END IF; + + RETURN (CASE + WHEN in_priv = 'read' THEN 4609 -- 1 + 512 + 4096 + WHEN in_priv = 'write' THEN 198 -- 2 + 4 + 64 + 128 + WHEN in_priv = 'write-properties' THEN 2 + WHEN in_priv = 'write-content' THEN 4 + WHEN in_priv = 'unlock' THEN 8 + WHEN in_priv = 'read-acl' THEN 16 + WHEN in_priv = 'read-current-user-privilege-set' THEN 32 + WHEN in_priv = 'bind' THEN 64 + WHEN in_priv = 'unbind' THEN 128 + WHEN in_priv = 'write-acl' THEN 256 + WHEN in_priv = 'read-free-busy' THEN 4608 -- 512 + 4096 + WHEN in_priv = 'schedule-deliver' THEN 7168 -- 1024 + 2048 + 4096 + WHEN in_priv = 'schedule-deliver-invite' THEN 1024 + WHEN in_priv = 'schedule-deliver-reply' THEN 2048 + WHEN in_priv = 'schedule-query-freebusy' THEN 4096 + WHEN in_priv = 'schedule-send' THEN 57344 -- 8192 + 16384 + 32768 + WHEN in_priv = 'schedule-send-invite' THEN 8192 + WHEN in_priv = 'schedule-send-reply' THEN 16384 + WHEN in_priv = 'schedule-send-freebusy' THEN 32768 + ELSE 0 END)::BIT(24); +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + + +-- Given an array of verbose DAV: or CalDAV: privilege names return the bitmask +CREATE or REPLACE FUNCTION privilege_to_bits( TEXT[] ) RETURNS BIT(24) AS $$ +DECLARE + raw_privs ALIAS FOR $1; + in_priv TEXT; + out_bits BIT(24); + i INT; + all BIT(24); + start INT; + finish INT; +BEGIN + out_bits := 0::BIT(24); + all := ~ out_bits; + SELECT array_lower(raw_privs,1) INTO start; + SELECT array_upper(raw_privs,1) INTO finish; + FOR i IN start .. finish LOOP + SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits; + IF out_bits = all THEN + RETURN all; + END IF; + END LOOP; + RETURN out_bits; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + + +-- This legacy conversion function will eventually be removed, once all logic +-- has been converted to use bitmaps, or to use the bits_to_priv() output. +-- +-- NOTE: Round-trip through this and then back through privilege_to_bits +-- function is lossy! Through privilege_to_bits() and back through +-- this one is not. +-- +CREATE or REPLACE FUNCTION bits_to_privilege( BIT(24) ) RETURNS TEXT[] AS $$ +DECLARE + in_bits ALIAS FOR $1; + out_priv TEXT[]; +BEGIN + out_priv := ARRAY[]::text[]; + IF in_bits = (~ 0::BIT(24)) THEN + out_priv := out_priv || ARRAY['DAV:all']; + END IF; + + IF (in_bits & 513::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:read']; + END IF; + IF (in_bits & 512::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:read-free-busy']; + END IF; + END IF; + + IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 198::BIT(24)) = 198::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:write']; + ELSE + IF (in_bits & 2::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:write-properties']; + END IF; + IF (in_bits & 4::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:write-content']; + END IF; + IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:bind']; + END IF; + IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:unbind']; + END IF; + END IF; + END IF; + + IF (in_bits & 8::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:unlock']; + END IF; + + IF (in_bits & 16::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:read-acl']; + END IF; + + IF (in_bits & 32::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:read-current-user-privilege-set']; + END IF; + + IF (in_bits & 256::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:write-acl']; + END IF; + + IF (in_bits & 7168::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 7168::BIT(24)) = 7168::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-deliver']; + ELSE + IF (in_bits & 1024::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-deliver-invite']; + END IF; + IF (in_bits & 2048::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-deliver-reply']; + END IF; + IF (in_bits & 4096::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-query-freebusy']; + END IF; + END IF; + END IF; + + IF (in_bits & 57344::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 57344::BIT(24)) = 57344::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-send']; + ELSE + IF (in_bits & 8192::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-send-invite']; + END IF; + IF (in_bits & 16384::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-send-reply']; + END IF; + IF (in_bits & 32768::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-send-freebusy']; + END IF; + END IF; + END IF; + + RETURN out_priv; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; diff --git a/dba/patches/1.2.6.sql b/dba/patches/1.2.6.sql new file mode 100644 index 00000000..a782b3fd --- /dev/null +++ b/dba/patches/1.2.6.sql @@ -0,0 +1,633 @@ + +-- This database update converts the permissions into a bitmap stored +-- as an integer to make calculation of merged permissions simpler +-- through simple binary 'AND' + +CREATE or REPLACE FUNCTION legacy_privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ +DECLARE + in_priv ALIAS FOR $1; + out_bits BIT(24); +BEGIN + out_bits := 0::BIT(24); + IF in_priv ~* 'A' THEN + out_bits = ~ out_bits; + RETURN out_bits; + END IF; + + -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. + -- 1 DAV:read + -- 512 CalDAV:read-free-busy + -- 4096 CALDAV:schedule-query-freebusy + IF in_priv ~* 'R' THEN + out_bits := out_bits | 4609::BIT(24); + END IF; + + -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content + -- 2 DAV:write-properties + -- 4 DAV:write-content + -- 64 DAV:bind + -- 128 DAV:unbind + IF in_priv ~* 'W' THEN + out_bits := out_bits | 198::BIT(24); + END IF; + + -- 64 DAV:bind + IF in_priv ~* 'B' THEN + out_bits := out_bits | 64::BIT(24); + END IF; + + -- 128 DAV:unbind + IF in_priv ~* 'U' THEN + out_bits := out_bits | 128::BIT(24); + END IF; + + -- 512 CalDAV:read-free-busy + -- 4096 CALDAV:schedule-query-freebusy + IF in_priv ~* 'F' THEN + out_bits := out_bits | 4608::BIT(24); + END IF; + + RETURN out_bits; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + +-- This legacy conversion function will eventually be removed, once all logic +-- has been converted to use bitmaps, or to use the bits_to_priv() output. +-- +-- NOTE: Round-trip through this and then back through legacy_privilege_to_bits +-- function is lossy! Through legacy_privilege_to_bits() and back through +-- this one is not. +-- +CREATE or REPLACE FUNCTION bits_to_legacy_privilege( BIT(24) ) RETURNS TEXT AS $$ +DECLARE + in_bits ALIAS FOR $1; + out_priv TEXT; +BEGIN + out_priv := ''; + IF in_bits = (~ 0::BIT(24)) THEN + out_priv = 'A'; + RETURN out_priv; + END IF; + + -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. + -- 1 DAV:read + -- 512 CalDAV:read-free-busy + -- 4096 CALDAV:schedule-query-freebusy + IF (in_bits & 4609::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN + out_priv := 'R'; + ELSE + out_priv := 'F'; + END IF; + END IF; + + -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content + -- 2 DAV:write-properties + -- 4 DAV:write-content + -- 64 DAV:bind + -- 128 DAV:unbind + IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 6::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || 'W'; + ELSE + IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || 'B'; + END IF; + IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || 'U'; + END IF; + END IF; + END IF; + + RETURN out_priv; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + +CREATE or REPLACE FUNCTION get_permissions( INT, INT ) RETURNS TEXT AS $$ +DECLARE + in_from ALIAS FOR $1; + in_to ALIAS FOR $2; + out_confers TEXT; + bit_confers BIT(24); + group_role_no INT; + tmp_txt TEXT; + dbg TEXT DEFAULT ''; + r RECORD; + counter INT; +BEGIN + -- Self can always have full access + IF in_from = in_to THEN + RETURN 'A'; + END IF; + + -- dbg := 'S-'; + SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 + WHERE r1.from_user = in_from AND r1.to_user = in_to AND NOT usr_is_role(r1.to_user,'Group'); + IF FOUND THEN + RETURN dbg || out_confers; + END IF; + -- RAISE NOTICE 'No simple relationships between % and %', in_from, in_to; + + SELECT bit_or(r1.confers & r2.confers) INTO bit_confers + FROM relationship r1 + JOIN relationship r2 ON r1.to_user=r2.from_user + WHERE r1.from_user=in_from AND r2.to_user=in_to + AND r2.from_user IN (SELECT user_no FROM roles LEFT JOIN role_member USING(role_no) WHERE role_name='Group'); + IF bit_confers != 0::BIT(24) THEN + RETURN dbg || bits_to_legacy_privilege(bit_confers); + END IF; + + RETURN ''; + -- RAISE NOTICE 'No complex relationships between % and %', in_from, in_to; + + SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 LEFT OUTER JOIN relationship r2 ON(r1.to_user = r2.to_user) + WHERE r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user + AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) ; + + IF FOUND THEN + -- dbg := 'H-'; + -- RAISE NOTICE 'Permissions to shared group % ', out_confers; + RETURN dbg || out_confers; + END IF; + + -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; + + RETURN ''; +END; +$$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; + + +CREATE or REPLACE FUNCTION get_group_role_no() RETURNS INT AS $$ + SELECT role_no FROM roles WHERE role_name = 'Group' +$$ LANGUAGE 'SQL' IMMUTABLE; + +CREATE or REPLACE FUNCTION has_legacy_privilege( INT, TEXT, INT ) RETURNS BOOLEAN AS $$ +DECLARE + in_from ALIAS FOR $1; + in_legacy_privilege ALIAS FOR $2; + in_to ALIAS FOR $3; + in_confers BIT(24); + group_role_no INT; +BEGIN + -- Self can always have full access + IF in_from = in_to THEN + RETURN TRUE; + END IF; + + SELECT get_group_role_no() INTO group_role_no; + SELECT legacy_privilege_to_bits(in_legacy_privilege) INTO in_confers; + + IF EXISTS(SELECT 1 FROM relationship WHERE from_user = in_from AND to_user = in_to + AND (in_confers & confers) = in_confers + AND NOT EXISTS(SELECT 1 FROM role_member WHERE to_user = user_no AND role_no = group_role_no) ) THEN + -- A direct relationship from A to B that grants sufficient + -- RAISE NOTICE 'Permissions directly granted'; + RETURN TRUE; + END IF; + + IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user + WHERE (in_confers & r1.confers & r2.confers) = in_confers + AND r1.from_user=in_from AND r2.to_user=in_to + AND r2.from_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) ) THEN + -- An indirect relationship from A to B via group G that grants sufficient + -- RAISE NOTICE 'Permissions mediated via group'; + RETURN TRUE; + END IF; + + IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.to_user + WHERE (in_confers & r1.confers & r2.confers) = in_confers + AND r1.from_user=in_from AND r2.from_user=in_to + AND r2.to_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) + AND NOT EXISTS(SELECT 1 FROM relationship WHERE from_user=r2.to_user) ) THEN + -- An indirect reflexive relationship from both A & B to group G which grants sufficient + -- RAISE NOTICE 'Permissions to shared group'; + RETURN TRUE; + END IF; + + -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; + + RETURN FALSE; +END; +$$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; + + +-- Given a verbose DAV: or CalDAV: privilege name return the bitmask +CREATE or REPLACE FUNCTION privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ +DECLARE + raw_priv ALIAS FOR $1; + in_priv TEXT; +BEGIN + in_priv := trim(lower(regexp_replace(raw_priv, '^.*:', ''))); + IF in_priv = 'all' THEN + RETURN ~ 0::BIT(24); + END IF; + + RETURN (CASE + WHEN in_priv = 'read' THEN 4609 -- 1 + 512 + 4096 + WHEN in_priv = 'write' THEN 198 -- 2 + 4 + 64 + 128 + WHEN in_priv = 'write-properties' THEN 2 + WHEN in_priv = 'write-content' THEN 4 + WHEN in_priv = 'unlock' THEN 8 + WHEN in_priv = 'read-acl' THEN 16 + WHEN in_priv = 'read-current-user-privilege-set' THEN 32 + WHEN in_priv = 'bind' THEN 64 + WHEN in_priv = 'unbind' THEN 128 + WHEN in_priv = 'write-acl' THEN 256 + WHEN in_priv = 'read-free-busy' THEN 4608 -- 512 + 4096 + WHEN in_priv = 'schedule-deliver' THEN 7168 -- 1024 + 2048 + 4096 + WHEN in_priv = 'schedule-deliver-invite' THEN 1024 + WHEN in_priv = 'schedule-deliver-reply' THEN 2048 + WHEN in_priv = 'schedule-query-freebusy' THEN 4096 + WHEN in_priv = 'schedule-send' THEN 57344 -- 8192 + 16384 + 32768 + WHEN in_priv = 'schedule-send-invite' THEN 8192 + WHEN in_priv = 'schedule-send-reply' THEN 16384 + WHEN in_priv = 'schedule-send-freebusy' THEN 32768 + ELSE 0 END)::BIT(24); +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + + +-- Given an array of verbose DAV: or CalDAV: privilege names return the bitmask +CREATE or REPLACE FUNCTION privilege_to_bits( TEXT[] ) RETURNS BIT(24) AS $$ +DECLARE + raw_privs ALIAS FOR $1; + in_priv TEXT; + out_bits BIT(24); + i INT; + all BIT(24); + start INT; + finish INT; +BEGIN + out_bits := 0::BIT(24); + all := ~ out_bits; + SELECT array_lower(raw_privs,1) INTO start; + SELECT array_upper(raw_privs,1) INTO finish; + FOR i IN start .. finish LOOP + SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits; + IF out_bits = all THEN + RETURN all; + END IF; + END LOOP; + RETURN out_bits; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + + +-- This legacy conversion function will eventually be removed, once all logic +-- has been converted to use bitmaps, or to use the bits_to_priv() output. +-- +-- NOTE: Round-trip through this and then back through privilege_to_bits +-- function is lossy! Through privilege_to_bits() and back through +-- this one is not. +-- +CREATE or REPLACE FUNCTION bits_to_privilege( BIT(24) ) RETURNS TEXT[] AS $$ +DECLARE + in_bits ALIAS FOR $1; + out_priv TEXT[]; +BEGIN + out_priv := ARRAY[]::text[]; + IF in_bits = (~ 0::BIT(24)) THEN + out_priv := out_priv || ARRAY['DAV:all']; + END IF; + + IF (in_bits & 513::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:read']; + END IF; + IF (in_bits & 512::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:read-free-busy']; + END IF; + END IF; + + IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 198::BIT(24)) = 198::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:write']; + ELSE + IF (in_bits & 2::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:write-properties']; + END IF; + IF (in_bits & 4::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:write-content']; + END IF; + IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:bind']; + END IF; + IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:unbind']; + END IF; + END IF; + END IF; + + IF (in_bits & 8::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:unlock']; + END IF; + + IF (in_bits & 16::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:read-acl']; + END IF; + + IF (in_bits & 32::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:read-current-user-privilege-set']; + END IF; + + IF (in_bits & 256::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['DAV:write-acl']; + END IF; + + IF (in_bits & 7168::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 7168::BIT(24)) = 7168::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-deliver']; + ELSE + IF (in_bits & 1024::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-deliver-invite']; + END IF; + IF (in_bits & 2048::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-deliver-reply']; + END IF; + IF (in_bits & 4096::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-query-freebusy']; + END IF; + END IF; + END IF; + + IF (in_bits & 57344::BIT(24)) != 0::BIT(24) THEN + IF (in_bits & 57344::BIT(24)) = 57344::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-send']; + ELSE + IF (in_bits & 8192::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-send-invite']; + END IF; + IF (in_bits & 16384::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-send-reply']; + END IF; + IF (in_bits & 32768::BIT(24)) != 0::BIT(24) THEN + out_priv := out_priv || ARRAY['caldav:schedule-send-freebusy']; + END IF; + END IF; + END IF; + + RETURN out_priv; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + + + + + + + + + + + +BEGIN; +SELECT check_db_revision(1,2,5); + + +-- DAV Privileges implementation +-- +-- RFC 3744 - DAV ACLs +-- 1 DAV:read +-- DAV:write (aggregate = 198) +-- 2 DAV:write-properties +-- 4 DAV:write-content +-- 8 DAV:unlock +-- 16 DAV:read-acl +-- 32 DAV:read-current-user-privilege-set +-- 64 DAV:bind +-- 128 DAV:unbind +-- 256 DAV:write-acl + +-- RFC 4791 - CalDAV +-- 512 CalDAV:read-free-busy + +-- RFC ???? - Scheduling Extensions for CalDAV +-- CALDAV:schedule-deliver (aggregate) => 7168 +-- 1024 CALDAV:schedule-deliver-invite +-- 2048 CALDAV:schedule-deliver-reply +-- 4096 CALDAV:schedule-query-freebusy +-- CALDAV:schedule-send (aggregate) => 57344 +-- 8192 CALDAV:schedule-send-invite +-- 16384 CALDAV:schedule-send-reply +-- 32768 CALDAV:schedule-send-freebusy + +-- RFC 3744 - DAV ACLs +-- DAV:all => all of the above and any new ones someone might invent! + +-- DAV:read-acl MUST NOT contain DAV:read, DAV:write, DAV:write-acl, DAV:write-properties, DAV:write-content, or DAV:read-current-user-privilege-set. +-- DAV:write-acl MUST NOT contain DAV:write, DAV:read, DAV:read-acl, DAV:read-current-user-privilege-set. +-- DAV:read-current-user-privilege-set MUST NOT contain DAV:write, DAV:read, DAV:read-acl, or DAV:write-acl. +-- DAV:write MUST NOT contain DAV:read, DAV:read-acl, or DAV:read-current-user-privilege-set. +-- DAV:read MUST NOT contain DAV:write, DAV:write-acl, DAV:write-properties, or DAV:write-content. +-- DAV:write-acl COULD contain DAV:write-properties DAV:write-content DAV:unlock DAV:bind DAV:unbind BUT why would it? + +-- DAV:write => DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content + +-- RFC 4791 - CalDAV +-- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. + +-- RFC ???? - Scheduling Extensions for CalDAV +-- DAV:all MUST contain CALDAV:schedule-send and CALDAV:schedule-deliver +-- CALDAV:schedule-send MUST contain CALDAV:schedule-send-invite, CALDAV:schedule-send-reply, and CALDAV:schedule-send-freebusy; +-- CALDAV:schedule-deliver MUST contain CALDAV:schedule-deliver-invite, CALDAV:schedule-deliver-reply, and CALDAV:schedule-query-freebusy. + + +-- Me!!! +-- CalDAV:read-free-busy privilege SHOULD contain CALDAV:schedule-query-freebusy +-- => DAV:read privilege SHOULD contain CALDAV:schedule-query-freebusy + + +-- This legacy conversion function will eventually be removed, once all logic +-- has been converted to use bitmaps, or to use the bits_to_priv() output. +CREATE or REPLACE FUNCTION legacy_privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ +DECLARE + in_priv ALIAS FOR $1; + out_bits BIT(24); +BEGIN + out_bits := 0::BIT(24); + IF in_priv ~* 'A' THEN + out_bits = ~ out_bits; + RETURN out_bits; + END IF; + + -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. + -- 1 DAV:read + -- 512 CalDAV:read-free-busy + -- 4096 CALDAV:schedule-query-freebusy + IF in_priv ~* 'R' THEN + out_bits := out_bits | 4609::BIT(24); + END IF; + + -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content + -- 2 DAV:write-properties + -- 4 DAV:write-content + -- 64 DAV:bind + -- 128 DAV:unbind + IF in_priv ~* 'W' THEN + out_bits := out_bits | 198::BIT(24); + END IF; + + -- 64 DAV:bind + IF in_priv ~* 'B' THEN + out_bits := out_bits | 64::BIT(24); + END IF; + + -- 128 DAV:unbind + IF in_priv ~* 'U' THEN + out_bits := out_bits | 128::BIT(24); + END IF; + + -- 512 CalDAV:read-free-busy + -- 4096 CALDAV:schedule-query-freebusy + IF in_priv ~* 'F' THEN + out_bits := out_bits | 4608::BIT(24); + END IF; + + RETURN out_bits; +END +$$ +LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; + + +ALTER TABLE relationship_type ADD COLUMN bit_confers BIT(24) DEFAULT legacy_privilege_to_bits('RW'); +UPDATE relationship_type SET bit_confers = legacy_privilege_to_bits(confers); + +ALTER TABLE relationship ADD COLUMN confers BIT(24) DEFAULT legacy_privilege_to_bits('F'); +UPDATE relationship r SET confers = bit_confers FROM relationship_type rt WHERE rt.rt_id=r.rt_id; + +ALTER TABLE collection ADD COLUMN default_privileges BIT(24) DEFAULT legacy_privilege_to_bits('F'); + +INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 1, 'Person' ); +INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 2, 'Resource' ); +INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 3, 'Group' ); + +-- web needs SELECT,INSERT,UPDATE,DELETE +DROP TABLE principal CASCADE; +CREATE TABLE principal ( + principal_id SERIAL PRIMARY KEY, + type_id INT8 NOT NULL REFERENCES principal_type(principal_type_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE, + user_no INT8 NULL REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, + displayname TEXT, + active BOOLEAN, + default_privileges BIT(24) +); + +INSERT INTO principal (type_id, user_no, displayname, active, default_privileges) + SELECT 1, user_no, fullname, active, 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) ; + +INSERT INTO principal (type_id, user_no, displayname, active, default_privileges) + SELECT 2, user_no, fullname, active, 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); + +INSERT INTO principal (type_id, user_no, displayname, active, default_privileges) + SELECT 3, user_no, fullname, active, 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); + +UPDATE collection SET default_privileges = CASE + WHEN publicly_readable THEN privilege_to_bits(ARRAY['read']) + ELSE (SELECT default_privileges FROM principal WHERE principal.user_no = collection.user_no) + END; + +-- Allowing identification of group members. +DROP TABLE group_member CASCADE; +CREATE TABLE group_member ( + group_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, + member_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE +); +CREATE UNIQUE INDEX group_member_pk ON group_member(group_id,member_id); +CREATE INDEX group_member_sk ON group_member(member_id); +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 = 1); -- Person + +DROP TABLE dav_resource_type CASCADE; +DROP TABLE dav_resource CASCADE; +DROP TABLE privilege CASCADE; + +CREATE TABLE grants ( + by_principal INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, + dav_name TEXT, + to_principal INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, + privileges BIT(24), + is_group BOOLEAN, + PRIMARY KEY (dav_name, to_principal) +) WITHOUT OIDS; + + +INSERT INTO grants ( by_principal, dav_name, to_principal, privileges, is_group ) + SELECT pby.principal_id AS by_principal, '/' ||t.username||'/' AS dav_name, pto.principal_id AS to_principal, + confers AS privileges, pto.type_id > 2 AS is_group + FROM relationship r JOIN usr f ON(f.user_no=r.from_user) + 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; + + +CREATE or REPLACE FUNCTION get_permissions_new( INT, INT ) RETURNS BIT(24) AS $$ +DECLARE + in_accessor ALIAS FOR $1; + in_grantor ALIAS FOR $2; + out_conferred BIT(24); +BEGIN + out_conferred := 0::BIT(24); + -- Self can always have full access + IF in_grantor = in_accessor THEN + RETURN ~ out_conferred; + END IF; + + SELECT bit_or(subquery.privileges) INTO out_conferred FROM + (SELECT privileges FROM grants WHERE by_principal = in_grantor AND to_principal = in_accessor AND NOT is_group + UNION + SELECT privileges FROM grants JOIN group_member ON (to_principal=group_id AND member_id=in_accessor) + WHERE by_principal = in_grantor AND is_group + ) AS subquery ; + IF out_conferred IS NULL THEN + SELECT default_privileges INTO out_conferred FROM principal WHERE principal_id = in_grantor; + END IF; + + RETURN out_conferred; +END; +$$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; + +-- A list of the principals who can proxy to this principal +CREATE or REPLACE FUNCTION i_proxy_to( INT ) RETURNS SETOF grants AS $$ +SELECT by_principal, dav_name, to_principal, privileges, is_group FROM grants WHERE by_principal = $1 AND NOT is_group + UNION +SELECT by_principal, dav_name, member_id, privileges, is_group FROM grants + JOIN group_member ON (to_principal=group_id) where by_principal = $1 and is_group; +$$ LANGUAGE 'SQL' STRICT; + +-- A list of the principals who this principal can proxy +CREATE or REPLACE FUNCTION proxied_by( INT ) RETURNS SETOF grants AS $$ +SELECT by_principal, dav_name, to_principal, privileges, is_group FROM grants WHERE to_principal = $1 AND NOT is_group + UNION +SELECT by_principal, dav_name, member_id, privileges, is_group FROM grants + JOIN group_member ON (to_principal=group_id) where member_id = $1 and is_group; +$$ LANGUAGE 'SQL' STRICT; + +CREATE or REPLACE FUNCTION proxy_list( INT ) RETURNS SETOF grants AS $$ +SELECT by_principal, dav_name, to_principal, privileges, is_group FROM grants WHERE by_principal = $1 AND NOT is_group + UNION +SELECT by_principal, dav_name, member_id, privileges, is_group FROM grants + JOIN group_member ON (to_principal=group_id) where by_principal = $1 and is_group + UNION +SELECT by_principal, dav_name, to_principal, privileges, is_group FROM grants WHERE to_principal = $1 AND NOT is_group + UNION +SELECT by_principal, dav_name, member_id, privileges, is_group FROM grants + JOIN group_member ON (to_principal=group_id) where member_id = $1 and is_group; +$$ LANGUAGE 'SQL' STRICT; + +SELECT new_db_revision(1,2,6, 'Juin' ); + +COMMIT; +ROLLBACK; + diff --git a/dba/patches/1.2.7.sql b/dba/patches/1.2.7.sql new file mode 100644 index 00000000..b7583137 --- /dev/null +++ b/dba/patches/1.2.7.sql @@ -0,0 +1,69 @@ + +-- This database update refines the constraint on usr in order to try and be +-- able to actually DELETE FROM usr WHERE user_no = x; and have the database +-- do the right thing... + +BEGIN; +SELECT check_db_revision(1,2,6); + +CREATE TABLE sync_tokens ( + sync_token SERIAL PRIMARY KEY, + collection_id INT8 REFERENCES collection(collection_id) ON DELETE CASCADE ON UPDATE CASCADE, + modification_time TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp +); + +CREATE TABLE sync_changes ( + sync_time TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp, + collection_id INT8 REFERENCES collection(collection_id) ON DELETE CASCADE ON UPDATE CASCADE, + sync_status INT, + dav_id INT8 REFERENCES calendar_item(dav_id) ON DELETE SET NULL ON UPDATE RESTRICT, + dav_name TEXT +); + +SELECT new_db_revision(1,2,7, 'Juli' ); + +COMMIT; +ROLLBACK; + + +CREATE or REPLACE FUNCTION write_sync_change( INT8, INT, TEXT ) RETURNS BOOLEAN AS $$ +DECLARE + in_collection_id ALIAS FOR $1; + in_status ALIAS FOR $2; + in_dav_name ALIAS FOR $3; + tmp_int INT8; +BEGIN + SELECT 1 INTO tmp_int FROM sync_tokens + WHERE collection_id = in_collection_id + LIMIT 1; + IF NOT FOUND THEN + RETURN FALSE; + END IF; + SELECT dav_id INTO tmp_int FROM calendar_item WHERE dav_name = in_dav_name; + INSERT INTO sync_changes ( collection_id, sync_status, dav_id, dav_name) + VALUES( in_collection_id, in_status, tmp_int, in_dav_name); + RETURN TRUE; +END +$$ LANGUAGE 'PlPgSQL' VOLATILE STRICT; + + +CREATE or REPLACE FUNCTION new_sync_token( INT8, INT8 ) RETURNS INT8 AS $$ +DECLARE + in_old_sync_token ALIAS FOR $1; + in_collection_id ALIAS FOR $2; + tmp_int INT8; +BEGIN + IF in_old_sync_token > 0 THEN + SELECT 1 INTO tmp_int FROM sync_changes + WHERE collection_id = in_collection_id + AND sync_time > (SELECT modification_time FROM sync_tokens WHERE sync_token = in_old_sync_token) + LIMIT 1; + IF NOT FOUND THEN + RETURN in_old_sync_token; + END IF; + END IF; + SELECT nextval('sync_tokens_sync_token_seq') INTO tmp_int; + INSERT INTO sync_tokens(collection_id, sync_token) VALUES( in_collection_id, tmp_int ); + RETURN tmp_int; +END +$$ LANGUAGE 'PlPgSQL' STRICT; diff --git a/debian/changelog b/debian/changelog index 198cde51..4e1c5ac7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +davical (0.9.7.4-0) unstable; urgency=low + + * New upstream release. + + -- Andrew McMillan Wed, 07 Oct 2009 17:03:14 -0700 + +davical (0.9.7.3-0) unstable; urgency=low + + * New upstream release. + + -- Andrew McMillan Tue, 06 Oct 2009 12:41:48 -0700 + davical (0.9.7.2-0) unstable; urgency=low * New upstream version. diff --git a/debian/control b/debian/control index e9d4673f..a2b20bbb 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: davical Section: web Priority: extra Maintainer: Andrew McMillan -Standards-Version: 3.8.1 +Standards-Version: 3.8.3 Build-Depends: debhelper (>= 5) Vcs-git: git://repo.or.cz/davical.git Vcs-browser: http://repo.or.cz/w/davical.git @@ -10,13 +10,14 @@ Homepage: http://davical.org/ Package: davical Architecture: all -Depends: debconf (>= 1.0.32), php5-pgsql, postgresql-client-8.4 | postgresql-client-8.3 | postgresql-client-8.2 | postgresql-client-8.1, libawl-php (=0.37), libdbd-pg-perl, libyaml-perl +Depends: debconf (>= 1.0.32), php5-pgsql, postgresql-client-8.4 | postgresql-client-8.3 | postgresql-client-8.2 | postgresql-client-8.1, libawl-php (= 0.38-0), libdbd-pg-perl, libyaml-perl Conflicts: rscds Description: The DAViCal CalDAV Server The DAViCal CalDAV Server is designed to trivially store CalDAV calendars, such as those from Evolution, Sunbird/Lightning, - Mulberry, iCal or SOHO Organizer, in a central location, providing - shared calendars, free/busy publication and basic administration + Mulberry, iCal, iPhone or SOHO Organizer, in a central location, + providing shared calendars, free/busy publication and a basic + administration interface. Package: davical-doc Section: doc diff --git a/docs/api/awl/PdoQuery/PdoDatabase.html b/docs/api/awl/PdoQuery/PdoDatabase.html index 0969cb35..c9208ab5 100644 --- a/docs/api/awl/PdoQuery/PdoDatabase.html +++ b/docs/api/awl/PdoQuery/PdoDatabase.html @@ -569,7 +569,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/awl/PdoQuery/PdoDialect.html b/docs/api/awl/PdoQuery/PdoDialect.html index 66afb4fa..ed47f728 100644 --- a/docs/api/awl/PdoQuery/PdoDialect.html +++ b/docs/api/awl/PdoQuery/PdoDialect.html @@ -309,7 +309,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/awl/PdoQuery/PdoQuery.html b/docs/api/awl/PdoQuery/PdoQuery.html index 5308f772..84697d73 100644 --- a/docs/api/awl/PdoQuery/PdoQuery.html +++ b/docs/api/awl/PdoQuery/PdoQuery.html @@ -298,7 +298,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/awl/PdoQuery/_inc---PdoQuery.php.html b/docs/api/awl/PdoQuery/_inc---PdoQuery.php.html index d881fcd5..f1bb65c2 100644 --- a/docs/api/awl/PdoQuery/_inc---PdoQuery.php.html +++ b/docs/api/awl/PdoQuery/_inc---PdoQuery.php.html @@ -89,7 +89,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/awl/caldav/CalDAVClient.html b/docs/api/awl/caldav/CalDAVClient.html index de20d03c..7b75e1b3 100644 --- a/docs/api/awl/caldav/CalDAVClient.html +++ b/docs/api/awl/caldav/CalDAVClient.html @@ -1271,7 +1271,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:11:56 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:05 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/awl/caldav/RRule.html b/docs/api/awl/caldav/RRule.html index 3e082666..66f7367e 100644 --- a/docs/api/awl/caldav/RRule.html +++ b/docs/api/awl/caldav/RRule.html @@ -170,7 +170,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/awl/caldav/_inc---RRule.php.html b/docs/api/awl/caldav/_inc---RRule.php.html index 55129ef1..88ef770d 100644 --- a/docs/api/awl/caldav/_inc---RRule.php.html +++ b/docs/api/awl/caldav/_inc---RRule.php.html @@ -74,7 +74,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/awl/caldav/_inc---caldav-client.php.html b/docs/api/awl/caldav/_inc---caldav-client.php.html index 94dae42d..78878fd0 100644 --- a/docs/api/awl/caldav/_inc---caldav-client.php.html +++ b/docs/api/awl/caldav/_inc---caldav-client.php.html @@ -63,7 +63,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:11:56 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:05 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/awl/caldav/iCalDate.html b/docs/api/awl/caldav/iCalDate.html index 7b9cbc97..6b60f20f 100644 --- a/docs/api/awl/caldav/iCalDate.html +++ b/docs/api/awl/caldav/iCalDate.html @@ -943,7 +943,7 @@

- Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

\ No newline at end of file diff --git a/docs/api/classtrees_awl.html b/docs/api/classtrees_awl.html index f10c458c..2b8788f1 100644 --- a/docs/api/classtrees_awl.html +++ b/docs/api/classtrees_awl.html @@ -38,7 +38,7 @@
  • RRule
  • - Documentation generated on Sat, 12 Sep 2009 00:11:56 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:05 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/classtrees_davical.html b/docs/api/classtrees_davical.html index 242935a8..e16d7f3d 100644 --- a/docs/api/classtrees_davical.html +++ b/docs/api/classtrees_davical.html @@ -54,7 +54,7 @@
  • DAViCalUser
  • - Documentation generated on Sat, 12 Sep 2009 00:11:56 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:04 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/Admin/_htdocs---users.php.html b/docs/api/davical/Admin/_htdocs---users.php.html index b55c2402..0b8f8298 100644 --- a/docs/api/davical/Admin/_htdocs---users.php.html +++ b/docs/api/davical/Admin/_htdocs---users.php.html @@ -187,7 +187,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:01 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:12 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/DAViCalSession/DAViCalSession.html b/docs/api/davical/DAViCalSession/DAViCalSession.html new file mode 100644 index 00000000..8f9e7825 --- /dev/null +++ b/docs/api/davical/DAViCalSession/DAViCalSession.html @@ -0,0 +1,236 @@ + + + + + + Docs For Class DAViCalSession + + + + +
    +

     Class DAViCalSession

    + + +
    +
    Description
    + +
    + +

    A class for creating and holding session information.

    +

    + Located in /inc/DAViCalSession.php (line 50) +

    + + +
    Session
    +   |
    +   --DAViCalSession
    + +
    +
    + + + + + +
    +
    Method Summary
    + +
    +
    +
    +  + DAViCalSession + DAViCalSession + ([string $sid = '']) +
    +
    +  + void + AssignSessionDetails + (object $u) +
    +
    +  + void + GetRelationships + () +
    +
    +  + void + GetRoles + () +
    +
    +  + boolean + LoginRequired + ([string $roles = '']) +
    +
    +
    +
    + + + +
    +
    Methods
    + +
    + + +
    + +
    + + Constructor DAViCalSession (line 61) +
    + + +

    Create a new DAViCalSession object.

    +

    We create a Session and extend it with some additional useful RSCDS related information.

    + +
    + DAViCalSession + + DAViCalSession + + ([string $sid = '']) +
    + +
      +
    • + string + $sid: A session identifier.
    • +
    + + +
    + +
    + +
    + + AssignSessionDetails (line 70) +
    + + +

    Internal function used to assign the session details to a user's new session.

    + +
    + void + + AssignSessionDetails + + (object $u) +
    + +
      +
    • + object + $u: The user+session object we (probably) read from the database.
    • +
    + + +
    + +
    + +
    + + GetRelationships (line 98) +
    + + +

    Method used to get the user's relationships

    + +
    + void + + GetRelationships + + () +
    + + + +
    + +
    + +
    + + GetRoles (line 83) +
    + + +

    Method used to get the user's roles

    + +
    + void + + GetRoles + + () +
    + + + +
    + +
    + +
    + + LoginRequired (line 120) +
    + + +

    Checks that this user is logged in, and presents a login screen if they aren't.

    +

    The function can optionally confirm whether they are a member of one of a list of roles, and deny access if they are not a member of any of them.

    +
      +
    • return: Whether or not the user is logged in and is a member of one of the required roles.
    • +
    + +
    + boolean + + LoginRequired + + ([string $roles = '']) +
    + +
      +
    • + string + $roles: The list of roles that the user must be a member of one of to be allowed to proceed.
    • +
    + + +
    + +
    +
    + + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:08 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/DAViCalSession/Tools.html b/docs/api/davical/DAViCalSession/Tools.html new file mode 100644 index 00000000..dfaee674 --- /dev/null +++ b/docs/api/davical/DAViCalSession/Tools.html @@ -0,0 +1,181 @@ + + + + + + Docs For Class Tools + + + + +
    +

     Class Tools

    + + +
    +
    Description
    + +
    + +

    + Located in /htdocs/tools.php (line 36) +

    + + +
    
    +	
    +			
    +
    + + + + + +
    +
    Method Summary
    + +
    +
    +
    +  + void + importFromDirectory + () +
    +
    +  + void + render + () +
    +
    +  + void + renderImportFromDirectory + () +
    +
    +  + void + renderSyncLDAP + () +
    +
    +
    +
    + + + +
    +
    Methods
    + +
    + + +
    + +
    + + importFromDirectory (line 97) +
    + + + +
    + void + + importFromDirectory + + () +
    + + + +
    + +
    + +
    + + render (line 38) +
    + + + +
    + void + + render + + () +
    + + + +
    + +
    + +
    + + renderImportFromDirectory (line 70) +
    + + + +
    + void + + renderImportFromDirectory + + () +
    + + + +
    + +
    + +
    + + renderSyncLDAP (line 46) +
    + + + +
    + void + + renderSyncLDAP + + () +
    + + + +
    + +
    +
    + + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:12 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/DAViCalSession/_htdocs---tools.php.html b/docs/api/davical/DAViCalSession/_htdocs---tools.php.html new file mode 100644 index 00000000..ef70ddfa --- /dev/null +++ b/docs/api/davical/DAViCalSession/_htdocs---tools.php.html @@ -0,0 +1,193 @@ + + + + + + Docs for page tools.php + + + + +
    +

    File/htdocs/tools.php

    + + +
    +
    Description
    + +
    + +

    Tools for manipulating calendars

    + + +
    +
    + + +
    +
    Classes
    + +
    + + + + + + + + + +
    ClassDescription
    +  class + Tools + + +
    +
    +
    + + +
    +
    Includes
    + +
    + +
    + +
    +  + + include + (page-header.php) + (line 32) + +
    + + + +
    + +
    + +
    +  + + include + (page-footer.php) + (line 154) + +
    + + + +
    + +
    + +
    +  + + require_once + ("DataEntry.php") + (line 16) + +
    + + + +
    + +
    + +
    +  + + require_once + ("../inc/always.php") + (line 12) + +
    + + +

    Tools for manipulating calendars

    + + +
    + +
    + +
    +  + + require_once + (interactive-page.php) + (line 17) + +
    + + + +
    + +
    + +
    +  + + require_once + ("classBrowser.php") + (line 18) + +
    + + + +
    + +
    + +
    +  + + require_once + (DAViCalSession.php) + (line 13) + +
    + + + +
    +
    +
    + + + + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:12 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/DAViCalSession/_inc---DAViCalSession.php.html b/docs/api/davical/DAViCalSession/_inc---DAViCalSession.php.html new file mode 100644 index 00000000..74c94a88 --- /dev/null +++ b/docs/api/davical/DAViCalSession/_inc---DAViCalSession.php.html @@ -0,0 +1,192 @@ + + + + + + Docs for page DAViCalSession.php + + + + +
    +

    File/inc/DAViCalSession.php

    + + +
    +
    Description
    + +
    + +

    DAViCal extensions to AWL Session handling

    + + +
    +
    + + +
    +
    Classes
    + +
    + + + + + + + + + +
    ClassDescription
    +  class + DAViCalSession + + A class for creating and holding session information. +
    +
    +
    + + +
    +
    Includes
    + +
    + +
    + +
    +  + + require_once + ('PgQuery.php') + (line 15) + +
    + + +

    All session data is held in the database.

    + +
    + +
    + +
    +  + + require_once + ('Session.php') + (line 41) + +
    + + +

    We extend the AWL Session class.

    + +
    +
    +
    + + + +
    +
    Variables
    + +
    + +
    + +
    + + + resource + $session + The session object is global. + (line 22) + +
    + + +
      +
    • name: $session + The session object is global.
    • +
    + + +
    +
    +
    + + +
    +
    Functions
    + +
    + +
    + +
    + + local_session_sql (line 31) +
    + + +
      +
    • todo: Make this a defined constant
    • +
    +
    + void + + local_session_sql + + () +
    + + + +
    +
    +
    + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:08 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/DAViCalUser/DAViCalUser.html b/docs/api/davical/DAViCalUser/DAViCalUser.html new file mode 100644 index 00000000..43dbc12f --- /dev/null +++ b/docs/api/davical/DAViCalUser/DAViCalUser.html @@ -0,0 +1,478 @@ + + + + + + Docs For Class DAViCalUser + + + + +
    +

     Class DAViCalUser

    + + +
    +
    Description
    + +
    + +

    A class for viewing and maintaining DAViCal User records

    +

    + Located in /inc/DAViCalUser.php (line 25) +

    + + +
    User
    +   |
    +   --DAViCalUser
    + +
    +
    + + + + +
    +
    Variable Summary
    + + +
    + + +
    +
    Method Summary
    + +
    +
    +
    +  + DAViCalUser + DAViCalUser + ( $id, [ $prefix = '']) +
    +
    +  + boolean + AllowedTo + (string $whatever) +
    +
    +  + void + HandleAction + ( $action) +
    +
    +  + string + Render + ([ $title = '']) +
    +
    +  + string + RenderCollections + ( $ef, [ $title = null]) +
    +
    +  + string + RenderRelationshipsFrom + ( $ef, [ $title = null]) +
    +
    +  + string + RenderRelationshipsTo + ( $ef, [ $title = null]) +
    +
    +  + boolean + Validate + () +
    +
    +  + void + Write + () +
    +
    +
    +
    + + +
    +
    Variables
    + +
    + + +
    + +
    + + + mixed + $delete_collection_confirmation_required + (line 28) + +
    + + + + + + + +
    + +
    + +
    + + + mixed + $delete_user_confirmation_required + (line 29) + +
    + + + + + + + +
    + +
    +
    + + +
    +
    Methods
    + +
    + + +
    + +
    + + Constructor DAViCalUser (line 34) +
    + + +

    Constructor - nothing fancy as yet.

    + +
    + DAViCalUser + + DAViCalUser + + ( $id, [ $prefix = '']) +
    + +
      +
    • + + $id
    • +
    • + + $prefix
    • +
    + + +
    + +
    + +
    + + AllowedTo (line 319) +
    + + +

    Extend parent definition of what the current user is allowed to do

    +
      +
    • return: Whether they are allowed to.
    • +
    + +
    + boolean + + AllowedTo + + (string $whatever) +
    + +
      +
    • + string + $whatever: What the user wants to do
    • +
    + + +
    + +
    + +
    + + HandleAction (line 347) +
    + + +

    Handle any unusual actions we might invent

    + +
    + void + + HandleAction + + ( $action) +
    + +
      +
    • + + $action
    • +
    + + +
    + +
    + +
    + + Render (line 50) +
    + + +

    Render the form / viewer as HTML to show the user

    +
      +
    • return: An HTML fragment to display in the page.
    • +
    + +
    + string + + Render + + ([ $title = '']) +
    + +
      +
    • + + $title
    • +
    + + +
    + +
    + +
    + + RenderCollections (line 240) +
    + + +

    Render the user's collections

    +
      +
    • return: The string of html to be output
    • +
    + +
    + string + + RenderCollections + + ( $ef, [ $title = null]) +
    + +
      +
    • + + $ef
    • +
    • + + $title
    • +
    + + +
    + +
    + +
    + + RenderRelationshipsFrom (line 107) +
    + + +

    Render the user's relationships to other users & resources

    +
      +
    • return: The string of html to be output
    • +
    + +
    + string + + RenderRelationshipsFrom + + ( $ef, [ $title = null]) +
    + +
      +
    • + + $ef
    • +
    • + + $title
    • +
    + + +
    + +
    + +
    + + RenderRelationshipsTo (line 156) +
    + + +

    Render the user's relationships to other users & resources

    +
      +
    • return: The string of html to be output
    • +
    + +
    + string + + RenderRelationshipsTo + + ( $ef, [ $title = null]) +
    + +
      +
    • + + $ef
    • +
    • + + $title
    • +
    + + +
    + +
    + +
    + + Validate (line 309) +
    + + +

    Validate the information the user submitted

    +
      +
    • return: Whether the form data validated OK.
    • +
    + +
    + boolean + + Validate + + () +
    + + + +
    + +
    + +
    + + Write (line 422) +
    + + +

    Write the record to the file

    + +
    + void + + Write + + () +
    + + + +
    + +
    +
    + + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:08 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/DAViCalUser/_inc---DAViCalUser.php.html b/docs/api/davical/DAViCalUser/_inc---DAViCalUser.php.html new file mode 100644 index 00000000..743ee999 --- /dev/null +++ b/docs/api/davical/DAViCalUser/_inc---DAViCalUser.php.html @@ -0,0 +1,148 @@ + + + + + + Docs for page DAViCalUser.php + + + + +
    +

    File/inc/DAViCalUser.php

    + + +
    +
    Description
    + +
    + +

    User maintain / view with DAViCal specific associated tables

    + + +
    +
    + + +
    +
    Classes
    + +
    + + + + + + + + + +
    ClassDescription
    +  class + DAViCalUser + + A class for viewing and maintaining DAViCal User records +
    +
    +
    + + +
    +
    Includes
    + +
    + +
    + +
    +  + + include + ('User.php') + (line 12) + +
    + + +

    User maintain / view with DAViCal specific associated tables

    + + +
    + +
    + +
    +  + + include + ('classBrowser.php') + (line 13) + +
    + + + +
    + +
    + +
    +  + + include + ('check_UTF8.php') + (line 14) + +
    + + + +
    + +
    + +
    +  + + include + ('caldav-PUT-functions.php') + (line 15) + +
    + + + +
    +
    +
    + + + + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:08 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/HTTPAuthSession/HTTPAuthSession.html b/docs/api/davical/HTTPAuthSession/HTTPAuthSession.html index 39edbad8..fb23e22f 100644 --- a/docs/api/davical/HTTPAuthSession/HTTPAuthSession.html +++ b/docs/api/davical/HTTPAuthSession/HTTPAuthSession.html @@ -143,7 +143,7 @@
    - AllowedTo (line 244) + AllowedTo (line 252)
    @@ -174,7 +174,7 @@
    - AssignSessionDetails (line 267) + AssignSessionDetails (line 275)
    @@ -303,7 +303,7 @@
    - GetRoles (line 252) + GetRoles (line 260)
    @@ -354,7 +354,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/HTTPAuthSession/_inc---HTTPAuthSession.php.html b/docs/api/davical/HTTPAuthSession/_inc---HTTPAuthSession.php.html index fb62b22f..66fbc4d8 100644 --- a/docs/api/davical/HTTPAuthSession/_inc---HTTPAuthSession.php.html +++ b/docs/api/davical/HTTPAuthSession/_inc---HTTPAuthSession.php.html @@ -63,7 +63,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/Principal/CalDAVPrincipal.html b/docs/api/davical/Principal/CalDAVPrincipal.html index 68c34a5d..2ce08a03 100644 --- a/docs/api/davical/Principal/CalDAVPrincipal.html +++ b/docs/api/davical/Principal/CalDAVPrincipal.html @@ -473,7 +473,7 @@
    - AsCollection (line 294) + AsCollection (line 295)
    @@ -522,7 +522,7 @@
    - RenderAsXML (line 335) + RenderAsXML (line 336)
    @@ -561,7 +561,7 @@
    - RenderPrivileges (line 314) + RenderPrivileges (line 315)
    @@ -591,7 +591,7 @@
    - UsernameFromEMail (line 280) + UsernameFromEMail (line 281)
    @@ -618,7 +618,7 @@
    - UsernameFromPath (line 246) + UsernameFromPath (line 247)
    @@ -649,7 +649,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/Principal/_inc---CalDAVPrincipal.php.html b/docs/api/davical/Principal/_inc---CalDAVPrincipal.php.html index 8742679e..68a49fdf 100644 --- a/docs/api/davical/Principal/_inc---CalDAVPrincipal.php.html +++ b/docs/api/davical/Principal/_inc---CalDAVPrincipal.php.html @@ -63,7 +63,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/PublicSession/PublicSession.html b/docs/api/davical/PublicSession/PublicSession.html new file mode 100644 index 00000000..d083fa22 --- /dev/null +++ b/docs/api/davical/PublicSession/PublicSession.html @@ -0,0 +1,139 @@ + + + + + + Docs For Class PublicSession + + + + +
    +

     Class PublicSession

    + + +
    +
    Description
    + +
    + +

    A Class for handling a public (anonymous) session

    +

    + Located in /inc/PublicSession.php (line 17) +

    + + +
    
    +	
    +			
    +
    + + + + + +
    +
    Method Summary
    + +
    +
    +
    +  + PublicSession + PublicSession + () +
    +
    +  + boolean + AllowedTo + (string $whatever) +
    +
    +
    +
    + + + +
    +
    Methods
    + +
    + + +
    + +
    + + Constructor PublicSession (line 50) +
    + + +

    The constructor, which just calls the actual type configured

    + +
    + PublicSession + + PublicSession + + () +
    + + + +
    + +
    + +
    + + AllowedTo (line 71) +
    + + +

    Checks whether a user is allowed to do something.

    +

    The check is performed to see if the user has that role.

    +
      +
    • return: Whether or not the user has the specified role.
    • +
    + +
    + boolean + + AllowedTo + + (string $whatever) +
    + +
      +
    • + string + $whatever: The role we want to know if the user has.
    • +
    + + +
    + +
    +
    + + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/PublicSession/_inc---PublicSession.php.html b/docs/api/davical/PublicSession/_inc---PublicSession.php.html new file mode 100644 index 00000000..7d7ec313 --- /dev/null +++ b/docs/api/davical/PublicSession/_inc---PublicSession.php.html @@ -0,0 +1,69 @@ + + + + + + Docs for page PublicSession.php + + + + +
    +

    File/inc/PublicSession.php

    + + +
    +
    Description
    + +
    + +

    A Class for faking sessions which are anonymous access to a resource

    + + +
    +
    + + +
    +
    Classes
    + +
    + + + + + + + + + +
    ClassDescription
    +  class + PublicSession + + A Class for handling a public (anonymous) session +
    +
    +
    + + + + + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/RRuleTest.html b/docs/api/davical/RRuleTest.html index f9921606..c1a7ad01 100644 --- a/docs/api/davical/RRuleTest.html +++ b/docs/api/davical/RRuleTest.html @@ -295,7 +295,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:01 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/Request/CalDAVRequest.html b/docs/api/davical/Request/CalDAVRequest.html index c1a3add3..f424f7e1 100644 --- a/docs/api/davical/Request/CalDAVRequest.html +++ b/docs/api/davical/Request/CalDAVRequest.html @@ -116,7 +116,7 @@
    -
    +
     CalDAVRequest CalDAVRequest @@ -165,6 +165,12 @@ ( $lock_token, string $dav_name)
    +  + void + IsCalendar + () +
    +
     void IsCollection @@ -501,7 +507,7 @@
    - AllowedTo (line 716) + AllowedTo (line 736)
    @@ -529,7 +535,7 @@
    - DepthRegexTail (line 548) + DepthRegexTail (line 559)
    @@ -551,7 +557,7 @@
    - DoResponse (line 810) + DoResponse (line 830)
    @@ -584,7 +590,7 @@
    - FailIfLocked (line 630) + FailIfLocked (line 641)
    @@ -609,7 +615,7 @@
    - GetDepthName (line 539) + GetDepthName (line 550)
    @@ -631,7 +637,7 @@
    - GetLockDetails (line 616) + GetLockDetails (line 627)
    @@ -658,7 +664,7 @@
    - GetLockRow (line 559) + GetLockRow (line 570)
    @@ -683,12 +689,34 @@
    - +
    - IsCollection (line 665) + IsCalendar (line 687) +
    + + +

    Returns true if the URL referenced by this request points at a calendar collection.

    + +
    + void + + IsCalendar + + () +
    + + + +
    + +
    + +
    + + IsCollection (line 676)
    @@ -706,11 +734,11 @@
    -
    +
    - IsInfiniteDepth (line 698) + IsInfiniteDepth (line 718)
    @@ -728,11 +756,11 @@
    -
    +
    - IsLocked (line 496) + IsLocked (line 507)
    @@ -753,11 +781,11 @@
    -
    +
    - IsPrincipal (line 676) + IsPrincipal (line 696)
    @@ -775,11 +803,11 @@
    -
    +
    - IsProxyRequest (line 687) + IsProxyRequest (line 707)
    @@ -797,11 +825,11 @@
    -
    +
    - IsPublic (line 528) + IsPublic (line 539)
    @@ -819,11 +847,11 @@
    -
    +
    - setPermissions (line 416) + setPermissions (line 427)
    @@ -849,11 +877,11 @@
    -
    +
    - SupportedPrivileges (line 847) + SupportedPrivileges (line 867)
    @@ -874,11 +902,11 @@
    -
    +
    - UnsupportedRequest (line 775) + UnsupportedRequest (line 795)
    @@ -901,11 +929,11 @@
    -
    +
    - UserFromPath (line 372) + UserFromPath (line 383)
    @@ -923,11 +951,11 @@
    -
    +
    - ValidateLockToken (line 585) + ValidateLockToken (line 596)
    @@ -950,11 +978,11 @@
    -
    +
    - XMLResponse (line 795) + XMLResponse (line 815)
    @@ -985,7 +1013,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:58 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/Request/_inc---CalDAVRequest.php.html b/docs/api/davical/Request/_inc---CalDAVRequest.php.html index aeb904a3..aa6231d8 100644 --- a/docs/api/davical/Request/_inc---CalDAVRequest.php.html +++ b/docs/api/davical/Request/_inc---CalDAVRequest.php.html @@ -75,7 +75,7 @@
    -
    +
     @@ -98,7 +98,7 @@
    -
    +
     @@ -126,7 +126,7 @@
    -
    +
    @@ -146,7 +146,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:58 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_htdocs---collection.php.html b/docs/api/davical/_htdocs---collection.php.html index 4c2f5495..b88a66a0 100644 --- a/docs/api/davical/_htdocs---collection.php.html +++ b/docs/api/davical/_htdocs---collection.php.html @@ -34,7 +34,7 @@
    -
    +
     @@ -49,7 +49,7 @@
    -
    +
     @@ -64,7 +64,7 @@
    -
    +
     @@ -79,7 +79,7 @@
    -
    +
     @@ -94,7 +94,7 @@
    -
    +
     @@ -109,7 +109,7 @@
    -
    +
     @@ -124,7 +124,7 @@
    -
    +
     @@ -139,7 +139,7 @@
    -
    +
     @@ -160,7 +160,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:58 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:08 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_htdocs---freebusy.php.html b/docs/api/davical/_htdocs---freebusy.php.html index a1f9153b..c28f9ee9 100644 --- a/docs/api/davical/_htdocs---freebusy.php.html +++ b/docs/api/davical/_htdocs---freebusy.php.html @@ -103,7 +103,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_htdocs---help.php.html b/docs/api/davical/_htdocs---help.php.html index 921a5dc9..633e3130 100644 --- a/docs/api/davical/_htdocs---help.php.html +++ b/docs/api/davical/_htdocs---help.php.html @@ -115,7 +115,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_htdocs---index.php.html b/docs/api/davical/_htdocs---index.php.html index a853654d..2850bf72 100644 --- a/docs/api/davical/_htdocs---index.php.html +++ b/docs/api/davical/_htdocs---index.php.html @@ -131,7 +131,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_htdocs---relationship_types.php.html b/docs/api/davical/_htdocs---relationship_types.php.html index e667d5de..a83c138f 100644 --- a/docs/api/davical/_htdocs---relationship_types.php.html +++ b/docs/api/davical/_htdocs---relationship_types.php.html @@ -160,7 +160,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_htdocs---roles.php.html b/docs/api/davical/_htdocs---roles.php.html index 9f5c98b6..166fe8c5 100644 --- a/docs/api/davical/_htdocs---roles.php.html +++ b/docs/api/davical/_htdocs---roles.php.html @@ -130,7 +130,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_htdocs---testpdo.php.html b/docs/api/davical/_htdocs---testpdo.php.html new file mode 100644 index 00000000..06d1c1a5 --- /dev/null +++ b/docs/api/davical/_htdocs---testpdo.php.html @@ -0,0 +1,76 @@ + + + + + + Docs for page testpdo.php + + + + +
    +

    File/htdocs/testpdo.php

    + + +
    +
    Description
    + +
    + + +
    +
    + + + +
    +
    Includes
    + +
    + +
    + +
    +  + + require + (PdoQuery.php) + (line 4) + +
    + + + +
    + +
    + +
    +  + + require_once + ("../inc/always.php") + (line 2) + +
    + + + +
    +
    +
    + + + + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:12 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/_htdocs---usr.php.html b/docs/api/davical/_htdocs---usr.php.html index aaeffecc..22c011a7 100644 --- a/docs/api/davical/_htdocs---usr.php.html +++ b/docs/api/davical/_htdocs---usr.php.html @@ -33,19 +33,20 @@ Includes
    - +
     include - (caldav-PUT-functions.php) - (line 55) + (page-header.php) + (line 66)
    +

    Handle any actions, such as 'delete_relation'

    @@ -56,45 +57,12 @@ include (page-footer.php) - (line 94) + (line 68)
    -
    - -
    - -
    -  - - include - (check_UTF8.php) - (line 52) - -
    - - -

    If the user has uploaded a .ics file as a calendar, we fake this out

    -

    as if it were a "PUT" request against a collection. This is something of a hack. It works though :-)

    - -
    - -
    - -
    -  - - include - (page-header.php) - (line 92) - -
    - - -

    Handle any actions, such as 'delete_relation'

    -
    @@ -110,6 +78,36 @@ +
    + +
    + +
    +  + + require_once + (DAViCalSession.php) + (line 3) + +
    + + + +
    + +
    + +
    +  + + require_once + (DAViCalUser.php) + (line 9) + +
    + + +
    @@ -125,36 +123,6 @@ -
    - -
    - -
    -  - - require_once - (DAViCalSession.php) - (line 3) - -
    - - - -
    - -
    - -
    -  - - require_once - (DAViCalUser.php) - (line 9) - -
    - - -
    @@ -163,7 +131,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:01 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:12 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---always.php.html b/docs/api/davical/_inc---always.php.html index 60117069..2f8bbffb 100644 --- a/docs/api/davical/_inc---always.php.html +++ b/docs/api/davical/_inc---always.php.html @@ -40,37 +40,7 @@ | Functions
    - -
    - -
    -  - - include_once - ("../config/config.php") - (line 82) - -
    - - - -
    - -
    - -
    -  - - include_once - ("/etc/davical/config.php") - (line 79) - -
    - - - -
    - +
    @@ -78,27 +48,26 @@ include_once ("davical_configuration_missing.php") - (line 85) + (line 92)
    - +
     include_once - ("PgQuery.php") - (line 127) + ("../config/config.php") + (line 89)
    -

    Force the domain name to what was in the configuration file

    @@ -109,7 +78,7 @@ include_once ("/etc/davical/".$_SERVER['SERVER_NAME']."-conf.php") - (line 73) + (line 83)
    @@ -117,34 +86,55 @@

    We use @file_exists because things like open_basedir might noisily deny access which could break DAViCal completely by causing output to start too early.

    - +
     include_once - ("/etc/rscds/".$_SERVER['SERVER_NAME']."-conf.php") - (line 76) + ("/etc/davical/config.php") + (line 86)
    - +
    +
    +  + + include_once + ("PgQuery.php") + (line 134) + +
    + + +

    Force the domain name to what was in the configuration file

    + +
    + +
    +
     require_once ("AWLUtilities.php") - (line 44) + (line 54)
    +
    @@ -162,11 +152,11 @@
    -
    +
    - ConstructURL (line 245) + ConstructURL (line 252)
    @@ -191,11 +181,11 @@
    -
    +
    - getStatusMessage (line 188) + getStatusMessage (line 195)
    @@ -220,11 +210,11 @@
    -
    +
    - getUserByID (line 167) + getUserByID (line 174)
    @@ -249,11 +239,11 @@
    -
    +
    - getUserByName (line 146) + getUserByName (line 153)
    @@ -278,11 +268,11 @@
    -
    +
    - ISODateToHTTPDate (line 272) + ISODateToHTTPDate (line 279)
    @@ -307,7 +297,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:56 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:05 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---caldav-LOCK.php.html b/docs/api/davical/_inc---caldav-LOCK.php.html index ad859273..e81ce4cb 100644 --- a/docs/api/davical/_inc---caldav-LOCK.php.html +++ b/docs/api/davical/_inc---caldav-LOCK.php.html @@ -56,7 +56,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---caldav-REPORT-calquery.php.html b/docs/api/davical/_inc---caldav-REPORT-calquery.php.html index e24020f4..18f6b6d1 100644 --- a/docs/api/davical/_inc---caldav-REPORT-calquery.php.html +++ b/docs/api/davical/_inc---caldav-REPORT-calquery.php.html @@ -143,7 +143,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---caldav-REPORT-freebusy.php.html b/docs/api/davical/_inc---caldav-REPORT-freebusy.php.html index 67438fb2..c2686efe 100644 --- a/docs/api/davical/_inc---caldav-REPORT-freebusy.php.html +++ b/docs/api/davical/_inc---caldav-REPORT-freebusy.php.html @@ -71,7 +71,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---caldav-REPORT-multiget.php.html b/docs/api/davical/_inc---caldav-REPORT-multiget.php.html index 7ded2105..036bf8c0 100644 --- a/docs/api/davical/_inc---caldav-REPORT-multiget.php.html +++ b/docs/api/davical/_inc---caldav-REPORT-multiget.php.html @@ -31,7 +31,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---caldav-REPORT-principal.php.html b/docs/api/davical/_inc---caldav-REPORT-principal.php.html index 3702dc01..4576a677 100644 --- a/docs/api/davical/_inc---caldav-REPORT-principal.php.html +++ b/docs/api/davical/_inc---caldav-REPORT-principal.php.html @@ -29,7 +29,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---check_UTF8.php.html b/docs/api/davical/_inc---check_UTF8.php.html index 71bf5eee..565833c5 100644 --- a/docs/api/davical/_inc---check_UTF8.php.html +++ b/docs/api/davical/_inc---check_UTF8.php.html @@ -37,7 +37,7 @@
    -
    +
    @@ -62,7 +62,7 @@
    -
    +
    @@ -89,7 +89,7 @@
    -
    +
    @@ -119,7 +119,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:58 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:08 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---davical_configuration_missing.php.html b/docs/api/davical/_inc---davical_configuration_missing.php.html index f0bd9892..cc1d0c15 100644 --- a/docs/api/davical/_inc---davical_configuration_missing.php.html +++ b/docs/api/davical/_inc---davical_configuration_missing.php.html @@ -70,7 +70,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:09 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---freebusy-GET.php.html b/docs/api/davical/_inc---freebusy-GET.php.html index 02995477..05634408 100644 --- a/docs/api/davical/_inc---freebusy-GET.php.html +++ b/docs/api/davical/_inc---freebusy-GET.php.html @@ -70,7 +70,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---interactive-page.php.html b/docs/api/davical/_inc---interactive-page.php.html index cb3f69ae..81c03339 100644 --- a/docs/api/davical/_inc---interactive-page.php.html +++ b/docs/api/davical/_inc---interactive-page.php.html @@ -55,7 +55,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---other_translated_strings.php.html b/docs/api/davical/_inc---other_translated_strings.php.html index 9671f46f..c1e9b401 100644 --- a/docs/api/davical/_inc---other_translated_strings.php.html +++ b/docs/api/davical/_inc---other_translated_strings.php.html @@ -28,7 +28,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---page-footer.php.html b/docs/api/davical/_inc---page-footer.php.html index 4294f842..5ea06b02 100644 --- a/docs/api/davical/_inc---page-footer.php.html +++ b/docs/api/davical/_inc---page-footer.php.html @@ -28,7 +28,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---page-header.php.html b/docs/api/davical/_inc---page-header.php.html index ca68101b..eedb8644 100644 --- a/docs/api/davical/_inc---page-header.php.html +++ b/docs/api/davical/_inc---page-header.php.html @@ -85,7 +85,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/_inc---test-RRULE.php.html b/docs/api/davical/_inc---test-RRULE.php.html index 07dacfab..7e00430c 100644 --- a/docs/api/davical/_inc---test-RRULE.php.html +++ b/docs/api/davical/_inc---test-RRULE.php.html @@ -100,7 +100,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:01 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/authentication/_inc---auth-functions.php.html b/docs/api/davical/authentication/_inc---auth-functions.php.html index 049978d8..b6b95206 100644 --- a/docs/api/davical/authentication/_inc---auth-functions.php.html +++ b/docs/api/davical/authentication/_inc---auth-functions.php.html @@ -98,7 +98,7 @@
    - AuthExternalAWL (line 142) + AuthExternalAWL (line 161)
    @@ -208,7 +208,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:56 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:05 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_htdocs---caldav.php.html b/docs/api/davical/caldav/_htdocs---caldav.php.html index d639e774..60a99e50 100644 --- a/docs/api/davical/caldav/_htdocs---caldav.php.html +++ b/docs/api/davical/caldav/_htdocs---caldav.php.html @@ -47,7 +47,7 @@ include_once (caldav-OPTIONS.php) - (line 52) + (line 48)
    @@ -62,7 +62,7 @@ include_once (caldav-GET.php) - (line 61) + (line 57)
    @@ -77,7 +77,7 @@ include_once (caldav-REPORT.php) - (line 53) + (line 49)
    @@ -92,7 +92,7 @@ include_once (caldav-PROPFIND.php) - (line 54) + (line 50)
    @@ -107,7 +107,7 @@ include_once (caldav-MKCALENDAR.php) - (line 56) + (line 52)
    @@ -122,7 +122,7 @@ include_once (caldav-PROPPATCH.php) - (line 55) + (line 51)
    @@ -137,7 +137,7 @@ include_once (caldav-PUT.php) - (line 58) + (line 54)
    @@ -152,7 +152,7 @@ include_once (caldav-MKCALENDAR.php) - (line 57) + (line 53)
    @@ -167,7 +167,7 @@ include_once (caldav-LOCK.php) - (line 64) + (line 60)
    @@ -182,7 +182,7 @@ include_once (caldav-GET.php) - (line 60) + (line 56)
    @@ -197,7 +197,7 @@ include_once (caldav-DELETE.php) - (line 62) + (line 58)
    @@ -212,7 +212,7 @@ include_once (caldav-POST.php) - (line 59) + (line 55)
    @@ -227,7 +227,7 @@ include_once (caldav-LOCK.php) - (line 63) + (line 59)
    @@ -242,7 +242,7 @@ include_once (test-RRULE.php) - (line 66) + (line 62)
    @@ -293,13 +293,13 @@ require_once (CalDAVRequest.php) - (line 33) + (line 29)
    -

    From reading the "Scheduling Extensions to CalDAV" draft I don't think that we will be doing 'calendar-schedule' any time soon. The current spec is at: http://www.ietf.org/internet-drafts/draft-desruisseaux-caldav-sched-03.txt

    -

    access-control is rfc3744, so we will say we do it, but I doubt if we do it in all (or even much of) it's glory really.

    +

    access-control is rfc3744, we do some of it, but no way to say that.

    +

    calendar-schedule is another one we do some of, but the spec is not final yet either.

    @@ -309,7 +309,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_htdocs---public.php.html b/docs/api/davical/caldav/_htdocs---public.php.html index 92be861b..112c4b51 100644 --- a/docs/api/davical/caldav/_htdocs---public.php.html +++ b/docs/api/davical/caldav/_htdocs---public.php.html @@ -188,7 +188,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:12:00 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:11 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-DELETE.php.html b/docs/api/davical/caldav/_inc---caldav-DELETE.php.html index b02e400b..91d77f2e 100644 --- a/docs/api/davical/caldav/_inc---caldav-DELETE.php.html +++ b/docs/api/davical/caldav/_inc---caldav-DELETE.php.html @@ -34,7 +34,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-GET.php.html b/docs/api/davical/caldav/_inc---caldav-GET.php.html index 13265dbc..c02cab6e 100644 --- a/docs/api/davical/caldav/_inc---caldav-GET.php.html +++ b/docs/api/davical/caldav/_inc---caldav-GET.php.html @@ -67,7 +67,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-MKCALENDAR.php.html b/docs/api/davical/caldav/_inc---caldav-MKCALENDAR.php.html index ba04b199..baacc728 100644 --- a/docs/api/davical/caldav/_inc---caldav-MKCALENDAR.php.html +++ b/docs/api/davical/caldav/_inc---caldav-MKCALENDAR.php.html @@ -67,7 +67,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-OPTIONS.php.html b/docs/api/davical/caldav/_inc---caldav-OPTIONS.php.html index 8b355b85..9ec20e13 100644 --- a/docs/api/davical/caldav/_inc---caldav-OPTIONS.php.html +++ b/docs/api/davical/caldav/_inc---caldav-OPTIONS.php.html @@ -34,7 +34,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-POST.php.html b/docs/api/davical/caldav/_inc---caldav-POST.php.html index 4de2c74c..61b7c26a 100644 --- a/docs/api/davical/caldav/_inc---caldav-POST.php.html +++ b/docs/api/davical/caldav/_inc---caldav-POST.php.html @@ -69,6 +69,12 @@ +

    CalDAV Server - handle PUT method

    + @@ -154,7 +160,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-PROPPATCH.php.html b/docs/api/davical/caldav/_inc---caldav-PROPPATCH.php.html index 45b73dc3..b38efdd6 100644 --- a/docs/api/davical/caldav/_inc---caldav-PROPPATCH.php.html +++ b/docs/api/davical/caldav/_inc---caldav-PROPPATCH.php.html @@ -34,7 +34,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-PUT-functions.php.html b/docs/api/davical/caldav/_inc---caldav-PUT-functions.php.html index cb9f8318..3b9b43aa 100644 --- a/docs/api/davical/caldav/_inc---caldav-PUT-functions.php.html +++ b/docs/api/davical/caldav/_inc---caldav-PUT-functions.php.html @@ -77,7 +77,7 @@
    - controlRequestContainer (line 57) + controlRequestContainer (line 58)
    @@ -87,7 +87,7 @@ controlRequestContainer - (string $username, int $user_no, string $path, boolean $caldav_context) + (string $username, int $user_no, string $path, boolean $caldav_context, [boolean $public = null])
      @@ -103,6 +103,9 @@
    • boolean $caldav_context: Whether we are responding via CalDAV or interactively
    • +
    • + boolean + $public: Whether the collection will be public, should we need to create it
    @@ -112,7 +115,7 @@
    - create_scheduling_requests (line 144) + create_scheduling_requests (line 148)
    @@ -141,7 +144,7 @@
    - import_collection (line 209) + import_collection (line 213)
    @@ -176,7 +179,7 @@
    - public_events_only (line 106) + public_events_only (line 110)
    @@ -208,7 +211,7 @@
    - putCalendarResource (line 391) + putCalendarResource (line 396)
    @@ -284,7 +287,7 @@
    - simple_write_resource (line 661) + simple_write_resource (line 666)
    @@ -319,7 +322,7 @@
    - update_scheduling_requests (line 174) + update_scheduling_requests (line 178)
    @@ -348,7 +351,7 @@
    - write_resource (line 483) + write_resource (line 488)
    @@ -404,7 +407,7 @@
    - write_scheduling_request (line 136) + write_scheduling_request (line 140)
    @@ -438,7 +441,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-PUT.php.html b/docs/api/davical/caldav/_inc---caldav-PUT.php.html index 02945d88..dbace94a 100644 --- a/docs/api/davical/caldav/_inc---caldav-PUT.php.html +++ b/docs/api/davical/caldav/_inc---caldav-PUT.php.html @@ -67,7 +67,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/caldav/_inc---caldav-REPORT.php.html b/docs/api/davical/caldav/_inc---caldav-REPORT.php.html index 403aee35..983bdd08 100644 --- a/docs/api/davical/caldav/_inc---caldav-REPORT.php.html +++ b/docs/api/davical/caldav/_inc---caldav-REPORT.php.html @@ -187,7 +187,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:07 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/ldap/_inc---drivers_ldap.php.html b/docs/api/davical/ldap/_inc---drivers_ldap.php.html index 2d46d58b..af7893a2 100644 --- a/docs/api/davical/ldap/_inc---drivers_ldap.php.html +++ b/docs/api/davical/ldap/_inc---drivers_ldap.php.html @@ -113,7 +113,7 @@
    - getStaticLdap (line 199) + getStaticLdap (line 209)
    @@ -134,7 +134,7 @@
    - LDAP_check (line 246) + LDAP_check (line 256)
    @@ -163,7 +163,7 @@
    - sync_LDAP (line 316) + sync_LDAP (line 325)
    @@ -184,7 +184,7 @@
    - sync_user_from_LDAP (line 216) + sync_user_from_LDAP (line 226)
    @@ -218,7 +218,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:09 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/ldap/_inc---drivers_squid_pam.php.html b/docs/api/davical/ldap/_inc---drivers_squid_pam.php.html index e0b193db..221a8b40 100644 --- a/docs/api/davical/ldap/_inc---drivers_squid_pam.php.html +++ b/docs/api/davical/ldap/_inc---drivers_squid_pam.php.html @@ -141,7 +141,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:09 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/ldap/ldapDrivers.html b/docs/api/davical/ldap/ldapDrivers.html index 7b8e2c0c..d2172a8d 100644 --- a/docs/api/davical/ldap/ldapDrivers.html +++ b/docs/api/davical/ldap/ldapDrivers.html @@ -68,7 +68,7 @@  array requestUser - (string $filter, [array $attributes = NULL], string $passwd) + (string $filter, [array $attributes = NULL],  $username, string $passwd) @@ -185,7 +185,7 @@ requestUser - (string $filter, [array $attributes = NULL], string $passwd) + (string $filter, [array $attributes = NULL],  $username, string $passwd)
      @@ -198,6 +198,9 @@
    • string $passwd: password to check
    • +
    • + + $username
    @@ -208,7 +211,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:09 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/ldap/squidPamDrivers.html b/docs/api/davical/ldap/squidPamDrivers.html index 1e6c3a18..97109112 100644 --- a/docs/api/davical/ldap/squidPamDrivers.html +++ b/docs/api/davical/ldap/squidPamDrivers.html @@ -133,7 +133,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:59 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:09 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/davical/logging/_inc---log_caldav_action.php.html b/docs/api/davical/logging/_inc---log_caldav_action.php.html new file mode 100644 index 00000000..ee3df4d0 --- /dev/null +++ b/docs/api/davical/logging/_inc---log_caldav_action.php.html @@ -0,0 +1,94 @@ + + + + + + Docs for page log_caldav_action.php + + + + +
    +

    File/inc/log_caldav_action.php

    + + +
    +
    Description
    + +
    + +

    Allows logging of CalDAV actions (PUT/DELETE) for possible export or sync through some other glue.

    + + +
    +
    + + + + + + +
    +
    Functions
    + +
    + +
    + +
    + + log_caldav_action (line 26) +
    + + +

    Log the action

    +
    + void + + log_caldav_action + + (string $action_type, string $uid, integer $user_no, integer $collection_id, string $dav_name) +
    + +
      +
    • + string + $action_type: INSERT / UPDATE or DELETE
    • +
    • + string + $uid: The UID of the modified item
    • +
    • + integer + $user_no: The user owning the containing collection.
    • +
    • + integer + $collection_id: The ID of the containing collection.
    • +
    • + string + $dav_name: The DAV path of the item, relative to the DAViCal base path
    • +
    + + +
    +
    +
    + +

    + Documentation generated on Tue, 06 Oct 2009 02:03:10 -0700 by phpDocumentor 1.3.2 +

    +
    + \ No newline at end of file diff --git a/docs/api/davical/propfind/_inc---caldav-PROPFIND.php.html b/docs/api/davical/propfind/_inc---caldav-PROPFIND.php.html index 35856d6f..47aafb1f 100644 --- a/docs/api/davical/propfind/_inc---caldav-PROPFIND.php.html +++ b/docs/api/davical/propfind/_inc---caldav-PROPFIND.php.html @@ -282,7 +282,7 @@
    - get_collection (line 677) + get_collection (line 678)
    @@ -347,7 +347,7 @@
    - get_item (line 752) + get_item (line 753)
    @@ -453,7 +453,7 @@

    - Documentation generated on Sat, 12 Sep 2009 00:11:57 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:06 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/elementindex.html b/docs/api/elementindex.html index f36ee696..c26b3e16 100644 --- a/docs/api/elementindex.html +++ b/docs/api/elementindex.html @@ -109,15 +109,7 @@ AllowedTo
    -
    CalDAVRequest::AllowedTo() in CalDAVRequest.php
    -
    Are we allowed to do the requested activity
    -
    -
    - Method - AllowedTo -
    -
    -
    PublicSession::AllowedTo() in PublicSession.php
    +
    HTTPAuthSession::AllowedTo() in HTTPAuthSession.php
    Checks whether a user is allowed to do something.
    @@ -133,11 +125,19 @@ AllowedTo
    -
    HTTPAuthSession::AllowedTo() in HTTPAuthSession.php
    +
    PublicSession::AllowedTo() in PublicSession.php
    Checks whether a user is allowed to do something.
    Method + AllowedTo +
    +
    +
    CalDAVRequest::AllowedTo() in CalDAVRequest.php
    +
    Are we allowed to do the requested activity
    +
    +
    + Method ApplyBySetPos
    @@ -192,13 +192,6 @@
    Authorisation failed, so we send some headers to say so.
    -
    - Function - AuthFamjama -
    -
    -
    AuthFamjama() in auth-famjama.php
    -
    Page always.php @@ -208,13 +201,6 @@
    Page - auth-famjama.php -
    -
    -
    auth-famjama.php in auth-famjama.php
    -
    -
    - Page auth-functions.php
    @@ -627,6 +613,13 @@
    Variable + $delete_user_confirmation_required +
    +
    + +
    +
    + Variable $depth
    @@ -1316,6 +1309,14 @@
    Method + IsCalendar +
    +
    +
    CalDAVRequest::IsCalendar() in CalDAVRequest.php
    +
    Returns true if the URL referenced by this request points at a calendar collection.
    +
    +
    + Method IsCollection
    @@ -1797,6 +1798,14 @@
    Method + Render +
    +
    +
    DAViCalUser::Render() in DAViCalUser.php
    +
    Render the form / viewer as HTML to show the user
    +
    +
    + Method render
    @@ -1812,14 +1821,6 @@
    Method - Render -
    -
    -
    DAViCalUser::Render() in DAViCalUser.php
    -
    Render the form / viewer as HTML to show the user
    -
    -
    - Method RenderAsXML
    @@ -1851,14 +1852,6 @@
    Method - RenderImportIcs -
    -
    - -
    Render input file to import ics in calendar user
    -
    -
    - Method RenderPrivileges
    diff --git a/docs/api/elementindex_davical.html b/docs/api/elementindex_davical.html index 497984fc..81953adf 100644 --- a/docs/api/elementindex_davical.html +++ b/docs/api/elementindex_davical.html @@ -78,13 +78,6 @@
    apply_filter() in caldav-REPORT-calquery.php
    While we can construct our SQL to apply some filters in the query, other filters need to be checked against the retrieved record. This is for handling those ones.
    -
    - Function - AuthFamjama -
    -
    -
    AuthFamjama() in auth-famjama.php
    -
    Page always.php @@ -92,13 +85,6 @@
    always.php in always.php
    -
    - Page - auth-famjama.php -
    -
    -
    auth-famjama.php in auth-famjama.php
    -
    Function AuthExternalAWL @@ -599,12 +585,11 @@
    - Method - DAViCalUser + Variable + $delete_user_confirmation_required
    -
    DAViCalUser::DAViCalUser() in DAViCalUser.php
    -
    Constructor - nothing fancy as yet.
    +
    Class @@ -614,6 +599,14 @@
    DAViCalUser in DAViCalUser.php
    A class for viewing and maintaining DAViCal User records
    +
    + Method + DAViCalUser +
    +
    +
    DAViCalUser::DAViCalUser() in DAViCalUser.php
    +
    Constructor - nothing fancy as yet.
    +
    Page DAViCalUser.php @@ -969,6 +962,14 @@
    Method + IsCalendar +
    +
    +
    CalDAVRequest::IsCalendar() in CalDAVRequest.php
    +
    Returns true if the URL referenced by this request points at a calendar collection.
    +
    +
    + Method IsCollection
    @@ -1317,14 +1318,6 @@
    Method - RenderImportIcs -
    -
    - -
    Render input file to import ics in calendar user
    -
    -
    - Method RenderRelationshipsFrom
    diff --git a/docs/api/errors.html b/docs/api/errors.html index 0c667d8c..d7a9d6ed 100644 --- a/docs/api/errors.html +++ b/docs/api/errors.html @@ -9,7 +9,6 @@ Post-parsing
    -auth-famjama.php
    auth-functions.php
    caldav-GET.php
    caldav-LOCK.php
    @@ -51,16 +50,14 @@

    Post-parsing

    Warnings:


    -Warning - Class DAViCalUser parent User not found
    Warning - Class DAViCalSession parent Session not found
    +Warning - Class DAViCalUser parent User not found

    always.php

    Warnings:


    -Warning on line 43 - Page-level DocBlock precedes "require_once "AWLUtilities.php"", use another DocBlock to document the source element
    - -

    auth-famjama.php

    -

    Warnings:


    -Warning on line 52 - File "/home/andrew/projects/davical/inc/auth-famjama.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 53 - Page-level DocBlock precedes "require_once "AWLUtilities.php"", use another DocBlock to document the source element
    +

    Errors:


    +Error on line 53 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

    auth-functions.php

    Warnings:


    @@ -78,25 +75,28 @@

    caldav-LOCK.php

    Warnings:


    -Warning on line 136 - File "/home/andrew/projects/davical/inc/caldav-LOCK.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 136 - File "/home/karora/Desktop/Projects/davical/inc/caldav-LOCK.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    caldav-MKCALENDAR.php

    Warnings:


    Warning on line 30 - Page-level DocBlock precedes "require_once "XMLDocument.php"", use another DocBlock to document the source element

    Errors:


    -Error on line 30 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
    Error on line 30 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
    +Error on line 30 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

    caldav-POST.php

    Warnings:


    Warning on line 12 - Page-level DocBlock precedes "require_once "XMLDocument.php"", use another DocBlock to document the source element
    +

    Errors:


    +Error on line 12 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
    +Error on line 12 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

    caldav-PROPFIND.php

    Warnings:


    Warning on line 16 - Page-level DocBlock precedes "require_once 'iCalendar.php'", use another DocBlock to document the source element

    Errors:


    -Error on line 16 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
    Error on line 16 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage propfind"
    +Error on line 16 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

    caldav-PUT-functions.php

    Warnings:


    @@ -106,25 +106,26 @@

    Warnings:


    Warning on line 24 - Page-level DocBlock precedes "include_once 'caldav-PUT-functions.php'", use another DocBlock to document the source element

    Errors:


    -Error on line 24 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
    Error on line 24 - "include" include_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
    +Error on line 24 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

    caldav-REPORT-calquery.php

    Warnings:


    -Warning on line 32 - no @package tag was used in a DocBlock for file /home/andrew/projects/davical/inc/caldav-REPORT-calquery.php
    +Warning on line 32 - no @package tag was used in a DocBlock for file /home/karora/Desktop/Projects/davical/inc/caldav-REPORT-calquery.php
    Warning on line 32 - package davical is already in category Technical, will now replace with category Documentation

    caldav-REPORT-freebusy.php

    Warnings:


    -Warning on line 95 - File "/home/andrew/projects/davical/inc/caldav-REPORT-freebusy.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 95 - File "/home/karora/Desktop/Projects/davical/inc/caldav-REPORT-freebusy.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    caldav-REPORT-multiget.php

    Warnings:


    -Warning on line 11 - no @package tag was used in a DocBlock for file /home/andrew/projects/davical/inc/caldav-REPORT-multiget.php
    +Warning on line 11 - package davical is already in category Technical, will now replace with category Documentation
    +Warning on line 11 - no @package tag was used in a DocBlock for file /home/karora/Desktop/Projects/davical/inc/caldav-REPORT-multiget.php

    caldav-REPORT-principal.php

    Warnings:


    -Warning on line 33 - no @package tag was used in a DocBlock for file /home/andrew/projects/davical/inc/caldav-REPORT-principal.php
    +Warning on line 33 - no @package tag was used in a DocBlock for file /home/karora/Desktop/Projects/davical/inc/caldav-REPORT-principal.php

    caldav-REPORT.php

    Warnings:


    @@ -136,7 +137,7 @@

    caldav.php

    Warnings:


    Warning on line 10 - Page-level DocBlock precedes "require_once "../inc/always.php"", use another DocBlock to document the source element
    -Warning on line 39 - Unknown tag "@TODO:" used
    +Warning on line 35 - Unknown tag "@TODO:" used

    Errors:


    Error on line 10 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
    Error on line 10 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
    @@ -145,27 +146,27 @@

    Warnings:


    Warning on line 16 - Page-level DocBlock precedes "require_once "XMLElement.php"", use another DocBlock to document the source element

    Errors:


    -Error on line 16 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
    Error on line 16 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage Request"
    +Error on line 16 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

    check_UTF8.php

    Warnings:


    -Warning on line 227 - File "/home/andrew/projects/davical/inc/check_UTF8.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 227 - File "/home/karora/Desktop/Projects/davical/inc/check_UTF8.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    collection.php

    Warnings:


    -Warning on line 48 - File "/home/andrew/projects/davical/htdocs/collection.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 47 - File "/home/karora/Desktop/Projects/davical/htdocs/collection.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    DAViCalUser.php

    Warnings:


    -Warning on line 11 - Page-level DocBlock precedes "require "User.php"", use another DocBlock to document the source element
    +Warning on line 11 - Page-level DocBlock precedes "include 'User.php'", use another DocBlock to document the source element

    Errors:


    Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
    -Error on line 11 - "include" require's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage DAViCalUser"
    +Error on line 11 - "include" include's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage DAViCalUser"

    davical_configuration_missing.php

    Warnings:


    -Warning on line 30 - File "/home/andrew/projects/davical/inc/davical_configuration_missing.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 30 - File "/home/karora/Desktop/Projects/davical/inc/davical_configuration_missing.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    drivers_ldap.php

    Warnings:


    @@ -180,40 +181,40 @@ Warning on line 12 - Page-level DocBlock precedes "require_once "auth-functions.php"", use another DocBlock to document the source element
    Warning on line 15 - no @package tag was used in a DocBlock for class squidPamDrivers

    Errors:


    -Error on line 12 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
    Error on line 12 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage ldap"
    +Error on line 12 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

    freebusy-GET.php

    Warnings:


    -Warning on line 117 - File "/home/andrew/projects/davical/inc/freebusy-GET.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 117 - File "/home/karora/Desktop/Projects/davical/inc/freebusy-GET.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    freebusy.php

    Warnings:


    -Warning on line 50 - File "/home/andrew/projects/davical/htdocs/freebusy.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 50 - File "/home/karora/Desktop/Projects/davical/htdocs/freebusy.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    help.php

    Warnings:


    -Warning on line 19 - File "/home/andrew/projects/davical/htdocs/help.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 19 - File "/home/karora/Desktop/Projects/davical/htdocs/help.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    index.php

    Warnings:


    -Warning on line 68 - File "/home/andrew/projects/davical/htdocs/index.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 68 - File "/home/karora/Desktop/Projects/davical/htdocs/index.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    interactive-page.php

    Warnings:


    -Warning on line 20 - File "/home/andrew/projects/davical/inc/interactive-page.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 20 - File "/home/karora/Desktop/Projects/davical/inc/interactive-page.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    other_translated_strings.php

    Warnings:


    -Warning on line 44 - File "/home/andrew/projects/davical/inc/other_translated_strings.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 44 - File "/home/karora/Desktop/Projects/davical/inc/other_translated_strings.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    page-footer.php

    Warnings:


    -Warning on line 7 - File "/home/andrew/projects/davical/inc/page-footer.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 7 - File "/home/karora/Desktop/Projects/davical/inc/page-footer.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    page-header.php

    Warnings:


    -Warning on line 90 - File "/home/andrew/projects/davical/inc/page-header.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 90 - File "/home/karora/Desktop/Projects/davical/inc/page-header.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    PdoQuery.php

    Warnings:


    @@ -228,24 +229,23 @@

    relationship_types.php

    Warnings:


    -Warning on line 107 - File "/home/andrew/projects/davical/htdocs/relationship_types.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 107 - File "/home/karora/Desktop/Projects/davical/htdocs/relationship_types.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    roles.php

    Warnings:


    -Warning on line 39 - File "/home/andrew/projects/davical/htdocs/roles.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 39 - File "/home/karora/Desktop/Projects/davical/htdocs/roles.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    test-RRULE.php

    Warnings:


    Warning on line 10 - no @package tag was used in a DocBlock for class RRuleTest
    -Warning on line 94 - File "/home/andrew/projects/davical/inc/test-RRULE.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 94 - File "/home/karora/Desktop/Projects/davical/inc/test-RRULE.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    testpdo.php

    Warnings:


    -Warning on line 3 - File "/home/andrew/projects/davical/htdocs/testpdo.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 3 - File "/home/karora/Desktop/Projects/davical/htdocs/testpdo.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    tools.php

    Warnings:


    -Warning on line 11 - package davical is already in category Technical, will now replace with category Documentation
    Warning on line 11 - Page-level DocBlock precedes "require_once "../inc/always.php"", use another DocBlock to document the source element
    Warning on line 35 - no @package tag was used in a DocBlock for class Tools

    Errors:


    @@ -261,9 +261,9 @@

    usr.php

    Warnings:


    -Warning on line 93 - File "/home/andrew/projects/davical/htdocs/usr.php" has no page-level DocBlock, use @package in the first DocBlock to create one
    +Warning on line 67 - File "/home/karora/Desktop/Projects/davical/htdocs/usr.php" has no page-level DocBlock, use @package in the first DocBlock to create one

    - Documentation generated on Sat, 12 Sep 2009 00:12:01 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:12 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/docs/api/index.html b/docs/api/index.html index 15aae761..17608a15 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> - + DAViCal diff --git a/docs/api/li_davical.html b/docs/api/li_davical.html index 2ccb79db..c040e1a1 100644 --- a/docs/api/li_davical.html +++ b/docs/api/li_davical.html @@ -26,7 +26,6 @@
    ClassRRuleTest
     Functions
    Functionapply_filter
    -
    FunctionAuthFamjama
    FunctionBuildSqlFilter
    Functioncheck_string
    FunctionConstructURL
    @@ -41,7 +40,6 @@
    Functionutf8ToUnicode
     Files
    Filealways.php
    -
    Fileauth-famjama.php
    Filecaldav-LOCK.php
    Filecaldav-REPORT-calquery.php
    Filecaldav-REPORT-freebusy.php
    diff --git a/docs/api/todolist.html b/docs/api/todolist.html index 3267b2d4..281e8ee6 100644 --- a/docs/api/todolist.html +++ b/docs/api/todolist.html @@ -23,7 +23,7 @@
  • Make this a defined constant
  • - Documentation generated on Sat, 12 Sep 2009 00:12:01 +1200 by phpDocumentor 1.3.2 + Documentation generated on Tue, 06 Oct 2009 02:03:12 -0700 by phpDocumentor 1.3.2

    \ No newline at end of file diff --git a/htdocs/.htaccess b/htdocs/.htaccess new file mode 100644 index 00000000..a9bffef9 --- /dev/null +++ b/htdocs/.htaccess @@ -0,0 +1,33 @@ + +# SetHandler php-script + +# +# Order allow,deny +# Allow from all +# +# +# +# Order deny,allow +# Deny from all +# + +# RewriteEngine On + +# # Not if it's the root URL. You might want to comment this out if you +# # want to use an explicit /index.php for getting to the admin pages. +# RewriteCond %{REQUEST_URI} !^/$ +# RewriteCond %{REQUEST_URI} !^/davical/$ + +# # Not if it explicitly specifies a .php program, stylesheet or image +# RewriteCond %{REQUEST_URI} !\.(php|css|js|png|gif|jpg) + +# # Everything else gets rewritten to /caldav.php/... +# RewriteRule ^(.*)$ /caldav.php$1 [NC,L] + +# # php_value include_path /usr/share/awl/inc +# php_value magic_quotes_gpc 0 +# php_value register_globals 0 +# php_value open_basedir 1 +# php_value error_reporting "E_ALL & ~E_NOTICE" +# php_value default_charset "utf-8" + diff --git a/htdocs/freebusy.php b/htdocs/freebusy.php index b5232c30..8e1120b2 100644 --- a/htdocs/freebusy.php +++ b/htdocs/freebusy.php @@ -2,8 +2,14 @@ require_once("../inc/always.php"); dbg_error_log( "freebusy", " User agent: %s", ((isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "Unfortunately Mulberry and Chandler don't send a 'User-agent' header with their requests :-(")) ); dbg_log_array( "headers", '_SERVER', $_SERVER, true ); -require_once("HTTPAuthSession.php"); -$session = new HTTPAuthSession(); +if ( isset($c->public_freebusy_url) && $c->public_freebusy_url ) { + require_once("PublicSession.php"); + $session = new PublicSession(); +} +else { + require_once("HTTPAuthSession.php"); + $session = new HTTPAuthSession(); +} /** * Submission parameters recommended by calconnect, plus some generous alternatives diff --git a/inc/CalDAVPrincipal.php b/inc/CalDAVPrincipal.php index 50dd1000..7599b7ce 100644 --- a/inc/CalDAVPrincipal.php +++ b/inc/CalDAVPrincipal.php @@ -309,21 +309,6 @@ class CalDAVPrincipal } - /** - * Returns the array of privilege names converted into XMLElements - */ - function RenderPrivileges($privilege_names, $container='privilege') { - global $reply; - $privileges = array(); - foreach( $privilege_names AS $k => $v ) { - $privilege = new XMLElement($container); - $reply->NSElement($privilege,$k); - $privileges[] = $privilege; - } - return $privileges; - } - - /** * Render XML for a single Principal (user) from the DB * @@ -368,6 +353,13 @@ class CalDAVPrincipal $prop->NewElement('creationdate', $this->created ); break; + case 'DAV::getcontentlanguage': + /** Use the principal's locale by preference, otherwise system default */ + $locale = (isset($c->current_locale) ? $c->current_locale : ''); + if ( isset($this->locale) && $this->locale != '' ) $locale = $this->locale; + $prop->NewElement('getcontentlanguage', $locale ); + break; + case 'DAV::group-member-set': $prop->NewElement('group-member-set', $reply->href($this->group_member_set) ); break; @@ -400,72 +392,38 @@ class CalDAVPrincipal $reply->CalDAVElement($prop, 'calendar-user-address-set', $reply->href($this->user_address_set) ); break; -// case 'urn:ietf:params:xml:ns:caldav:supported-calendar-component-set': -// // Note that this won't appear on a PROPFIND against a Principal URL, since this routine is only called for a collection -// $components = array(); -// $set_of_components = array( 'VEVENT', 'VTODO', 'VJOURNAL', 'VTIMEZONE', 'VFREEBUSY' ); -// foreach( $set_of_components AS $v ) { -// $components[] = $reply->NewXMLElement( 'comp', '', array('name' => $v), 'urn:ietf:params:xml:ns:caldav'); -// } -// $reply->CalDAVElement($prop, 'supported-calendar-component-set', $components ); -// break; - - case 'DAV::getcontentlanguage': - $locale = (isset($c->current_locale) ? $c->current_locale : ''); - if ( isset($this->locale) && $this->locale != '' ) $locale = $this->locale; - $prop->NewElement('getcontentlanguage', $locale ); + case 'DAV::owner': + // After a careful reading of RFC3744 we see that this must be the principal-URL of the owner + $reply->DAVElement( $prop, 'owner', $reply->href( $this->principal_url ) ); break; - - case 'DAV::supportedlock': - $prop->NewElement('supportedlock', - new XMLElement( 'lockentry', - array( - new XMLElement('lockscope', new XMLElement('exclusive')), - new XMLElement('locktype', new XMLElement('write')), - ) - ) - ); + + case 'DAV::principal-collection-set': + $reply->DAVElement( $prop, 'principal-collection-set', $reply->href( ConstructURL('/') ) ); break; - - case 'DAV::acl': - /** - * @todo This information is semantically valid but presents an incorrect picture. - */ - $principal = new XMLElement('principal'); - $principal->NewElement('authenticated'); - $grant = new XMLElement( 'grant', array($this->RenderPrivileges($request->permissions)) ); - $prop->NewElement('acl', new XMLElement( 'ace', array( $principal, $grant ) ) ); - break; - - case 'DAV::current-user-privilege-set': - $prop->NewElement('current-user-privilege-set', $this->RenderPrivileges($request->permissions) ); - break; - - case 'DAV::supported-privilege-set': - $prop->NewElement('supported-privilege-set', $this->RenderPrivileges( $request->SupportedPrivileges(), 'supported-privilege') ); - break; - + // Empty tag responses. case 'DAV::alternate-URI-set': case 'DAV::getcontentlength': $prop->NewElement( $reply->Tag($tag)); break; -// case 'http://calendarserver.org/ns/:getctag': -// $reply->CalendarServerElement( $prop, 'getctag', '"'.md5($this->username . $this->updated).'"' ); -// break; -// case 'DAV::getetag': -// $reply->DAVElement( $prop, 'getetag', '"'.md5($this->username . $this->updated).'"' ); -// break; - case 'SOME-DENIED-PROPERTY': /** @todo indicating the style for future expansion */ $denied[] = $reply->Tag($tag); break; - default: - dbg_error_log( 'principal', 'Request for unsupported property "%s" of principal "%s".', $tag, $this->username ); + case 'http://calendarserver.org/ns/:getctag': + case 'DAV::getetag': + case 'urn:ietf:params:xml:ns:caldav:supported-calendar-component-set': + // These will 404 on a Principal, since they don't apply $not_found[] = $reply->Tag($tag); break; + + default: + if ( ! $request->ServerProperty( $tag, $prop, $reply ) ) { + dbg_error_log( 'principal', 'Request for unsupported property "%s" of principal "%s".', $tag, $this->username ); + $not_found[] = $reply->Tag($tag); + } + break; } } diff --git a/inc/CalDAVRequest.php b/inc/CalDAVRequest.php index 123432a0..36ade877 100644 --- a/inc/CalDAVRequest.php +++ b/inc/CalDAVRequest.php @@ -77,12 +77,33 @@ class CalDAVRequest */ var $collection_type; + /** + * A static structure of supported privileges. + */ + var $supported_privileges; + /** * Create a new CalDAVRequest object. */ function CalDAVRequest( $options = array() ) { global $session, $c, $debugging; + $this->supported_privileges = array( + 'all' => array( + 'read' => 'Read the content of a resource or collection', + 'write' => array( + 'bind' => 'Create a resource or collection', + 'unbind' => 'Delete a resource or collection', + 'write-content' => 'Write content', + 'write-properties' => 'Write properties' + ), + 'urn:ietf:params:xml:ns:caldav:read-free-busy' => 'Read the free/busy information for a calendar collection', + 'read-acl' => 'Read ACLs for a resource or collection', + 'write-acl' => 'Write ACLs for a resource or collection', + 'unlock' => 'Remove a lock' + ) + ); + $this->options = $options; if ( !isset($this->options['allow_by_email']) ) $this->options['allow_by_email'] = false; $this->principal = (object) array( 'username' => $session->username, 'user_no' => $session->user_no ); @@ -350,6 +371,81 @@ EOSQL; */ $this->setPermissions(); + $this->supported_methods = array( + 'OPTIONS' => '', + 'PROPFIND' => '', + 'REPORT' => '', + 'DELETE' => '', + 'LOCK' => '', + 'UNLOCK' => '' + ); + if ( $this->IsCollection() ) { + $this->supported_methods = array_merge( + $this->supported_methods, + array( + 'MKCOL' => '', + 'GET' => '', + 'HEAD' => '', + 'PUT' => '' + ) + ); + if ( $this->IsPrincipal() ) { + $this->supported_methods = array_merge( + $this->supported_methods, + array( + 'MKCALENDAR' => '' + ) + ); + } + switch ( $this->collection_type ) { + case 'root': + case 'email': + // We just override the list completely here. + $this->supported_methods = array( + 'OPTIONS' => '', + 'GET' => '', + 'HEAD' => '', + 'PROPFIND' => '', + 'REPORT' => '' + ); + break; + case 'schedule-inbox': + case 'schedule-outbox': + $this->supported_methods = array_merge( + $this->supported_methods, + array( + 'POST' => '' + ) + ); + break; + } + } + else { + $this->supported_methods = array_merge( + $this->supported_methods, + array( + 'GET' => '', + 'HEAD' => '', + 'PUT' => '' + ) + ); + } + + $this->supported_reports = array( + 'DAV::principal-property-search' => '' + ); + if ( $this->IsCalendar() ) { + $this->supported_reports = array_merge( + $this->supported_reports, + array( + 'urn:ietf:params:xml:ns:caldav:calendar-query' => '', + 'urn:ietf:params:xml:ns:caldav:calendar-multiget' => '', + 'urn:ietf:params:xml:ns:caldav:free-busy-query' => '' + ) + ); + } + + /** * If the content we are receiving is XML then we parse it here. RFC2518 says we * should reasonably expect to see either text/xml or application/xml @@ -426,7 +522,7 @@ EOSQL; * */ function setPermissions() { - global $session; + global $c, $session; if ( $this->path == '/' || $this->path == '' ) { $this->permissions = array("read" => 'read' ); @@ -435,25 +531,31 @@ EOSQL; } if ( $session->AllowedTo("Admin") || $session->user_no == $this->user_no ) { - $this->permissions = array('all' => 'all' ); - $this->permissions['urn:ietf:params:xml:ns:caldav:read-free-busy'] = 'urn:ietf:params:xml:ns:caldav:read-free-busy'; - $this->permissions['read'] = 'read'; - $this->permissions['write'] = 'write'; - $this->permissions['bind'] = 'bind'; // PUT of new content (i.e. Create) - $this->permissions['unbind'] = 'unbind'; // DELETE - $this->permissions['write-content'] = 'write-content'; // PUT Modify - $this->permissions['write-properties'] = 'write-properties'; // PROPPATCH - $this->permissions['lock'] = 'lock'; - $this->permissions['unlock'] = 'unlock'; - $this->permissions['read-acl'] = 'read-acl'; - $this->permissions['read-current-user-privilege-set'] = 'read-current-user-privilege-set'; + $this->permissions = array('all' => 'abstract' ); + $this->permissions['urn:ietf:params:xml:ns:caldav:read-free-busy'] = 'real'; + $this->permissions['read'] = 'real'; + $this->permissions['write'] = 'aggregate'; + $this->permissions['bind'] = 'real'; // PUT of new content (i.e. Create) + $this->permissions['unbind'] = 'real'; // DELETE + $this->permissions['write-content'] = 'real'; // PUT Modify + $this->permissions['write-properties'] = 'real'; // PROPPATCH + $this->permissions['lock'] = 'real'; + $this->permissions['unlock'] = 'real'; + $this->permissions['read-acl'] = 'real'; + $this->permissions['read-current-user-privilege-set'] = 'real'; dbg_error_log( "caldav", "Full permissions for %s", ( $session->user_no == $this->user_no ? "user accessing their own hierarchy" : "a systems administrator") ); return; } $this->permissions = array(); - if ( $this->IsPublic() ) $this->permissions['read'] = 'read'; + if ( $this->IsPublic() ) { + $this->permissions['read'] = 'real'; + $this->permissions['urn:ietf:params:xml:ns:caldav:read-free-busy'] = 'real'; + } + else if ( isset($c->public_freebusy_url) && $c->public_freebusy_url ) { + $this->permissions['urn:ietf:params:xml:ns:caldav:read-free-busy'] = 'real'; + } /** * In other cases we need to query the database for permissions @@ -462,35 +564,35 @@ EOSQL; if ( $qry->Exec("caldav") && $permission_result = $qry->Fetch() ) { $permission_result = "!".$permission_result->perm; // We prepend something to ensure we get a non-zero position. if ( strpos($permission_result,"A") ) { - $this->permissions['all'] = 'all'; - $this->permissions['urn:ietf:params:xml:ns:caldav:read-free-busy'] = 'urn:ietf:params:xml:ns:caldav:read-free-busy'; - $this->permissions['read'] = 'read'; - $this->permissions['write'] = 'write'; - $this->permissions['bind'] = 'bind'; // PUT of new content (i.e. Create) - $this->permissions['unbind'] = 'unbind'; // DELETE - $this->permissions['write-content'] = 'write-content'; // PUT Modify - $this->permissions['write-properties'] = 'write-properties'; // PROPPATCH - $this->permissions['lock'] = 'lock'; - $this->permissions['unlock'] = 'unlock'; - $this->permissions['read-acl'] = 'read-acl'; - $this->permissions['read-current-user-privilege-set'] = 'read-current-user-privilege-set'; + $this->permissions['all'] = 'abstract'; + $this->permissions['urn:ietf:params:xml:ns:caldav:read-free-busy'] = 'real'; + $this->permissions['read'] = 'real'; + $this->permissions['write'] = 'aggregate'; + $this->permissions['bind'] = 'real'; // PUT of new content (i.e. Create) + $this->permissions['unbind'] = 'real'; // DELETE + $this->permissions['write-content'] = 'real'; // PUT Modify + $this->permissions['write-properties'] = 'real'; // PROPPATCH + $this->permissions['lock'] = 'real'; + $this->permissions['unlock'] = 'real'; + $this->permissions['read-acl'] = 'real'; + $this->permissions['read-current-user-privilege-set'] = 'real'; } else { - if ( strpos($permission_result,"F") ) $this->permissions['urn:ietf:params:xml:ns:caldav:read-free-busy'] = 'urn:ietf:params:xml:ns:caldav:read-free-busy'; - if ( strpos($permission_result,"R") ) $this->permissions['read'] = 'read'; + if ( strpos($permission_result,"F") ) $this->permissions['urn:ietf:params:xml:ns:caldav:read-free-busy'] = 'real'; + if ( strpos($permission_result,"R") ) $this->permissions['read'] = 'real'; if ( strpos($permission_result,"W") ) { - $this->permissions['write'] = 'write'; - $this->permissions['bind'] = 'bind'; // PUT of new content (i.e. Create) - $this->permissions['unbind'] = 'unbind'; // DELETE - $this->permissions['write-content'] = 'write-content'; // PUT Modify - $this->permissions['write-properties'] = 'write-properties'; // PROPPATCH - $this->permissions['lock'] = 'lock'; - $this->permissions['unlock'] = 'unlock'; + $this->permissions['write'] = 'aggregate'; + $this->permissions['bind'] = 'real'; // PUT of new content (i.e. Create) + $this->permissions['unbind'] = 'real'; // DELETE + $this->permissions['write-content'] = 'real'; // PUT Modify + $this->permissions['write-properties'] = 'real'; // PROPPATCH + $this->permissions['lock'] = 'real'; + $this->permissions['unlock'] = 'real'; } else { - if ( strpos($permission_result,"C") ) $this->permissions['bind'] = 'bind'; // PUT of new content (i.e. Create) - if ( strpos($permission_result,"D") ) $this->permissions['unbind'] = 'unbind'; // DELETE - if ( strpos($permission_result,"M") ) $this->permissions['write-content'] = 'write-content'; // PUT Modify + if ( strpos($permission_result,"C") ) $this->permissions['bind'] = 'real'; // PUT of new content (i.e. Create) + if ( strpos($permission_result,"D") ) $this->permissions['unbind'] = 'real'; // DELETE + if ( strpos($permission_result,"M") ) $this->permissions['write-content'] = 'real'; // PUT Modify } } dbg_error_log( "caldav", "Restricted permissions for user accessing someone elses hierarchy: %s", implode( ", ", $this->permissions ) ); @@ -682,6 +784,15 @@ EOSQL; } + /** + * Returns true if the URL referenced by this request points at a calendar collection. + */ + function IsCalendar( ) { + if ( !$this->IsCollection() ) return false; + return $this->collection->is_calendar; + } + + /** * Returns true if the URL referenced by this request points at a principal. */ @@ -712,6 +823,141 @@ EOSQL; } + /** + * Returns the ID of the collection of, or containing this request + */ + function CollectionId( ) { + return $this->collection_id; + } + + + /** + * Returns the array of supported privileges converted into XMLElements + */ + function RenderSupportedPrivileges( $privs = null ) { + global $reply; + $privileges = array(); + if ( $privs === null ) $privs = $this->supported_privileges; + foreach( $privs AS $k => $v ) { + dbg_error_log( 'caldav', 'Adding privilege "%s" which is "%s".', $k, $v ); + $privilege = new XMLElement('privilege'); + $reply->NSElement($privilege,$k); + $privset = array($privilege); + if ( is_array($v) ) { + dbg_error_log( 'caldav', '"%s" is a container of sub-privileges.', $k ); + $privset = array_merge($privset, $this->RenderSupportedPrivileges($v)); + } + else if ( $v == 'abstract' ) { + dbg_error_log( 'caldav', '"%s" is an abstract privilege.', $v ); + $privset[] = new XMLElement('abstract'); + } + else if ( strlen($v) > 1 ) { + $privset[] = new XMLElement('description', $v); + } + $privileges[] = new XMLElement('supported-privilege',$privset); + } + return $privileges; + } + + + /** + * Returns the array of privilege names converted into XMLElements + */ + function RenderPrivileges($privilege_names) { + global $reply; + $privileges = array(); + foreach( $privilege_names AS $k => $v ) { + dbg_error_log( 'caldav', 'Adding privilege "%s" which is "%s".', $k, $v ); + $privilege = new XMLElement('privilege'); + $reply->NSElement($privilege,$k); + $privileges[] = $privilege; + } + return $privileges; + } + + + /** + * Returns the array of supported methods converted into XMLElements + */ + function RenderSupportedMethods( ) { + global $reply; + $methods = array(); + foreach( $this->supported_methods AS $k => $v ) { + dbg_error_log( 'caldav', 'Adding method "%s" which is "%s".', $k, $v ); + $method = new XMLElement('method'); + $reply->NSElement($method,$k); + $methods[] = new XMLElement('supported-method',$method); + } + return $methods; + } + + + /** + * Return general server-related properties for this URL + */ + function ServerProperty( $tag, $prop, $reply = null ) { + global $c, $session; + + if ( $reply === null ) $reply = $GLOBALS['reply']; + + dbg_error_log( 'caldav', 'Processing "%s" on "%s".', $tag, $this->path ); + + switch( $tag ) { + case 'DAV::current-user-principal': + $reply->DAVElement( $prop, 'current-user-principal', $this->current_user_principal_xml); + break; + + case 'DAV::getcontentlanguage': + $locale = (isset($c->current_locale) ? $c->current_locale : ''); + if ( isset($session->locale) && $session->locale != '' ) $locale = $session->locale; + $prop->NewElement('getcontentlanguage', $locale ); + break; + + case 'DAV::supportedlock': + $prop->NewElement('supportedlock', + new XMLElement( 'lockentry', + array( + new XMLElement('lockscope', new XMLElement('exclusive')), + new XMLElement('locktype', new XMLElement('write')), + ) + ) + ); + break; + + case 'DAV::acl': + /** + * @todo This information is semantically valid but presents an incorrect picture. + */ + $principal = new XMLElement('principal'); + $principal->NewElement('authenticated'); + $grant = new XMLElement( 'grant', array($this->RenderPrivileges($this->permissions)) ); + $prop->NewElement('acl', new XMLElement( 'ace', array( $principal, $grant ) ) ); + break; + + case 'DAV::current-user-privilege-set': + $prop->NewElement('current-user-privilege-set', $this->RenderPrivileges($this->permissions) ); + break; + + case 'DAV::supported-privilege-set': + $prop->NewElement('supported-privilege-set', $this->RenderSupportedPrivileges() ); + break; + + case 'DAV::supported-method-set': + $prop->NewElement('supported-method-set', $this->RenderSupportedMethods() ); + break; + + case 'DAV::supported-report-set': + $prop->NewElement('supported-report-set', $this->RenderSupportedReports() ); + break; + + default: + dbg_error_log( 'caldav', 'Request for unsupported property "%s" of path "%s".', $tag, $this->path ); + return false; + } + return true; + } + + /** * Are we allowed to do the requested activity * @@ -726,6 +972,11 @@ EOSQL; * @param string $activity The activity we want to do. */ function AllowedTo( $activity ) { + global $session; + dbg_error_log('session', 'Checking whether "%s" is allowed to "%s"', $session->username, $activity); + foreach( $this->permissions AS $k => $v ) { + dbg_error_log('session', 'Permissions "%s" is "%s"', $k, $v); + } if ( isset($this->permissions['all']) ) return true; switch( $activity ) { case "CALDAV:schedule-send-freebusy": @@ -857,8 +1108,11 @@ EOSQL; * @return array The supported privileges. */ function SupportedPrivileges() { - $privs = array( "all"=>1, "read"=>1, "write"=>1, "bind"=>1, "unbind"=>1, "write-content"=>1, - "write-properties"=>1, 'urn:ietf:params:xml:ns:caldav:read-free-busy' => 1); + $privs = array( 'all'=>'abstract', 'read'=>'real', + 'write'=>'real', 'bind'=>'real', + 'unbind'=>'real', 'write-content'=>'real', + 'write-properties'=>'real', + 'urn:ietf:params:xml:ns:caldav:read-free-busy' => 'real'); return $privs; } } diff --git a/inc/DAVResource.php b/inc/DAVResource.php new file mode 100644 index 00000000..faf64bf1 --- /dev/null +++ b/inc/DAVResource.php @@ -0,0 +1,287 @@ + +* @copyright Morphoss Ltd +* @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later +*/ + +/** +* A class for things to do with a DAV Resource +* +* @package davical +*/ +class DAVResource +{ + /** + * @var The URL of the resource + */ + protected $href; + + /** + * @var The principal URL of the owner of the resource + */ + protected $principal_url; + + /** + * @var The unique etag associated with the current version of the resource + */ + protected $unique_tag; + + /** + * @var The actual resource content + */ + protected $content; + + /** + * @var The type of the resource, possibly multiple + */ + protected $resourcetype; + + /** + * @var The type of the content + */ + protected $contenttype; + + /** + * @var True if this resource is a collection + */ + private $_is_collection; + + /** + * @var True if this resource is a principal-URL + */ + private $_is_principal; + + /** + * Constructor + * @param mixed $parameters If null, an empty Resourced is created. + * If it is an object then it is expected to be a record that was + * read elsewhere. + */ + function __construct( $parameters = null ) { + $this->_is_principal = false; + $this->_is_collection = false; + if ( isset($parameters) && is_object($parameters) ) { + $this->FromRow($parameters); + } + else if ( isset($parameters) && is_array($parameters) ) { + } + } + + + /** + * Initialise from a database row + * @param object $row The row from the DB. + */ + function FromRow($row) { + global $c; + + foreach( $row AS $k => $v ) { + dbg_error_log( 'resource', 'Processing resource property "%s" has "%s".', $row->dav_name, $k ); + switch ( $k ) { + case 'dav_etag': + $this->unique_tag = '"'.$v.'"'; + break; + + default: + $this->{$k} = $v; + } + } + } + + + /** + * Return general server-related properties for this URL + */ + function ResourceProperty( $tag, $prop, $reply = null ) { + global $c, $session; + + if ( $reply === null ) $reply = $GLOBALS['reply']; + + dbg_error_log( 'resource', 'Processing "%s" on "%s".', $tag, $this->dav_name ); + + switch( $tag ) { + case 'DAV::href': + $prop->NewElement('href', ConstructURL($this->dav_name) ); + break; + + case 'DAV::getcontenttype': + $prop->NewElement('getcontenttype', $this->contenttype ); + break; + + case 'DAV::resourcetype': + $prop->NewElement('resourcetype', $this->resourcetype ); + break; + + case 'DAV::displayname': + $prop->NewElement('displayname', $this->displayname ); + break; + +// case 'DAV::getlastmodified': +// $prop->NewElement('getlastmodified', $this->modified ); +// break; + +// case 'DAV::creationdate': +// $prop->NewElement('creationdate', $this->created ); +// break; + + case 'DAV::getcontentlanguage': + $locale = (isset($c->current_locale) ? $c->current_locale : ''); + if ( isset($this->locale) && $this->locale != '' ) $locale = $this->locale; + $prop->NewElement('getcontentlanguage', $locale ); + break; + +// case 'DAV::owner': +// // After a careful reading of RFC3744 we see that this must be the principal-URL of the owner +// $reply->DAVElement( $prop, 'owner', $reply->href( $this->principal_url) ) ); +// break; + + // Empty tag responses. + case 'DAV::alternate-URI-set': + case 'DAV::getcontentlength': + $prop->NewElement( $reply->Tag($tag)); + break; + + case 'DAV::getetag': + if ( $this->_is_collection ) { + $not_found[] = $reply->Tag($tag); + } + else { + $prop->NewElement('getetag', $this->unique_tag ); + } + break; + + case 'SOME-DENIED-PROPERTY': /** @todo indicating the style for future expansion */ + $denied[] = $reply->Tag($tag); + break; + + case 'http://calendarserver.org/ns/:getctag': + if ( $this->_is_collection ) { + $prop->NewElement('http://calendarserver.org/ns/:getctag', $this->etag ); + } + else { + $not_found[] = $reply->Tag($tag); + } + break; + + case 'urn:ietf:params:xml:ns:caldav:calendar-data': + if ( isset($this->caldav_data) ) { + } + break; + + default: + dbg_error_log( 'resource', 'Request for unsupported property "%s" of path "%s".', $tag, $this->href ); + return false; + } + return true; + } + + + /** + * Construct XML propstat fragment for this resource + * + * @param array $properties The requested properties for this resource + * + * @return string An XML fragment with the requested properties for this resource + */ + function GetPropStat( $properties ) { + global $session, $c, $request, $reply; + + dbg_error_log('resource',': GetPropStat: href "%s"', $this->dav_name ); + + $prop = new XMLElement('prop'); + $denied = array(); + $not_found = array(); + foreach( $properties AS $k => $tag ) { + dbg_error_log( 'resource', 'Looking at resource "%s" for property [%s]"%s".', $this->href, $k, $tag ); + if ( ! $this->ResourceProperty($tag, $prop, $reply) ) { + dbg_error_log( 'resource', 'Request for unsupported property "%s" of resource "%s".', $tag, $this->href ); + $not_found[] = $reply->Tag($tag); + } + } + $status = new XMLElement('status', 'HTTP/1.1 200 OK' ); + + $elements = array( new XMLElement( 'propstat', array($prop,$status) ) ); + + if ( count($denied) > 0 ) { + $status = new XMLElement('status', 'HTTP/1.1 403 Forbidden' ); + $noprop = new XMLElement('prop'); + foreach( $denied AS $k => $v ) { + $noprop->NewElement( $v ); + } + $elements[] = new XMLElement( 'propstat', array( $noprop, $status) ); + } + + if ( count($not_found) > 0 ) { + $status = new XMLElement('status', 'HTTP/1.1 404 Not Found' ); + $noprop = new XMLElement('prop'); + foreach( $not_found AS $k => $v ) { + $noprop->NewElement( $v ); + } + $elements[] = new XMLElement( 'propstat', array( $noprop, $status) ); + } + return $elements; + } + + + /** + * Render XML for this resource + * + * @param array $properties The requested properties for this principal + * @param reference $reply A reference to the XMLDocument being used for the reply + * @param boolean $props_only Default false. If true will only return the fragment with the properties, not a full response fragment. + * + * @return string An XML fragment with the requested properties for this principal + */ + function RenderAsXML( $properties, &$reply, $props_only = false ) { + global $session, $c, $request; + + dbg_error_log('principal',': RenderAsXML: Principal "%s"', $this->username ); + + $prop = new XMLElement('prop'); + $denied = array(); + $not_found = array(); + foreach( $properties AS $k => $tag ) { + if ( ! $this->ResourceProperty($tag, $prop, $reply) ) { + dbg_error_log( 'principal', 'Request for unsupported property "%s" of principal "%s".', $tag, $this->username ); + $not_found[] = $reply->Tag($tag); + } + } + + if ( $props_only ) return $prop; + + $status = new XMLElement('status', 'HTTP/1.1 200 OK' ); + + $propstat = new XMLElement( 'propstat', array( $prop, $status) ); + $href = $reply->href($this->url ); + + $elements = array($href,$propstat); + + if ( count($denied) > 0 ) { + $status = new XMLElement('status', 'HTTP/1.1 403 Forbidden' ); + $noprop = new XMLElement('prop'); + foreach( $denied AS $k => $v ) { + $noprop->NewElement( $v ); + } + $elements[] = new XMLElement( 'propstat', array( $noprop, $status) ); + } + + if ( count($not_found) > 0 ) { + $status = new XMLElement('status', 'HTTP/1.1 404 Not Found' ); + $noprop = new XMLElement('prop'); + foreach( $not_found AS $k => $v ) { + $noprop->NewElement( $v ); + } + $elements[] = new XMLElement( 'propstat', array( $noprop, $status) ); + } + + $response = new XMLElement( 'response', $elements ); + + return $response; + } + +} diff --git a/inc/DAViCalUser.php b/inc/DAViCalUser.php index 1341c0b0..880525d8 100644 --- a/inc/DAViCalUser.php +++ b/inc/DAViCalUser.php @@ -431,7 +431,7 @@ EOSQL; } if ( isset($_POST['relate_to']) && $_POST['relate_to'] != '' && isset($_POST['relate_as']) && $_POST['relate_as'] != '' && isset($_POST['submit']) && $_POST['submit'] == htmlspecialchars(translate('Add Relationship')) ) { dbg_error_log('User',':Write: Adding relationship as %d to %d', $_POST['relate_as'], isset($_POST['relate_to'] ) ); - $qry = new PgQuery('INSERT INTO relationship (from_user, to_user, rt_id ) VALUES( ?, $this->user_no, ? )', $_POST['relate_to'], $_POST['relate_as'] ); + $qry = new PgQuery('INSERT INTO relationship (from_user, to_user, rt_id ) VALUES( ?, ?, ? )', $_POST['relate_to'], $this->user_no, $_POST['relate_as'] ); if ( $qry->Exec() ) { $c->messages[] = i18n('Relationship added.'); } diff --git a/inc/HTTPAuthSession.php b/inc/HTTPAuthSession.php index 0d952df1..963b54a2 100644 --- a/inc/HTTPAuthSession.php +++ b/inc/HTTPAuthSession.php @@ -221,7 +221,15 @@ class HTTPAuthSession { * It can expect that: * - Configuration data will be in $c->authenticate_hook['config'], which might be an array, or whatever is needed. */ - return call_user_func( $c->authenticate_hook['call'], $username, $password ); + $hook_response = call_user_func( $c->authenticate_hook['call'], $username, $password ); + /** + * make the authentication hook optional: if the flag is set, ignore a return value of 'false' + */ + if (isset($c->authenticate_hook['optional']) && $c->authenticate_hook['optional']) { + if ($hook_response !== false) { return $hook_response; } + } else { + return $hook_response; + } } if ( $usr = getUserByName($username) ) { diff --git a/inc/PublicSession.php b/inc/PublicSession.php index 357e1e6b..1c700a6d 100644 --- a/inc/PublicSession.php +++ b/inc/PublicSession.php @@ -69,7 +69,8 @@ class PublicSession { * @return boolean Whether or not the user has the specified role. */ function AllowedTo ( $whatever ) { - return ( $this->logged_in && isset($this->roles[$whatever]) && $this->roles[$whatever] ); + dbg_error_log('session', 'Checking whether "Public" is allowed to "%s"', $whatever); + return ( isset($this->roles[$whatever]) && $this->roles[$whatever] ); } } diff --git a/inc/always.php b/inc/always.php index 25cdfb8f..6d664edf 100644 --- a/inc/always.php +++ b/inc/always.php @@ -116,7 +116,7 @@ awl_set_locale($c->default_locale); * */ $c->code_version = 0; -$c->version_string = '0.9.7.3'; // The actual version # is replaced into that during the build /release process +$c->version_string = '0.9.7.4'; // The actual version # is replaced into that during the build /release process if ( isset($c->version_string) && preg_match( '/(\d+)\.(\d+)\.(\d+)(.*)/', $c->version_string, $matches) ) { $c->code_major = $matches[1]; $c->code_minor = $matches[2]; diff --git a/inc/always.php.in b/inc/always.php.in index 6fae66ea..3b88c07a 100644 --- a/inc/always.php.in +++ b/inc/always.php.in @@ -15,7 +15,7 @@ unset($session); unset($request); unset($dbconn); // Default some of the configurable values $c->sysabbr = 'davical'; $c->admin_email = 'admin@davical.example.com'; -$c->system_name = "DAViCal CalDAV Server"; +$c->system_name = 'DAViCal CalDAV Server'; $c->domain_name = (isset($_SERVER['SERVER_NAME'])?$_SERVER['SERVER_NAME']:$_SERVER['SERVER_ADDR']); $c->save_time_zone_defs = true; $c->collections_always_exist = false; @@ -25,12 +25,12 @@ $c->enable_row_linking = true; $c->http_auth_mode = 'Basic'; // $c->default_locale = array('es_MX', 'es_AR', 'es', 'pt'); // An array of locales to try, or just a single locale // $c->local_tzid = 'Pacific/Auckland'; // Perhaps we should read from /etc/timezone - I wonder how standard that is? -$c->default_locale = "en"; -$c->base_url = preg_replace("#/[^/]+\.php.*$#", "", $_SERVER['SCRIPT_NAME']); -$c->base_directory = preg_replace("#/[^/]*$#", "", $_SERVER['DOCUMENT_ROOT']); +$c->default_locale = 'en'; +$c->base_url = preg_replace('#/[^/]+\.php.*$#', '', $_SERVER['SCRIPT_NAME']); +$c->base_directory = preg_replace('#/[^/]*$#', '', $_SERVER['DOCUMENT_ROOT']); -$c->stylesheets = array( $c->base_url."/davical.css" ); -$c->images = $c->base_url . "/images"; +$c->stylesheets = array( $c->base_url.'/davical.css' ); +$c->images = $c->base_url . '/images'; // Add a default for newly created users $c->template_usr = array( 'active' => true, @@ -51,17 +51,17 @@ $c->total_query_time = 0; $c->dbg = array(); // Utilities -require_once("AWLUtilities.php"); +require_once('AWLUtilities.php'); /** We actually discovered this and worked around it earlier, but we can't log it until the utilties are loaded */ if ( !isset($_SERVER['SERVER_NAME']) ) { - @dbg_error_log( "WARN", "Your webserver is not setting the SERVER_NAME parameter. You may need to set \$c->domain_name in your configuration. Using IP address meanhwhile..." ); + @dbg_error_log( 'WARN', "Your webserver is not setting the SERVER_NAME parameter. You may need to set \$c->domain_name in your configuration. Using IP address meanhwhile..." ); } /** * Calculate the simplest form of reference to this page, excluding the PATH_INFO following the script name. */ -$c->protocol_server_port_script = sprintf( "%s://%s%s%s", +$c->protocol_server_port_script = sprintf( '%s://%s%s%s', (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'? 'https' : 'http'), $_SERVER['SERVER_NAME'], ( @@ -79,21 +79,21 @@ init_gettext( 'davical', '../locale' ); * access which could break DAViCal completely by causing output to start * too early. */ -if ( @file_exists("/etc/davical/".$_SERVER['SERVER_NAME']."-conf.php") ) { - include_once("/etc/davical/".$_SERVER['SERVER_NAME']."-conf.php"); +if ( @file_exists('/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php') ) { + include_once('/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php'); } -else if ( @file_exists("/etc/davical/config.php") ) { - include_once("/etc/davical/config.php"); +else if ( @file_exists('/etc/davical/config.php') ) { + include_once('/etc/davical/config.php'); } -else if ( @file_exists("../config/config.php") ) { - include_once("../config/config.php"); +else if ( @file_exists('../config/config.php') ) { + include_once('../config/config.php'); } else { - include_once("davical_configuration_missing.php"); + include_once('davical_configuration_missing.php'); exit; } if ( isset($c->deny_put_collection) ) { - @dbg_error_log( "WARN", "Deprecated 'deny_put_collection' configuration item renamed to 'readonly_webdav_collections'" ); + @dbg_error_log( 'WARN', 'Deprecated "deny_put_collection" configuration item renamed to "readonly_webdav_collections"' ); $c->readonly_webdav_collections = $c->deny_put_collection; } @@ -101,7 +101,7 @@ if ( !isset($c->page_title) ) $c->page_title = $c->system_name; if ( count($c->dbg) > 0 ) { // Only log this if debugging of some sort is turned on, somewhere - @dbg_error_log( "LOG", "==========> method =%s= =%s= =%s= =%s= =%s=", + @dbg_error_log( 'LOG', '==========> method =%s= =%s= =%s= =%s= =%s=', $_SERVER['REQUEST_METHOD'], $c->protocol_server_port_script, $_SERVER['PATH_INFO'], $c->base_url, $c->base_directory ); } @@ -121,9 +121,9 @@ if ( isset($c->version_string) && preg_match( '/(\d+)\.(\d+)\.(\d+)(.*)/', $c->v $c->code_major = $matches[1]; $c->code_minor = $matches[2]; $c->code_patch = $matches[3]; - $c->code_version = (($c->code_major * 1000) + $c->code_minor).".".$c->code_patch; - dbg_error_log("caldav", "Version (%d.%d.%d) == %s", $c->code_major, $c->code_minor, $c->code_patch, $c->code_version); - header( sprintf("Server: %d.%d", $c->code_major, $c->code_minor) ); + $c->code_version = (($c->code_major * 1000) + $c->code_minor).'.'.$c->code_patch; + dbg_error_log('caldav', 'Version (%d.%d.%d) == %s', $c->code_major, $c->code_minor, $c->code_patch, $c->code_version); + header( sprintf('Server: %d.%d', $c->code_major, $c->code_minor) ); } /** @@ -131,12 +131,12 @@ if ( isset($c->version_string) && preg_match( '/(\d+)\.(\d+)\.(\d+)(.*)/', $c->v */ $_SERVER['SERVER_NAME'] = $c->domain_name; -include_once("PgQuery.php"); +include_once('PgQuery.php'); $c->schema_version = 0; -$qry = new PgQuery( "SELECT schema_major, schema_minor, schema_patch FROM awl_db_revision ORDER BY schema_id DESC LIMIT 1;" ); -if ( $qry->Exec("always") && $row = $qry->Fetch() ) { - $c->schema_version = doubleval( sprintf( "%d%03d.%03d", $row->schema_major, $row->schema_minor, $row->schema_patch) ); +$qry = new PgQuery( 'SELECT schema_major, schema_minor, schema_patch FROM awl_db_revision ORDER BY schema_id DESC LIMIT 1;' ); +if ( $qry->Exec('always') && $row = $qry->Fetch() ) { + $c->schema_version = doubleval( sprintf( '%d%03d.%03d', $row->schema_major, $row->schema_minor, $row->schema_patch) ); $c->schema_major = $row->schema_major; $c->schema_minor = $row->schema_minor; $c->schema_patch = $row->schema_patch; @@ -194,51 +194,51 @@ function getUserByID( $user_no, $use_cache = true ) { */ function getStatusMessage($status) { switch( $status ) { - case 100: $ans = "Continue"; break; - case 101: $ans = "Switching Protocols"; break; - case 200: $ans = "OK"; break; - case 201: $ans = "Created"; break; - case 202: $ans = "Accepted"; break; - case 203: $ans = "Non-Authoritative Information"; break; - case 204: $ans = "No Content"; break; - case 205: $ans = "Reset Content"; break; - case 206: $ans = "Partial Content"; break; - case 207: $ans = "Multi-Status"; break; - case 300: $ans = "Multiple Choices"; break; - case 301: $ans = "Moved Permanently"; break; - case 302: $ans = "Found"; break; - case 303: $ans = "See Other"; break; - case 304: $ans = "Not Modified"; break; - case 305: $ans = "Use Proxy"; break; - case 307: $ans = "Temporary Redirect"; break; - case 400: $ans = "Bad Request"; break; - case 401: $ans = "Unauthorized"; break; - case 402: $ans = "Payment Required"; break; - case 403: $ans = "Forbidden"; break; - case 404: $ans = "Not Found"; break; - case 405: $ans = "Method Not Allowed"; break; - case 406: $ans = "Not Acceptable"; break; - case 407: $ans = "Proxy Authentication Required"; break; - case 408: $ans = "Request Timeout"; break; - case 409: $ans = "Conflict"; break; - case 410: $ans = "Gone"; break; - case 411: $ans = "Length Required"; break; - case 412: $ans = "Precondition Failed"; break; - case 413: $ans = "Request Entity Too Large"; break; - case 414: $ans = "Request-URI Too Long"; break; - case 415: $ans = "Unsupported Media Type"; break; - case 416: $ans = "Requested Range Not Satisfiable"; break; - case 417: $ans = "Expectation Failed"; break; - case 422: $ans = "Unprocessable Entity"; break; - case 423: $ans = "Locked"; break; - case 424: $ans = "Failed Dependency"; break; - case 500: $ans = "Internal Server Error"; break; - case 501: $ans = "Not Implemented"; break; - case 502: $ans = "Bad Gateway"; break; - case 503: $ans = "Service Unavailable"; break; - case 504: $ans = "Gateway Timeout"; break; - case 505: $ans = "HTTP Version Not Supported"; break; - default: $ans = "Unknown HTTP Status Code '$status'"; + case 100: $ans = 'Continue'; break; + case 101: $ans = 'Switching Protocols'; break; + case 200: $ans = 'OK'; break; + case 201: $ans = 'Created'; break; + case 202: $ans = 'Accepted'; break; + case 203: $ans = 'Non-Authoritative Information'; break; + case 204: $ans = 'No Content'; break; + case 205: $ans = 'Reset Content'; break; + case 206: $ans = 'Partial Content'; break; + case 207: $ans = 'Multi-Status'; break; + case 300: $ans = 'Multiple Choices'; break; + case 301: $ans = 'Moved Permanently'; break; + case 302: $ans = 'Found'; break; + case 303: $ans = 'See Other'; break; + case 304: $ans = 'Not Modified'; break; + case 305: $ans = 'Use Proxy'; break; + case 307: $ans = 'Temporary Redirect'; break; + case 400: $ans = 'Bad Request'; break; + case 401: $ans = 'Unauthorized'; break; + case 402: $ans = 'Payment Required'; break; + case 403: $ans = 'Forbidden'; break; + case 404: $ans = 'Not Found'; break; + case 405: $ans = 'Method Not Allowed'; break; + case 406: $ans = 'Not Acceptable'; break; + case 407: $ans = 'Proxy Authentication Required'; break; + case 408: $ans = 'Request Timeout'; break; + case 409: $ans = 'Conflict'; break; + case 410: $ans = 'Gone'; break; + case 411: $ans = 'Length Required'; break; + case 412: $ans = 'Precondition Failed'; break; + case 413: $ans = 'Request Entity Too Large'; break; + case 414: $ans = 'Request-URI Too Long'; break; + case 415: $ans = 'Unsupported Media Type'; break; + case 416: $ans = 'Requested Range Not Satisfiable'; break; + case 417: $ans = 'Expectation Failed'; break; + case 422: $ans = 'Unprocessable Entity'; break; + case 423: $ans = 'Locked'; break; + case 424: $ans = 'Failed Dependency'; break; + case 500: $ans = 'Internal Server Error'; break; + case 501: $ans = 'Not Implemented'; break; + case 502: $ans = 'Bad Gateway'; break; + case 503: $ans = 'Service Unavailable'; break; + case 504: $ans = 'Gateway Timeout'; break; + case 505: $ans = 'HTTP Version Not Supported'; break; + default: $ans = 'Unknown HTTP Status Code '.$status; } return $ans; } diff --git a/inc/caldav-DELETE.php b/inc/caldav-DELETE.php index d21afbc5..4072b546 100644 --- a/inc/caldav-DELETE.php +++ b/inc/caldav-DELETE.php @@ -66,15 +66,22 @@ else { /** * We read the resource first, so we can check if it matches (or does not match) */ - $qry = new PgQuery( "SELECT cd.dav_etag, ci.uid FROM caldav_data cd JOIN calendar_item ci USING (dav_id) WHERE cd.user_no = ? AND cd.dav_name = ?;", $request->user_no, $request->path ); + $escaped_path = qpg($request->path); + $qry = new PgQuery( "SELECT cd.dav_etag, ci.uid, cd.collection_id FROM caldav_data cd JOIN calendar_item ci USING (dav_id) WHERE cd.user_no = ? AND cd.dav_name = $escaped_path;", $request->user_no ); if ( $qry->Exec("DELETE") && $qry->rows == 1 ) { $delete_row = $qry->Fetch(); if ( (isset($request->etag_if_match) && $request->etag_if_match != $delete_row->dav_etag) ) { $request->DoResponse( 412, translate("Resource has changed on server - not deleted") ); } - $qry = new PgQuery( "DELETE FROM caldav_data WHERE user_no = ? AND dav_name = ?;", $request->user_no, $request->path ); + + $collection_id = $delete_row->collection_id; + $sql = <<Exec("DELETE") ) { - $qry = new PgQuery( "DELETE FROM property WHERE dav_name = ?;", $request->path ); $qry->Exec("DELETE"); /** @todo we should write a trigger to delete property records when caldav_data or collection is deleted */ + $qry = new PgQuery( "DELETE FROM property WHERE dav_name = $escaped_path;" ); $qry->Exec("DELETE"); /** @todo we should write a trigger to delete property records when caldav_data or collection is deleted */ @dbg_error_log( "DELETE", "DELETE: User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); if ( function_exists('log_caldav_action') ) { log_caldav_action( 'DELETE', $delete_row->uid, $request->user_no, $request->collection_id, $request->path ); diff --git a/inc/caldav-GET.php b/inc/caldav-GET.php index f7f8d024..2941761b 100644 --- a/inc/caldav-GET.php +++ b/inc/caldav-GET.php @@ -17,14 +17,21 @@ if ( ! $request->AllowedTo('freebusy') ) { } if ( $request->IsCollection() ) { - /** - * The CalDAV specification does not define GET on a collection, but typically this is - * used as a .ics download for the whole collection, which is what we do also. - * - * @todo Change this to reference the collection_id of the collection at this location. - */ - $order_clause = ( isset($c->strict_result_ordering) && $c->strict_result_ordering ? " ORDER BY dav_id" : ""); - $qry = new PgQuery( "SELECT caldav_data, class, caldav_type, calendar_item.user_no, logged_user FROM caldav_data INNER JOIN calendar_item USING ( dav_id ) WHERE caldav_data.user_no = ? AND caldav_data.dav_name ~ ? $order_clause", $request->user_no, $request->path.'[^/]+$'); + if ( $request->IsCalendar() ) { + /** + * The CalDAV specification does not define GET on a collection, but typically this is + * used as a .ics download for the whole collection, which is what we do also. + * + * @todo Change this to reference the collection_id of the collection at this location. + */ + $order_clause = ( isset($c->strict_result_ordering) && $c->strict_result_ordering ? " ORDER BY dav_id" : ""); + $qry = new PgQuery( "SELECT caldav_data, class, caldav_type, calendar_item.user_no, logged_user FROM caldav_data INNER JOIN calendar_item USING ( dav_id ) WHERE caldav_data.user_no = ? AND caldav_data.dav_name ~ ? $order_clause", $request->user_no, $request->path.'[^/]+$'); + } + else { + /** RFC2616 says we must send an Allow header if we send a 405 */ + header("Allow: PROPFIND,PROPPATCH,OPTIONS,MKCOL,REPORT,DELETE"); + $request->DoResponse( 405, translate("GET requests are only handled on calendar collections.") ); + } } else { $qry = new PgQuery( "SELECT caldav_data, caldav_data.dav_etag, class, caldav_type, calendar_item.user_no, logged_user FROM caldav_data INNER JOIN calendar_item USING ( dav_id ) WHERE caldav_data.user_no = ? AND caldav_data.dav_name = ? ;", $request->user_no, $request->path); @@ -80,7 +87,7 @@ else if ( $qry->rows == 1 && ! $request->IsCollection() ) { header( "Etag: \"$event->dav_etag\"" ); header( "Content-Length: ".strlen($event->caldav_data) ); - $request->DoResponse( 200, ($request->method == "HEAD" ? "" : $event->caldav_data), "text/calendar" ); + $request->DoResponse( 200, ($request->method == "HEAD" ? "" : $event->caldav_data), "text/calendar; charset=\"utf-8\"" ); } else if ( $qry->rows < 1 && ! $request->IsCollection() ) { $request->DoResponse( 404, translate("Calendar Resource Not Found.") ); @@ -166,6 +173,6 @@ else { $response = $vcal->Render(); header( "Content-Length: ".strlen($response) ); header( 'Etag: "'.$request->collection->dav_etag.'"' ); - $request->DoResponse( 200, ($request->method == "HEAD" ? "" : $response), "text/calendar" ); + $request->DoResponse( 200, ($request->method == "HEAD" ? "" : $response), "text/calendar; charset=\"utf-8\"" ); } diff --git a/inc/caldav-MOVE.php b/inc/caldav-MOVE.php new file mode 100644 index 00000000..7a6d93d9 --- /dev/null +++ b/inc/caldav-MOVE.php @@ -0,0 +1,42 @@ + +* @copyright Morphoss Ltd +* @license http://gnu.org/copyleft/gpl.html GNU GPL v2 +*/ +dbg_error_log("MOVE", "method handler"); + +if ( ! $request->AllowedTo("read") ) { + $request->DoResponse(403); +} + +if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || (isset($c->dbg['put']) && $c->dbg['put'])) ) { + $fh = fopen('/tmp/MOVE.txt','w'); + if ( $fh ) { + fwrite($fh,$request->raw_post); + fclose($fh); + } +} + +include_once('caldav-PUT-functions.php'); +controlRequestContainer( $request->username, $request->user_no, $request->path, true); + +$lock_opener = $request->FailIfLocked(); + + +if ( $request->IsCollection() ) { + /** + * CalDAV does not define the result of a PUT on a collection. We treat that + * as an import. The code is in caldav-PUT-functions.php + */ + import_collection($request->raw_post,$request->user_no,$request->path,true); + $request->DoResponse( 200 ); + return; +} + +$put_action_type = putCalendarResource( $request, $session->user_no, true ); +$request->DoResponse( ($put_action_type == 'INSERT' ? 201 : 204) ); diff --git a/inc/caldav-PROPFIND.php b/inc/caldav-PROPFIND.php index 7e20a909..3df5cf60 100644 --- a/inc/caldav-PROPFIND.php +++ b/inc/caldav-PROPFIND.php @@ -588,7 +588,7 @@ function item_to_xml( $item ) { * a list of calendars for the user which are parented by this path. */ function get_collection_contents( $depth, $user_no, $collection ) { - global $session, $request, $reply, $prop_list, $arbitrary; + global $c, $session, $request, $reply, $prop_list, $arbitrary; dbg_error_log('PROPFIND','Getting collection contents: Depth %d, User: %d, Path: %s', $depth, $user_no, $collection->dav_name ); @@ -658,7 +658,7 @@ function get_collection_contents( $depth, $user_no, $collection ) { $sql .= 'summary AS dav_displayname '; $sql .= 'FROM caldav_data JOIN calendar_item USING( dav_id, user_no, dav_name) '; $sql .= 'WHERE dav_name ~ '.qpg('^'.$collection->dav_name.'[^/]+$'). $privacy_clause; - $sql .= 'ORDER BY dav_name'; + if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $sql .= " ORDER BY dav_id"; $qry = new PgQuery($sql, PgQuery::Plain(iCalendar::HttpDateFormat()), PgQuery::Plain(iCalendar::HttpDateFormat())); if( $qry->Exec('PROPFIND',__LINE__,__FILE__) && $qry->rows > 0 ) { while( $item = $qry->Fetch() ) { diff --git a/inc/caldav-PUT-functions.php b/inc/caldav-PUT-functions.php index 9cf81819..9c1471bd 100644 --- a/inc/caldav-PUT-functions.php +++ b/inc/caldav-PUT-functions.php @@ -25,7 +25,7 @@ $tz_regex = ':^(Africa|America|Antarctica|Arctic|Asia|Atlantic|Australia|Brazil| /** * This function launches an error * @param boolean $caldav_context Whether we are responding via CalDAV or interactively -* @param int $user_no the user wich will receive this ics file +* @param int $user_no the user who will receive this ics file * @param string $path the $path where the PUT failed to store such as /user_foo/home/ * @param string $message An optional error message to return to the client * @param int $error_no An optional value for the HTTP error code @@ -517,7 +517,7 @@ function write_resource( $user_no, $path, $caldav_data, $collection_id, $author, } $dtend = $first->GetPValue('DTEND'); - if ( (!isset($dtend) || "$dtend" == "") ) { + if ( (!isset($dtend) || $dtend == "") ) { if ( $first->GetPValue('DURATION') != "" AND $dtstart != "" ) { $duration = preg_replace( '#[PT]#', ' ', $first->GetPValue('DURATION') ); $dtend = '('.qpg($dtstart).'::timestamp with time zone + '.qpg($duration).'::interval)'; @@ -625,26 +625,43 @@ function write_resource( $user_no, $path, $caldav_data, $collection_id, $author, } } + $escaped_path = qpg($path); if ( $put_action_type != 'INSERT' ) { - $sql .= "DELETE FROM calendar_item WHERE user_no=$user_no AND dav_name=".qpg($path).";"; - } - $sql .= <<GetPValue('UID'), $user_no, $collection_id, $path ); } - $qry = new PgQuery( $sql, $user_no, $path, $etag, $first->GetPValue('UID'), $dtstamp, - $first->GetPValue('DTSTART'), $first->GetPValue('SUMMARY'), $first->GetPValue('LOCATION'), - $class, $first->GetPValue('TRANSP'), $first->GetPValue('DESCRIPTION'), $first->GetPValue('RRULE'), $tzid, - $last_modified, $first->GetPValue('URL'), $first->GetPValue('PRIORITY'), $first->GetPValue('CREATED'), - $first->GetPValue('DUE'), $first->GetPValue('PERCENT-COMPLETE'), $first->GetPValue('STATUS'), $collection_id - ); + $qry = new PgQuery( $sql, $etag, $first->GetPValue('UID'), $dtstamp, + $first->GetPValue('DTSTART'), $first->GetPValue('SUMMARY'), $first->GetPValue('LOCATION'), $class, $first->GetPValue('TRANSP'), + $first->GetPValue('DESCRIPTION'), $first->GetPValue('RRULE'), $tzid, + $last_modified, $first->GetPValue('URL'), $first->GetPValue('PRIORITY'), + $first->GetPValue('CREATED'), $first->GetPValue('DUE'), $first->GetPValue('PERCENT-COMPLETE'), $first->GetPValue('STATUS') + ); if ( !$qry->Exec("PUT") ) { rollback_on_error( $caldav_context, $user_no, $path); return false; diff --git a/inc/caldav-REPORT-expand-property.php b/inc/caldav-REPORT-expand-property.php new file mode 100644 index 00000000..a4da7fad --- /dev/null +++ b/inc/caldav-REPORT-expand-property.php @@ -0,0 +1,32 @@ +GetPath('/DAV::expand-property/DAV::property'); +$proplist = array(); +foreach( $props AS $k => $v ) { + $proplist[] = $v->GetContent(); +} +function display_status( $status_code ) { + return sprintf( 'HTTP/1.1 %03d %s', $status_code, getStatusMessage($status_code) ); +} + +$sql = "SELECT * FROM sync_changes LEFT JOIN calendar_item USING (dav_id) LEFT JOIN caldav_data USING (dav_id) WHERE sync_time > (SELECT modification_time FROM sync_tokens WHERE sync_token = ?)"; +$qry = new PgQuery($sql); + +if ( $qry->Exec("REPORT",__LINE__,__FILE__) && $qry->rows > 0 ) { + while( $object = $qry->Fetch() ) { + $href = new XMLElement( 'dav_name', ConstructURL($change->href) ); + $status = new XMLElement( 'status', display_status($change->status) ); + if ( $status != 404 ) { + $propstat = $request->ObjectPropStat($proplist, $object); + } + $responses[] = new XMLElement( 'sync-response', array() ); + } +} + +$multistatus = new XMLElement( "multistatus", $responses, $reply->GetXmlNsArray() ); + +$request->XMLResponse( 207, $multistatus ); diff --git a/inc/caldav-REPORT-sync-collection.php b/inc/caldav-REPORT-sync-collection.php new file mode 100644 index 00000000..2e641867 --- /dev/null +++ b/inc/caldav-REPORT-sync-collection.php @@ -0,0 +1,75 @@ +GetPath('/DAV::sync-collection/DAV::sync-token'); +$sync_token = $sync_tokens[0]->GetContent(); +if ( !isset($sync_token) ) $sync_token = 0; +$sync_token = intval($sync_token); +dbg_error_log( 'sync', " sync-token: %s", $sync_token ); + + +$props = $xmltree->GetElements('DAV::prop'); +$v = $props[0]; +$props = $v->GetContent(); +$proplist = array(); +foreach( $props AS $k => $v ) { + $proplist[] = $v->GetTag(); +} + +function display_status( $status_code ) { + return sprintf( 'HTTP/1.1 %03d %s', intval($status_code), getStatusMessage($status_code) ); +} + +$sql = "SELECT new_sync_token(?,?)"; +$qry = new PgQuery($sql, $sync_token, $request->CollectionId()); +if ( !$qry->Exec("REPORT",__LINE__,__FILE__) || $qry->rows <= 0 ) { + $request->DoResponse( 500, translate("Database error") ); +} +$row = $qry->Fetch(); +$new_token = $row->new_sync_token; + +if ( $sync_token == 0 ) { + $sql = <<CollectionId()); +} +else { + $sql = << (SELECT modification_time FROM sync_tokens WHERE sync_token = ?) +EOSQL; + $qry = new PgQuery($sql, $request->CollectionId(), $sync_token); +} + +if ( $qry->Exec("REPORT",__LINE__,__FILE__) ) { + while( $object = $qry->Fetch() ) { + $resultset = array( + new XMLElement( 'href', ConstructURL($object->dav_name) ), + new XMLElement( 'status', display_status($object->sync_status) ) + ); + if ( $status != 404 ) { + $dav_resource = new DAVResource($object); + $resultset = array_merge( $resultset, $dav_resource->GetPropStat($proplist) ); + } + $responses[] = new XMLElement( 'sync-response', $resultset ); + } + $responses[] = new XMLElement( 'sync-token', $new_token ); +} +else { + $request->DoResponse( 500, translate("Database error") ); +} + +$multistatus = new XMLElement( "multistatus", $responses, $reply->GetXmlNsArray() ); + +$request->XMLResponse( 207, $multistatus ); diff --git a/inc/caldav-REPORT.php b/inc/caldav-REPORT.php index c9dc28db..40f04851 100644 --- a/inc/caldav-REPORT.php +++ b/inc/caldav-REPORT.php @@ -4,8 +4,8 @@ * * @package davical * @subpackage caldav -* @author Andrew McMillan -* @copyright Catalyst .Net Ltd +* @author Andrew McMillan +* @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ dbg_error_log("REPORT", "method handler"); @@ -48,9 +48,16 @@ if ( $xmltree->GetTag() == "urn:ietf:params:xml:ns:caldav:free-busy-query" ) { } $reply = new XMLDocument( array( "DAV:" => "" ) ); -if ( $xmltree->GetTag() == "DAV::principal-property-search" ) { - include("caldav-REPORT-principal.php"); - exit; // Not that the above include should return anyway +switch( $xmltree->GetTag() ) { + case 'DAV::principal-property-search': + include("caldav-REPORT-principal.php"); + exit; // Not that it should return anyway. + case 'DAV::sync-collection': + include("caldav-REPORT-sync-collection.php"); + exit; // Not that it should return anyway. + case 'DAV::expand-property': + include("caldav-REPORT-expand-property.php"); + exit; // Not that it should return anyway. } // Must have read privilege for all other reports diff --git a/po/de.po b/po/de.po index 3e8da665..fba54832 100644 --- a/po/de.po +++ b/po/de.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RSCDS 0.2.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: 2006-11-06 17:24+1300\n" "Last-Translator: Cristina Radalescu \n" "MIME-Version: 1.0\n" @@ -41,10 +41,6 @@ msgstr "--- Wähle einen Benutzer und Quelle ---" msgid "--- select a user, group or resource ---" msgstr "--- Wähle einen Benutzer, eine Gruppe oder eine Quelle ---" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "" -"WARNUNG: Alle Termine in diesem Pfad werden gelöscht bevor die gesamte ics-Datei einfügt wird" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "" "WARNUNG: Alle Termine in diesem Pfad werden gelöscht bevor die gesamte ics-Datei einfügt wird" @@ -87,9 +83,11 @@ msgstr "Administrator" msgid "Administers" msgstr "Administratoren" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." -msgstr "Alle Termine des Users %s sind gelöscht worden und mit denen der Datei ersetzt worden." +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." +msgstr "" msgid "All requested changes were made." msgstr "Alle geforderten Änderungen wurden gemacht." @@ -119,9 +117,9 @@ msgstr "Kalenderquelle nicht gefunden." msgid "Calendar Users" msgstr "Kalender Benutzer" -#, fuzzy -msgid "Calendar" -msgstr "Kalender Benutzer" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." +msgstr "" msgid "Can read from" msgstr "Lesemöglichkeit bei" @@ -161,19 +159,23 @@ msgstr "Bestätige Löschung des Verhältnistyps" msgid "Confirm Deletion of the Relationship Type" msgstr "Bestätige Löschung des Verhältnistyps" +#, fuzzy +msgid "Confirm Deletion of the User" +msgstr "Bestätige Löschung des Verhältnistyps" + msgid "Confirm the new password." msgstr "Neues Passwort bestätigen" msgid "Confirm" msgstr "Bestätigung" +#, fuzzy +msgid "Create Calendar" +msgstr "Kalender Benutzer" + msgid "Create" msgstr "Erstellen" -#, fuzzy -msgid "Created On" -msgstr "Erstelle bei" - msgid "DAViCal CalDAV Server" msgstr "" @@ -198,6 +200,14 @@ msgstr "Standardverhältnis hinzugefügt." msgid "Delete" msgstr "Löschen" +#, fuzzy +msgid "Deleting Collection:" +msgstr "Bestätige Löschung des Verhältnistyps" + +#, fuzzy +msgid "Deleting User:" +msgstr "Löschen" + msgid "Directory on the server" msgstr "Ordner auf dem Server" @@ -269,6 +279,9 @@ msgstr "Beschäftigt" msgid "Full Name" msgstr "Vollständiger Name" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "LOS!" @@ -309,10 +322,6 @@ msgstr "Wenn du dein Passwort vergessen hast, dann" msgid "If you would like to request access, please e-mail" msgstr "Wenn Sie gern Zugriff anfordern wollen, bitte e-mailen" -#, fuzzy -msgid "Import ICS file to new collection" -msgstr "Importiere ICS-Datei" - msgid "Import all .ics files of a directory" msgstr "Importiere alle ICS-Dateien eines Ordners" @@ -394,6 +403,10 @@ msgstr "Bitte bestätigen sie das Löschen" msgid "Please confirm deletion of collection - see below" msgstr "" +#, fuzzy +msgid "Please confirm deletion of user" +msgstr "Bitte bestätigen sie das Löschen" + msgid "Please note the time and advise the administrator of your system." msgstr "Bitte notieren Sie sich die Zeit und benachrichtigen Sie Ihren Systemadministrator" @@ -493,6 +506,9 @@ msgstr "Setup RSCDS" msgid "Setup" msgstr "Setup" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "Hilfe anzeigen zu" @@ -520,14 +536,20 @@ msgstr "Dieser Verhaeltnistyp wird bereits verwendet. Siehe ##Verhältnisstypben msgid "The application program does not understand that request." msgstr "Das Programm versteht diese Anfrage nicht." +#, fuzzy +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "Setzte Pfad um ics aufzubewahren z.B. 'home' wird zu /caldav.php/me/home/" + msgid "The calendar path contains illegal characters." msgstr "Der Kalenderpfad enthält ungültige Zeichen." msgid "The displayname may only be set on collections or principals." msgstr "" -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +#, fuzzy +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "Die Datei %s is nicht UTF-8 kodiert, sehen sie sich den Fehler für mehr Details an." msgid "The name this user can log into the system with." @@ -573,7 +595,8 @@ msgstr "Aktualisieren" msgid "Updated" msgstr "Aktualisiert" -msgid "Upload your .ics calendar in ical format " +#, fuzzy +msgid "Upload a .ics calendar in iCalendar format " msgstr "Lade deine ICS-Kalender im iCal-Format hoch " msgid "User Details" @@ -588,6 +611,10 @@ msgstr "Benutzerrollen" msgid "User Unavailable" msgstr "Benutzer Unerreichbar" +#, fuzzy +msgid "User deleted" +msgstr "Benutzerrollen" + msgid "User is active" msgstr "Benutzer ist aktiv" @@ -651,9 +678,6 @@ msgstr "Du kannst keine Einträge dieses Kaländers ändern." msgid "You must log in to use this system." msgstr "Sie müssen sich in das System einloggen" -msgid "Your .ics calendar" -msgstr "Dein ICS-Kalender" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "Alle Termine der Benutzers &s sind gelöscht und wurden durch die aus der Datei %s ersetzt" @@ -702,10 +726,6 @@ msgstr "ist der Asistent von" msgid "path to store your ics" msgstr "Der Pfad um deine ICS aufzubewahren" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "" -"Setze den Pfad um deine ICS aufzubewahren z.B. 'home' wenn du es von 'caldav.php/me/home/' bekommst" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "Die Datei %s is nicht UTF-8 kodiert, sehe dir bitte den Fehler für mehr Details an" @@ -716,6 +736,28 @@ msgstr "Bitte loggen Sie sich mit den Ihnen zugeteilten Benutzernamen und Passwo msgid "This operation does the following:
    • check valid users in LDAP directory
    • " msgstr "Diese Operation " +#~ msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" +#~ msgstr "" +#~ "WARNUNG: Alle Termine in diesem Pfad werden gelöscht bevor die gesamte ics-Datei einfügt wird" + +#~ msgid "All events of user %s were deleted and replaced by those from the file." +#~ msgstr "Alle Termine des Users %s sind gelöscht worden und mit denen der Datei ersetzt worden." + +#, fuzzy +#~ msgid "Created On" +#~ msgstr "Erstelle bei" + +#, fuzzy +#~ msgid "Import ICS file to new collection" +#~ msgstr "Importiere ICS-Datei" + +#~ msgid "Your .ics calendar" +#~ msgstr "Dein ICS-Kalender" + +#~ msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" +#~ msgstr "" +#~ "Setze den Pfad um deine ICS aufzubewahren z.B. 'home' wenn du es von 'caldav.php/me/home/' bekommst" + #~ msgid "Really Simple CalDAV Store" #~ msgstr "Wirklich einfacher CalDAV Store" diff --git a/po/es.po b/po/es.po index 37373af5..281ad163 100644 --- a/po/es.po +++ b/po/es.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RSCDS 0.2.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: 2006-11-06 17:12+1300\n" "Last-Translator: Lorena Paoletti \n" "Language-Team: LANGUAGE \n" @@ -41,9 +41,6 @@ msgstr "" msgid "--- select a user, group or resource ---" msgstr "" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "" @@ -83,8 +80,10 @@ msgstr "Administrador" msgid "Administers" msgstr "Administrador" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." msgstr "" msgid "All requested changes were made." @@ -114,9 +113,9 @@ msgstr "" msgid "Calendar Users" msgstr "Calendario de los Usuario" -#, fuzzy -msgid "Calendar" -msgstr "Calendario de los Usuario" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." +msgstr "" msgid "Can read from" msgstr "" @@ -155,17 +154,20 @@ msgstr "" msgid "Confirm Deletion of the Relationship Type" msgstr "" +msgid "Confirm Deletion of the User" +msgstr "" + msgid "Confirm the new password." msgstr "Confirmar la nueva contraseña." msgid "Confirm" msgstr "Confirmar" -msgid "Create" -msgstr "Crear" - #, fuzzy -msgid "Created On" +msgid "Create Calendar" +msgstr "Calendario de los Usuario" + +msgid "Create" msgstr "Crear" msgid "DAViCal CalDAV Server" @@ -192,6 +194,13 @@ msgstr "Relación incorporada." msgid "Delete" msgstr "Borrar" +msgid "Deleting Collection:" +msgstr "" + +#, fuzzy +msgid "Deleting User:" +msgstr "Borrar" + msgid "Directory on the server" msgstr "" @@ -262,6 +271,9 @@ msgstr "" msgid "Full Name" msgstr "Nombre Completo" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "" @@ -301,9 +313,6 @@ msgstr "" msgid "If you would like to request access, please e-mail" msgstr "Si desea obtener acceso por favor envíe un correo electrónico a" -msgid "Import ICS file to new collection" -msgstr "" - msgid "Import all .ics files of a directory" msgstr "" @@ -383,6 +392,9 @@ msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" +msgid "Please confirm deletion of user" +msgstr "" + msgid "Please note the time and advise the administrator of your system." msgstr "Por favor, tome nota de la fecha y hora y contacte a su administrador de sistemas." @@ -482,6 +494,9 @@ msgstr "" msgid "Setup" msgstr "" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "Mostrar ayuda sobre" @@ -509,14 +524,18 @@ msgstr "Ese tipo de relación está siendo utilizada. Ver ##TipodeRelacióonUtil msgid "The application program does not understand that request." msgstr "" +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "" + msgid "The calendar path contains illegal characters." msgstr "" msgid "The displayname may only be set on collections or principals." msgstr "" -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The name this user can log into the system with." @@ -561,7 +580,7 @@ msgstr "Actualizar" msgid "Updated" msgstr "Actualizado" -msgid "Upload your .ics calendar in ical format " +msgid "Upload a .ics calendar in iCalendar format " msgstr "" msgid "User Details" @@ -576,6 +595,10 @@ msgstr "Roles del Usuario" msgid "User Unavailable" msgstr "" +#, fuzzy +msgid "User deleted" +msgstr "Roles del Usuario" + msgid "User is active" msgstr "El usuario está activo" @@ -639,9 +662,6 @@ msgstr "" msgid "You must log in to use this system." msgstr "Debe conectarte para usar el sistema." -msgid "Your .ics calendar" -msgstr "" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "" @@ -690,9 +710,6 @@ msgstr "" msgid "path to store your ics" msgstr "" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "" @@ -703,6 +720,10 @@ msgstr "Para conectarse debe utilizar el nombre de usuario y contraseña que le msgid "This operation does the following:
      • check valid users in LDAP directory
      • " msgstr "" +#, fuzzy +#~ msgid "Created On" +#~ msgstr "Crear" + #~ msgid "Really Simple CalDAV Store" #~ msgstr "Almacenamiento CalDAV realmente simple" diff --git a/po/fr.po b/po/fr.po index 198a0b44..795bfe39 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: 2009-07-20 14:24+0200\n" "Last-Translator: Christian Perrier \n" "Language-Team: French \n" @@ -44,11 +44,6 @@ msgstr "--- choisissez un utilisateur ou une ressource ---" msgid "--- select a user, group or resource ---" msgstr "--- choisissez un utilisateur, un groupe ou une ressource ---" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "" -"Attention : tous les événements de ce chemin seront supprimés avant l'insertion de tous ceux du " -"fichier ics" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "" "Attention : tous les événements de ce chemin seront supprimés avant l'insertion de tous ceux du " @@ -90,9 +85,11 @@ msgstr "Administrateur" msgid "Administers" msgstr "Administrateurs" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." -msgstr "Tous les événements de l'utilisateur %s seront supprimés et remplacés par ceux du fichier" +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." +msgstr "" msgid "All requested changes were made." msgstr "Toutes les modifications demandées ont eu lieu" @@ -121,8 +118,9 @@ msgstr "Ressource calendrier introuvable." msgid "Calendar Users" msgstr "Utilisateurs du calendrier" -msgid "Calendar" -msgstr "Calendrier" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." +msgstr "" msgid "Can read from" msgstr "Peut lire depuis" @@ -157,18 +155,23 @@ msgstr "Confirmez la suppression de la collection" msgid "Confirm Deletion of the Relationship Type" msgstr "Confirmez la suppression de ce type de relation" +#, fuzzy +msgid "Confirm Deletion of the User" +msgstr "Confirmez la suppression de la collection" + msgid "Confirm the new password." msgstr "Confirmez le nouveau mot de passe" msgid "Confirm" msgstr "Confirmer" +#, fuzzy +msgid "Create Calendar" +msgstr "Calendrier" + msgid "Create" msgstr "Créer" -msgid "Created On" -msgstr "Créé le" - msgid "DAViCal CalDAV Server" msgstr "Serveur DAViCal CalDAV" @@ -190,6 +193,14 @@ msgstr "Relation par défaut ajoutée." msgid "Delete" msgstr "Supprimer" +#, fuzzy +msgid "Deleting Collection:" +msgstr "Confirmez la suppression de la collection" + +#, fuzzy +msgid "Deleting User:" +msgstr "Supprimer" + msgid "Directory on the server" msgstr "Répertoire du serveur" @@ -270,6 +281,9 @@ msgstr "LibreOccupé" msgid "Full Name" msgstr "Nom complet" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "ENTRER !" @@ -310,9 +324,6 @@ msgstr "Si vous avez oublié votre mot de passe alors" msgid "If you would like to request access, please e-mail" msgstr "Si vous souhaitez avoir accès, veuillez envoyer un courriel" -msgid "Import ICS file to new collection" -msgstr "Importer un fichier ICS dans une nouvelle collection" - msgid "Import all .ics files of a directory" msgstr "Importer tous les fichiers .ics d'un répertoire" @@ -401,6 +412,10 @@ msgstr "Veuillez confirmer la suppression" msgid "Please confirm deletion of collection - see below" msgstr "Veuillez confirmer la suppression de la collection - voir ci-dessous" +#, fuzzy +msgid "Please confirm deletion of user" +msgstr "Veuillez confirmer la suppression" + msgid "Please note the time and advise the administrator of your system." msgstr "Veuillez noter l'heure et informer l'administrateur de votre système informatique." @@ -513,6 +528,9 @@ msgstr "Configurer RSCDS" msgid "Setup" msgstr "Configuration" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "Afficher l'aide sur" @@ -545,6 +563,12 @@ msgstr "Ce type de relation est encore employé. Cf. ##RelationshipTypeUsed##" msgid "The application program does not understand that request." msgstr "L'application ne comprend pas la demande." +#, fuzzy +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "Veuillez indiquer le chemin où stocker votre ics ex : 'home' pour avoir /caldav.php/moi/home/" + msgid "The calendar path contains illegal characters." msgstr "le chemin vers le calendrier contient des caractères interdits." @@ -553,8 +577,8 @@ msgstr "le chemin vers le calendrier contient des caractères interdits." msgid "The displayname may only be set on collections or principals." msgstr "Le nom d'affichage ne peut être défini que sur des collections ou des titulaires." -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +#, fuzzy +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "Le fichier %s n'est pas encodé en UTF-8, veuillez vérifier les erreurs pour plus d'information." # or ##TypeDeRelationsUtilisées## ? @@ -602,7 +626,8 @@ msgstr "Enregistrer/Mettre à jour" msgid "Updated" msgstr "Mise à jour" -msgid "Upload your .ics calendar in ical format " +#, fuzzy +msgid "Upload a .ics calendar in iCalendar format " msgstr "Envoyer votre calendrier .ics au format ical" msgid "User Details" @@ -625,6 +650,10 @@ msgstr "Rôles de l'utilisateur" msgid "User Unavailable" msgstr "Utilisateur non disponible" +#, fuzzy +msgid "User deleted" +msgstr "Rôles de l'utilisateur" + # The user is 'active' in that their account is enabled for use. If they are # inactive they will not be able to log on. msgid "User is active" @@ -694,9 +723,6 @@ msgstr "Vous ne pouvez modifier les entrées de ce calendrier." msgid "You must log in to use this system." msgstr "Vous devez vous connecter pour utiliser ce logiciel." -msgid "Your .ics calendar" -msgstr "votre calendrier .ics" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "tous les événements de l'utilisateur %s ont été supprimés et remplacés par ceux du fichier %s." @@ -748,9 +774,6 @@ msgstr "est assisté par" msgid "path to store your ics" msgstr "le chemin où stocker votre ics" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "Indiquez le chemin où stocker votre ics. Ex : 'home' pour y accéder via /caldav.php/moi/home/." - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "Le fichier %s n'est pas encodé en UTF-8, merci de vérifier les erreurs pour plus d'information." @@ -761,3 +784,23 @@ msgstr "Vous devez vous connecter avec le nom d'utilisateur et le mot de passe q msgid "This operation does the following:
        • check valid users in LDAP directory
        • " msgstr "Cette opération exécute :
          • vérifie les utilisateurs valides de l'annuaire LDAP
          • ." +#~ msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" +#~ msgstr "" +#~ "Attention : tous les événements de ce chemin seront supprimés avant l'insertion de tous ceux du " +#~ "fichier ics" + +#~ msgid "All events of user %s were deleted and replaced by those from the file." +#~ msgstr "Tous les événements de l'utilisateur %s seront supprimés et remplacés par ceux du fichier" + +#~ msgid "Created On" +#~ msgstr "Créé le" + +#~ msgid "Import ICS file to new collection" +#~ msgstr "Importer un fichier ICS dans une nouvelle collection" + +#~ msgid "Your .ics calendar" +#~ msgstr "votre calendrier .ics" + +#~ msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" +#~ msgstr "" +#~ "Indiquez le chemin où stocker votre ics. Ex : 'home' pour y accéder via /caldav.php/moi/home/." diff --git a/po/hu.po b/po/hu.po index 276acec1..4f2d5e97 100644 --- a/po/hu.po +++ b/po/hu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: rscds 0.7.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: 2007-05-03 15:00+0001\n" "Last-Translator: David Takacs \n" "Language-Team: \n" @@ -41,9 +41,6 @@ msgstr "--- válasszon felhasználót vagy erőforrást ---" msgid "--- select a user, group or resource ---" msgstr "--- válasszon felhasználót, csoportot vagy erőforrást" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "" @@ -82,8 +79,10 @@ msgstr "Adminisztrátor" msgid "Administers" msgstr "" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." msgstr "" msgid "All requested changes were made." @@ -114,9 +113,9 @@ msgstr "Nem található ilyen naptár-erőforrás" msgid "Calendar Users" msgstr "Naptár felhasználói" -#, fuzzy -msgid "Calendar" -msgstr "Naptár felhasználói" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." +msgstr "" msgid "Can read from" msgstr "Láthatja" @@ -153,18 +152,23 @@ msgstr "Valóban törli a kapcsolattípust?" msgid "Confirm Deletion of the Relationship Type" msgstr "Valóban törli a kapcsolattípust?" +#, fuzzy +msgid "Confirm Deletion of the User" +msgstr "Valóban törli a kapcsolattípust?" + msgid "Confirm the new password." msgstr "Új jelszó ellenőrzése" msgid "Confirm" msgstr "Ellenőrzés" +#, fuzzy +msgid "Create Calendar" +msgstr "Naptár felhasználói" + msgid "Create" msgstr "Új létrehozása" -msgid "Created On" -msgstr "Létrehozva" - msgid "DAViCal CalDAV Server" msgstr "" @@ -187,6 +191,14 @@ msgstr "Kapcsolat hozzáadva." msgid "Delete" msgstr "Törlés" +#, fuzzy +msgid "Deleting Collection:" +msgstr "Valóban törli a kapcsolattípust?" + +#, fuzzy +msgid "Deleting User:" +msgstr "Törlés" + msgid "Directory on the server" msgstr "" @@ -256,6 +268,9 @@ msgstr "" msgid "Full Name" msgstr "Teljes név" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "Mehet!" @@ -295,9 +310,6 @@ msgstr "Ha elfelejtette jelszavát, " msgid "If you would like to request access, please e-mail" msgstr "Ha hozzáférést szeretne kapni, írjon: " -msgid "Import ICS file to new collection" -msgstr "" - msgid "Import all .ics files of a directory" msgstr "" @@ -377,6 +389,10 @@ msgstr "Törlés megerősítése" msgid "Please confirm deletion of collection - see below" msgstr "" +#, fuzzy +msgid "Please confirm deletion of user" +msgstr "Törlés megerősítése" + msgid "Please note the time and advise the administrator of your system." msgstr "Jegyezze fel az időpontot és értesítse az adminisztrátort!" @@ -476,6 +492,9 @@ msgstr "" msgid "Setup" msgstr "" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "Súgó erről: " @@ -504,14 +523,18 @@ msgstr "Ez a kapcsolattípus használatban van. Ld. ##RelationshipTypeUsed##" msgid "The application program does not understand that request." msgstr "Az alkalmazás nem tudja értelmezni a kérést." +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "" + msgid "The calendar path contains illegal characters." msgstr "A naptár elérési útja érvénytelen karaktert tartalmaz." msgid "The displayname may only be set on collections or principals." msgstr "A megjelenített név csak gyűjteményekhez vagy megbízókhoz állítható be." -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The name this user can log into the system with." @@ -557,7 +580,7 @@ msgstr "Frissítés" msgid "Updated" msgstr "Frissítve" -msgid "Upload your .ics calendar in ical format " +msgid "Upload a .ics calendar in iCalendar format " msgstr "" msgid "User Details" @@ -572,6 +595,10 @@ msgstr "Felhasználó szerepei" msgid "User Unavailable" msgstr "A felhasználó nem elérhető" +#, fuzzy +msgid "User deleted" +msgstr "Felhasználó szerepei" + msgid "User is active" msgstr "A felhasználó aktív" @@ -634,10 +661,6 @@ msgstr "Nincs jogosultsága bejegyzéseket módosítani ebben a naptárban." msgid "You must log in to use this system." msgstr "Be kell jelentkeznie a rendszer használatához." -#, fuzzy -msgid "Your .ics calendar" -msgstr "Nincs jogosultsága hozzáférni a naptárhoz" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "" @@ -686,9 +709,6 @@ msgstr "asszisztense neki:" msgid "path to store your ics" msgstr "" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "" @@ -699,6 +719,13 @@ msgstr "Lépjen be felhasználónevével és jelszavával." msgid "This operation does the following:
            • check valid users in LDAP directory
            • " msgstr "" +#~ msgid "Created On" +#~ msgstr "Létrehozva" + +#, fuzzy +#~ msgid "Your .ics calendar" +#~ msgstr "Nincs jogosultsága hozzáférni a naptárhoz" + #~ msgid "Really Simple CalDAV Store" #~ msgstr "Really Simple CalDAV Store" diff --git a/po/it.po b/po/it.po index e930a232..a99662dc 100644 --- a/po/it.po +++ b/po/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -40,10 +40,6 @@ msgstr "--- seleziona l'utente o la risorsa ---" msgid "--- select a user, group or resource ---" msgstr "--- seleziona l'utente, gruppo di risorse ---" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "" -"ATTENZIONE: tutti gli eventi in questo path saranno cancellati dall'inserimento del file ics" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "" "ATTENZIONE: tutti gli eventi in questo path saranno cancellati dall'inserimento del file ics" @@ -83,8 +79,10 @@ msgstr "Amministratore" msgid "Administers" msgstr "Gestisce" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." msgstr "" msgid "All requested changes were made." @@ -115,8 +113,9 @@ msgstr "" msgid "Calendar Users" msgstr "Calendario utenti" -msgid "Calendar" -msgstr "Calendario" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." +msgstr "" msgid "Can read from" msgstr "Può leggere da" @@ -151,18 +150,23 @@ msgstr "Conferma cancellazione archivio" msgid "Confirm Deletion of the Relationship Type" msgstr "Conferma cancellazione del tipo di relazione" +#, fuzzy +msgid "Confirm Deletion of the User" +msgstr "Conferma cancellazione archivio" + msgid "Confirm the new password." msgstr "Conferma la nuova password." msgid "Confirm" msgstr "Conferma" +#, fuzzy +msgid "Create Calendar" +msgstr "Calendario" + msgid "Create" msgstr "Crea" -msgid "Created On" -msgstr "Creato il" - msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Server" @@ -184,6 +188,14 @@ msgstr "Relazioni di default aggiunte." msgid "Delete" msgstr "Elimina" +#, fuzzy +msgid "Deleting Collection:" +msgstr "Conferma cancellazione archivio" + +#, fuzzy +msgid "Deleting User:" +msgstr "Elimina" + msgid "Directory on the server" msgstr "Directory sul server" @@ -253,6 +265,9 @@ msgstr "Impegnato" msgid "Full Name" msgstr "Nome visualizzato" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "VAI!" @@ -292,9 +307,6 @@ msgstr "Se hai dimenticato la password" msgid "If you would like to request access, please e-mail" msgstr "Se si desidera richiedere un accesso, inviare un'e-mail" -msgid "Import ICS file to new collection" -msgstr "Importa file ICS nell'archivio" - msgid "Import all .ics files of a directory" msgstr "Importa tutti i file .ics di una directory" @@ -373,6 +385,10 @@ msgstr "Conferma cancellazione" msgid "Please confirm deletion of collection - see below" msgstr "" +#, fuzzy +msgid "Please confirm deletion of user" +msgstr "Conferma cancellazione" + msgid "Please note the time and advise the administrator of your system." msgstr "" @@ -474,6 +490,9 @@ msgstr "" msgid "Setup" msgstr "" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "" @@ -501,14 +520,21 @@ msgstr "" msgid "The application program does not understand that request." msgstr "" +#, fuzzy +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "" +"Impostare il percorso per memorizzare il file ics - es. 'home' - che sarà referenziato come /caldav." +"php/me/home/" + msgid "The calendar path contains illegal characters." msgstr "" msgid "The displayname may only be set on collections or principals." msgstr "" -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The name this user can log into the system with." @@ -553,7 +579,7 @@ msgstr "Aggiorna" msgid "Updated" msgstr "Ultima modifica" -msgid "Upload your .ics calendar in ical format " +msgid "Upload a .ics calendar in iCalendar format " msgstr "" msgid "User Details" @@ -568,6 +594,10 @@ msgstr "Ruoli utente" msgid "User Unavailable" msgstr "L'utente non è disponibile" +#, fuzzy +msgid "User deleted" +msgstr "Ruoli utente" + msgid "User is active" msgstr "L'utente è attivo" @@ -629,9 +659,6 @@ msgstr "" msgid "You must log in to use this system." msgstr "È necessario autenticarsi per utilizzare questo sistema." -msgid "Your .ics calendar" -msgstr "Il tuo calendario .ics" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "" @@ -680,9 +707,6 @@ msgstr "" msgid "path to store your ics" msgstr "percorso dove memorizzare il file ics" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "" @@ -692,3 +716,16 @@ msgstr "" msgid "This operation does the following:
              • check valid users in LDAP directory
              • " msgstr "" + +#~ msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" +#~ msgstr "" +#~ "ATTENZIONE: tutti gli eventi in questo path saranno cancellati dall'inserimento del file ics" + +#~ msgid "Created On" +#~ msgstr "Creato il" + +#~ msgid "Import ICS file to new collection" +#~ msgstr "Importa file ICS nell'archivio" + +#~ msgid "Your .ics calendar" +#~ msgstr "Il tuo calendario .ics" diff --git a/po/ja.po b/po/ja.po index 27359c38..bcd88dfb 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: DAViCal 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: 2008-02-27 16:04+0900\n" "Last-Translator: Shu NAKAMAE \n" "Language-Team: \n" @@ -41,9 +41,6 @@ msgstr "--- ユーザ又は資源の選択 ---" msgid "--- select a user, group or resource ---" msgstr "--- ユーザ、グループ又は資源の選択 ---" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "注意:このパスに現存する全てのイベントはicsファイルの挿入に伴い削除されます。" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "注意:このパスに現存する全てのイベントはicsファイルの挿入に伴い削除されます。" @@ -82,9 +79,11 @@ msgstr "管理者" msgid "Administers" msgstr "管理する" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." -msgstr "ユーザ%sの全てのイベントは削除され、ファイルもので置き換えました。" +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." +msgstr "" msgid "All requested changes were made." msgstr "全ての要請された変更は実行されました。" @@ -114,9 +113,9 @@ msgstr "カレンダーが見つかりません" msgid "Calendar Users" msgstr "カレンダー利用者" -#, fuzzy -msgid "Calendar" -msgstr "カレンダー利用者" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." +msgstr "" msgid "Can read from" msgstr "読み取り可能" @@ -153,18 +152,23 @@ msgstr "共有タイプの削除を確認" msgid "Confirm Deletion of the Relationship Type" msgstr "共有タイプの削除を確認" +#, fuzzy +msgid "Confirm Deletion of the User" +msgstr "共有タイプの削除を確認" + msgid "Confirm the new password." msgstr "新規パスワードの確認" msgid "Confirm" msgstr "確認" +#, fuzzy +msgid "Create Calendar" +msgstr "カレンダー利用者" + msgid "Create" msgstr "作成" -msgid "Created On" -msgstr "作成日時" - msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Server" @@ -186,6 +190,14 @@ msgstr "デフォルト共有が追加されました。" msgid "Delete" msgstr "削除" +#, fuzzy +msgid "Deleting Collection:" +msgstr "共有タイプの削除を確認" + +#, fuzzy +msgid "Deleting User:" +msgstr "削除" + msgid "Directory on the server" msgstr "サーバ上のディレクトリ" @@ -256,6 +268,9 @@ msgstr "予定あり" msgid "Full Name" msgstr "氏名" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "実行!" @@ -295,10 +310,6 @@ msgstr "パスワードを忘れた場合" msgid "If you would like to request access, please e-mail" msgstr "アクセス権が欲しい場合はここへメールしてください:" -#, fuzzy -msgid "Import ICS file to new collection" -msgstr "ICSファイルをインポート" - msgid "Import all .ics files of a directory" msgstr "ディレクトリ下の全ての.icsファイルをインポートする" @@ -377,6 +388,10 @@ msgstr "削除を確認して下さい。" msgid "Please confirm deletion of collection - see below" msgstr "" +#, fuzzy +msgid "Please confirm deletion of user" +msgstr "削除を確認して下さい。" + msgid "Please note the time and advise the administrator of your system." msgstr "時刻を記載してシステム管理者に報告して下さい。" @@ -476,6 +491,9 @@ msgstr "RSCDSをセットアップすr" msgid "Setup" msgstr "セットアップ" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "ヘルプの表示" @@ -503,14 +521,20 @@ msgstr "その共有は使用されています。##RelationshipTypeUsed##を参 msgid "The application program does not understand that request." msgstr "アプリケーションがリクエストを理解できませんでした。" +#, fuzzy +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "icsの保存に使用するパスを設定。'home'で次のような参照になる:/caldav.php/" + msgid "The calendar path contains illegal characters." msgstr "カレンダーパスに不正な文字が使用されています。" msgid "The displayname may only be set on collections or principals." msgstr "表示名はコレクションやプリンシパルにか設定できません。" -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +#, fuzzy +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "ファイル%sはUTF-8でエンコードされていません、詳細はエラーを確認下さい。" msgid "The name this user can log into the system with." @@ -556,7 +580,8 @@ msgstr "更新" msgid "Updated" msgstr "更新済み" -msgid "Upload your .ics calendar in ical format " +#, fuzzy +msgid "Upload a .ics calendar in iCalendar format " msgstr ".icsカレンダーをical形式でアップロードする" msgid "User Details" @@ -571,6 +596,10 @@ msgstr "ユーザのロール" msgid "User Unavailable" msgstr "ユーザは利用できません" +#, fuzzy +msgid "User deleted" +msgstr "ユーザのロール" + msgid "User is active" msgstr "ユーザはアクティブです" @@ -632,9 +661,6 @@ msgstr "このカレンダーの記録を編集出来ません。" msgid "You must log in to use this system." msgstr "このシステムを利用するにはログインしなくてはなりません。" -msgid "Your .ics calendar" -msgstr "あたなの.icsカレンダー" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "ユーザ%sのイベントは全て削除され、ファイル%sの物で置き換えました。" @@ -686,9 +712,6 @@ msgstr "アシスタントである" msgid "path to store your ics" msgstr "icsを保存するパス" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "icsの保存に使用するパスを設定。例)home で caldav.php/me/home/になる" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "ファイル%sはUTF-8でエンコードされていません、詳細はエラーを確認して下さい" @@ -699,6 +722,25 @@ msgstr "与えられたユーザ名とパスワードでログインして下さ msgid "This operation does the following:
                • check valid users in LDAP directory
                • " msgstr "この操作は次のことをします:
                  • LDAPディレクトリで有効なユーザを確認
                  • " +#~ msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" +#~ msgstr "注意:このパスに現存する全てのイベントはicsファイルの挿入に伴い削除されます。" + +#~ msgid "All events of user %s were deleted and replaced by those from the file." +#~ msgstr "ユーザ%sの全てのイベントは削除され、ファイルもので置き換えました。" + +#~ msgid "Created On" +#~ msgstr "作成日時" + +#, fuzzy +#~ msgid "Import ICS file to new collection" +#~ msgstr "ICSファイルをインポート" + +#~ msgid "Your .ics calendar" +#~ msgstr "あたなの.icsカレンダー" + +#~ msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" +#~ msgstr "icsの保存に使用するパスを設定。例)home で caldav.php/me/home/になる" + #~ msgid "Really Simple CalDAV Store" #~ msgstr "Really Simple CalDAV Store" diff --git a/po/messages.pot b/po/messages.pot index 95e4ca9c..7a733b41 100644 --- a/po/messages.pot +++ b/po/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,11 +41,6 @@ msgstr "" msgid "--- select a user, group or resource ---" msgstr "" -msgid "" -"WARNING: all events in this path will be deleted before inserting all of " -"the ics file" -msgstr "" - msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" @@ -85,8 +80,10 @@ msgstr "" msgid "Administers" msgstr "" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." msgstr "" msgid "All requested changes were made." @@ -116,7 +113,8 @@ msgstr "" msgid "Calendar Users" msgstr "" -msgid "Calendar" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." msgstr "" msgid "Can read from" @@ -152,16 +150,19 @@ msgstr "" msgid "Confirm Deletion of the Relationship Type" msgstr "" +msgid "Confirm Deletion of the User" +msgstr "" + msgid "Confirm the new password." msgstr "" msgid "Confirm" msgstr "" -msgid "Create" +msgid "Create Calendar" msgstr "" -msgid "Created On" +msgid "Create" msgstr "" msgid "DAViCal CalDAV Server" @@ -185,6 +186,12 @@ msgstr "" msgid "Delete" msgstr "" +msgid "Deleting Collection:" +msgstr "" + +msgid "Deleting User:" +msgstr "" + msgid "Directory on the server" msgstr "" @@ -256,6 +263,9 @@ msgstr "" msgid "Full Name" msgstr "" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "" @@ -295,9 +305,6 @@ msgstr "" msgid "If you would like to request access, please e-mail" msgstr "" -msgid "Import ICS file to new collection" -msgstr "" - msgid "Import all .ics files of a directory" msgstr "" @@ -376,6 +383,9 @@ msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" +msgid "Please confirm deletion of user" +msgstr "" + msgid "Please note the time and advise the administrator of your system." msgstr "" @@ -480,6 +490,9 @@ msgstr "" msgid "Setup" msgstr "" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "" @@ -507,15 +520,18 @@ msgstr "" msgid "The application program does not understand that request." msgstr "" +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part " +"of \"/caldav.php/username/home/\"" +msgstr "" + msgid "The calendar path contains illegal characters." msgstr "" msgid "The displayname may only be set on collections or principals." msgstr "" -#, c-format -msgid "" -"The file %s is not UTF-8 encoded, please check the error for more details." +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The name this user can log into the system with." @@ -560,7 +576,7 @@ msgstr "" msgid "Updated" msgstr "" -msgid "Upload your .ics calendar in ical format " +msgid "Upload a .ics calendar in iCalendar format " msgstr "" msgid "User Details" @@ -575,6 +591,9 @@ msgstr "" msgid "User Unavailable" msgstr "" +msgid "User deleted" +msgstr "" + msgid "User is active" msgstr "" @@ -636,9 +655,6 @@ msgstr "" msgid "You must log in to use this system." msgstr "" -msgid "Your .ics calendar" -msgstr "" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "" @@ -692,10 +708,6 @@ msgstr "" msgid "path to store your ics" msgstr "" -msgid "" -"set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "" diff --git a/po/nl.po b/po/nl.po index 28dd2265..1145255a 100644 --- a/po/nl.po +++ b/po/nl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Eelco Maljaars \n" "Language-Team: nl_NL \n" @@ -41,9 +41,6 @@ msgstr "--- selekteer een gebruiker of resource ---" msgid "--- select a user, group or resource ---" msgstr "--- selekteer een gebruiker, groep of resource ---" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "" @@ -83,8 +80,10 @@ msgstr "Beheer" msgid "Administers" msgstr "Beheerdersgroep" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." msgstr "" msgid "All requested changes were made." @@ -115,9 +114,9 @@ msgstr "" msgid "Calendar Users" msgstr "Agenda gebruikers" -#, fuzzy -msgid "Calendar" -msgstr "Agenda gebruikers" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." +msgstr "" msgid "Can read from" msgstr "" @@ -154,18 +153,23 @@ msgstr "Bevestig verwijderen relatie soort" msgid "Confirm Deletion of the Relationship Type" msgstr "Bevestig verwijderen relatie soort" +#, fuzzy +msgid "Confirm Deletion of the User" +msgstr "Bevestig verwijderen relatie soort" + msgid "Confirm the new password." msgstr "Bevestig het nieuwe wachtwoord" msgid "Confirm" msgstr "Bevestig" +#, fuzzy +msgid "Create Calendar" +msgstr "Agenda gebruikers" + msgid "Create" msgstr "Maak" -msgid "Created On" -msgstr "Gemaakt op" - msgid "DAViCal CalDAV Server" msgstr "" @@ -190,6 +194,14 @@ msgstr "Relatie toegevoegd" msgid "Delete" msgstr "Verwijder" +#, fuzzy +msgid "Deleting Collection:" +msgstr "Bevestig verwijderen relatie soort" + +#, fuzzy +msgid "Deleting User:" +msgstr "Verwijder" + msgid "Directory on the server" msgstr "" @@ -260,6 +272,9 @@ msgstr "" msgid "Full Name" msgstr "Volledige naam" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "Ga!" @@ -299,9 +314,6 @@ msgstr "Indien je je wachtwoord vergeten bent dan" msgid "If you would like to request access, please e-mail" msgstr "Indien je toegang wilt aanvragen, e-mail je" -msgid "Import ICS file to new collection" -msgstr "" - msgid "Import all .ics files of a directory" msgstr "" @@ -381,6 +393,10 @@ msgstr "Bevestig verwijderen alsjeblieft" msgid "Please confirm deletion of collection - see below" msgstr "" +#, fuzzy +msgid "Please confirm deletion of user" +msgstr "Bevestig verwijderen alsjeblieft" + msgid "Please note the time and advise the administrator of your system." msgstr "Noteer de tijd en breng de beheerder van jou systeem op de hoogte" @@ -481,6 +497,9 @@ msgstr "" msgid "Setup" msgstr "" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "Laat hulp zien over" @@ -508,14 +527,18 @@ msgstr "Die relatiesoort wordt gebruikt, zie ##RelationshipTypeUsed##" msgid "The application program does not understand that request." msgstr "De applicatie snapt dat verzoek niet." +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "" + msgid "The calendar path contains illegal characters." msgstr "Het pad naar de agenda bevat niet toegestane tekens." msgid "The displayname may only be set on collections or principals." msgstr "" -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The name this user can log into the system with." @@ -561,7 +584,7 @@ msgstr "Bijwerken" msgid "Updated" msgstr "Bijgewerkt" -msgid "Upload your .ics calendar in ical format " +msgid "Upload a .ics calendar in iCalendar format " msgstr "" msgid "User Details" @@ -576,6 +599,10 @@ msgstr "Gebruikersrollen" msgid "User Unavailable" msgstr "Gebruiker niet beschikbaar" +#, fuzzy +msgid "User deleted" +msgstr "Gebruikersrollen" + msgid "User is active" msgstr "Gebruiker is geaktiveerd" @@ -638,10 +665,6 @@ msgstr "Je mag geen items aanpassen in deze agenda" msgid "You must log in to use this system." msgstr "Je moet inloggen om dit systeem te gebruiken" -#, fuzzy -msgid "Your .ics calendar" -msgstr "Je mag die agenda niet benaderen" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "" @@ -691,9 +714,6 @@ msgstr "Wordt ondersteund door" msgid "path to store your ics" msgstr "" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "" @@ -704,6 +724,13 @@ msgstr "je moet inloggen met de gebruikersnaam en het wachtwoord die je zijn toe msgid "This operation does the following:
                    • check valid users in LDAP directory
                    • " msgstr "" +#~ msgid "Created On" +#~ msgstr "Gemaakt op" + +#, fuzzy +#~ msgid "Your .ics calendar" +#~ msgstr "Je mag die agenda niet benaderen" + #~ msgid "Really Simple CalDAV Store" #~ msgstr "Erg Simpele CalDAV Opslag" diff --git a/po/pl.po b/po/pl.po index 95816505..430913db 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: rscds-messages\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: 2007-03-31 00:24+0200\n" "Last-Translator: Rafal Slubowski \n" "Language-Team: polski \n" @@ -43,9 +43,6 @@ msgstr "Wybierz użytkownika lub zasób" msgid "--- select a user, group or resource ---" msgstr "Wybierz użytkownika, grupę lub zasób" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "" @@ -84,8 +81,10 @@ msgstr "Administrator" msgid "Administers" msgstr "Administruje" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." msgstr "" msgid "All requested changes were made." @@ -116,9 +115,9 @@ msgstr "Zasób kalendarza nie został znaleziony" msgid "Calendar Users" msgstr "Użytkownicy kalendarza" -#, fuzzy -msgid "Calendar" -msgstr "Użytkownicy kalendarza" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." +msgstr "" msgid "Can read from" msgstr "Może czytać z" @@ -155,18 +154,23 @@ msgstr "Potwierdź usunięcie typu zależności" msgid "Confirm Deletion of the Relationship Type" msgstr "Potwierdź usunięcie typu zależności" +#, fuzzy +msgid "Confirm Deletion of the User" +msgstr "Potwierdź usunięcie typu zależności" + msgid "Confirm the new password." msgstr "Potwierdź nowe hasło" msgid "Confirm" msgstr "Potwierdź" +#, fuzzy +msgid "Create Calendar" +msgstr "Użytkownicy kalendarza" + msgid "Create" msgstr "Utwórz" -msgid "Created On" -msgstr "Utworzono w" - msgid "DAViCal CalDAV Server" msgstr "" @@ -189,6 +193,14 @@ msgstr "Zależność została dodana." msgid "Delete" msgstr "Usuń" +#, fuzzy +msgid "Deleting Collection:" +msgstr "Potwierdź usunięcie typu zależności" + +#, fuzzy +msgid "Deleting User:" +msgstr "Usuń" + msgid "Directory on the server" msgstr "" @@ -258,6 +270,9 @@ msgstr "" msgid "Full Name" msgstr "Imię i nazwisko" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "Uruchom!" @@ -297,9 +312,6 @@ msgstr "Jeśli zapomniałeś hasła, " msgid "If you would like to request access, please e-mail" msgstr "Jeśli chcesz poprosić o dostęp, wyślij e-mail do" -msgid "Import ICS file to new collection" -msgstr "" - msgid "Import all .ics files of a directory" msgstr "" @@ -379,6 +391,10 @@ msgstr "Proszę potwierdzić usunięcie" msgid "Please confirm deletion of collection - see below" msgstr "" +#, fuzzy +msgid "Please confirm deletion of user" +msgstr "Proszę potwierdzić usunięcie" + msgid "Please note the time and advise the administrator of your system." msgstr "" @@ -478,6 +494,9 @@ msgstr "" msgid "Setup" msgstr "" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "Pokaż pomoc na temat" @@ -506,14 +525,18 @@ msgstr "Ten typ zależności jest używany. Zobacz ##RelationshipTypeUsed##" msgid "The application program does not understand that request." msgstr "Aplikacja nie rozumie tego żądania." +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "" + msgid "The calendar path contains illegal characters." msgstr "Ścieżka kalendarza zawiera nieakceptowalne znaki." msgid "The displayname may only be set on collections or principals." msgstr "" -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The name this user can log into the system with." @@ -559,7 +582,7 @@ msgstr "Aktualizuj" msgid "Updated" msgstr "Zaktualizowano" -msgid "Upload your .ics calendar in ical format " +msgid "Upload a .ics calendar in iCalendar format " msgstr "" msgid "User Details" @@ -574,6 +597,10 @@ msgstr "Role użytkownika" msgid "User Unavailable" msgstr "Użytkownik niedostępny" +#, fuzzy +msgid "User deleted" +msgstr "Role użytkownika" + msgid "User is active" msgstr "Użytkownik aktywny" @@ -636,10 +663,6 @@ msgstr "Nie możesz modyfikować zdarzeń w tym kalendarzu." msgid "You must log in to use this system." msgstr "Musisz się zalogować." -#, fuzzy -msgid "Your .ics calendar" -msgstr "Nie masz dostępu do tego kalendarza" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "" @@ -688,9 +711,6 @@ msgstr "jest asystentem" msgid "path to store your ics" msgstr "" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "" @@ -701,6 +721,13 @@ msgstr "powinieneś zalogować się swoją nazwą użytkownika i hasłem." msgid "This operation does the following:
                      • check valid users in LDAP directory
                      • " msgstr "" +#~ msgid "Created On" +#~ msgstr "Utworzono w" + +#, fuzzy +#~ msgid "Your .ics calendar" +#~ msgstr "Nie masz dostępu do tego kalendarza" + #~ msgid "Really Simple CalDAV Store" #~ msgstr "Bardzo prosta składnica CalDAV" diff --git a/po/ru.po b/po/ru.po index 3be0f62b..d8572613 100644 --- a/po/ru.po +++ b/po/ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: rscds 0.3.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-06-22 14:25+1200\n" +"POT-Creation-Date: 2009-10-06 09:25-0700\n" "PO-Revision-Date: 2006-11-13 23:07+0500\n" "Last-Translator: Nick Khazov \n" "Language-Team: LANGUAGE \n" @@ -41,9 +41,6 @@ msgstr "" msgid "--- select a user, group or resource ---" msgstr "" -msgid "WARNING: all events in this path will be deleted before inserting all of the ics file" -msgstr "" - msgid "WARNING: all events in this path will be deleted before inserting allof the ics file" msgstr "" @@ -81,8 +78,10 @@ msgstr "" msgid "Administers" msgstr "" -#, c-format -msgid "All events of user %s were deleted and replaced by those from the file." +msgid "All collection data will be unrecoverably deleted." +msgstr "" + +msgid "All of the user's calendars and events will be unrecoverably deleted." msgstr "" msgid "All requested changes were made." @@ -112,7 +111,8 @@ msgstr "" msgid "Calendar Users" msgstr "" -msgid "Calendar" +#, c-format +msgid "Calendar \"%s\" for user \"%s\" was created." msgstr "" msgid "Can read from" @@ -152,6 +152,9 @@ msgstr "" msgid "Confirm Deletion of the Relationship Type" msgstr "" +msgid "Confirm Deletion of the User" +msgstr "" + #, fuzzy msgid "Confirm the new password." msgstr "Неверное имя пользователя или пароль." @@ -160,11 +163,11 @@ msgstr "Неверное имя пользователя или пароль." msgid "Confirm" msgstr "Подаренные" -msgid "Create" +#, fuzzy +msgid "Create Calendar" msgstr "Создать" -#, fuzzy -msgid "Created On" +msgid "Create" msgstr "Создать" msgid "DAViCal CalDAV Server" @@ -189,6 +192,13 @@ msgstr "Связь добавлена." msgid "Delete" msgstr "Удалить" +msgid "Deleting Collection:" +msgstr "" + +#, fuzzy +msgid "Deleting User:" +msgstr "Удалить" + msgid "Directory on the server" msgstr "" @@ -261,6 +271,9 @@ msgstr "" msgid "Full Name" msgstr "" +msgid "GET requests are only handled on calendar collections." +msgstr "" + msgid "GO!" msgstr "" @@ -301,9 +314,6 @@ msgstr "" msgid "If you would like to request access, please e-mail" msgstr "Если вы хотите получить доступ, пожалуйста, пошлите электронное письмо" -msgid "Import ICS file to new collection" -msgstr "" - msgid "Import all .ics files of a directory" msgstr "" @@ -385,6 +395,9 @@ msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" +msgid "Please confirm deletion of user" +msgstr "" + msgid "Please note the time and advise the administrator of your system." msgstr "" @@ -487,6 +500,9 @@ msgstr "" msgid "Setup" msgstr "" +msgid "Should this calendar be readable without authenticating?" +msgstr "" + msgid "Show help on" msgstr "Показывать помощь в" @@ -514,14 +530,18 @@ msgstr "" msgid "The application program does not understand that request." msgstr "" +msgid "" +"The calendar name part of the path to store your ics. E.g. the \"home\" part of \"/caldav.php/username/" +"home/\"" +msgstr "" + msgid "The calendar path contains illegal characters." msgstr "" msgid "The displayname may only be set on collections or principals." msgstr "" -#, c-format -msgid "The file %s is not UTF-8 encoded, please check the error for more details." +msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The name this user can log into the system with." @@ -567,7 +587,7 @@ msgstr "Обновить" msgid "Updated" msgstr "Обновить" -msgid "Upload your .ics calendar in ical format " +msgid "Upload a .ics calendar in iCalendar format " msgstr "" #, fuzzy @@ -584,6 +604,10 @@ msgstr "Пользователи" msgid "User Unavailable" msgstr "" +#, fuzzy +msgid "User deleted" +msgstr "Пользователи" + msgid "User is active" msgstr "" @@ -648,9 +672,6 @@ msgstr "" msgid "You must log in to use this system." msgstr "Вы должны войти в систему, чтобы использовать ее." -msgid "Your .ics calendar" -msgstr "" - #, c-format msgid "all events of user %s were deleted and replaced by those from file %s" msgstr "" @@ -699,9 +720,6 @@ msgstr "" msgid "path to store your ics" msgstr "" -msgid "set the path to store your ics ex:home if you get it by caldav.php/me/home/" -msgstr "" - #, c-format msgid "the file %s is not UTF-8 encoded, please check error for more details" msgstr "" diff --git a/testing/README.regression_tests b/testing/README.regression_tests index 628ca97b..6a7293fe 100644 --- a/testing/README.regression_tests +++ b/testing/README.regression_tests @@ -5,87 +5,20 @@ At present these regression tests are basically written to work in my own environment. While I am, of course, happy to see patches that make them more generic they are still very much a work in progress. -Mulberry -======== -At present the most demanding client to support is Mulberry, so the first -set of regression tests imitate Mulberry taking RSCDS through it's paces: +In order to run them in your environment you will need to ensure both +the Webserver and Database server run in the 'Pacific/Auckland' timezone +since the regression testing puts a number of events into the database +in a floating timezone, and some responses which are affected by these +events are reported in UTC (mostly freebusy results). - 1. Initial OPTIONS request at the root - 2. Initial PROPFIND request at the root with Depth 1 - 3. Second PROPFIND request at the second level - 4. MKCALENDAR request to create a calendar at /user1/home/ - 5. Third PROPFIND request duplicating the Second one (but finding a calendar now). - 6. Fourth PROPFIND request solely looking for the new calendar, requesting 'getetag' - 7. Not that Mulberry would let us do this, but we try to MKCALENDAR again at /user1/home/ to check for the error we expect. - 10. PUT our first event into the calendar. - 11. PUT the same event a second time, which should not give an error, but should respond with 'Replaced' rather than 'Created'. - 12. PUT a second event into the calendar. - 13. PROPFIND which should now show us both events. - 14. PUT an update to that second event. - 15. PROPFIND which should show us both events, with changes. - 16. MKCALENDAR somewhere else that we have rights to do so. - 17. MKCALENDAR somewhere else where we do not have rights, and which should fail. - 18. PUT into the other calendar we have just created. - 19. OPTIONS request against an illegal path, which should fail. - 20. DELETE the first appointment we created, but with an If-Match header that will cause it to return a 412 Precondition Failed. - 21. DELETE the first appointment, but this time with a correct If-Match header, it should succeed. +On a Debian system you can do this by adding the line: + export TZ=Pacific/Auckland -Evolution -========= -Evolution does things quite differently to Mulberry, only doing one OPTIONS request to confirm that -calendaring support is available, and then going for REPORT and GET. It maintains an internal cache -so does not GET events listed in a REPORT unless they are new or changed. +to /etc/apache2/envvars, and the line: - 100. Initial unauthenticated OPTIONS request. - 101. Initial authenticated OPTIONS request. - 102. Initial REPORT request. - 103. GET the second event that Mulberry put there earlier - 104. PUT an event in the way style Evolution uses. - 105. REPORT which should show both the Mulberry and the Evolution events. - 106. GET the Evolution event we have added. + TZ = 'Pacific/Auckland' +to /etc/postgresql/8.4/main/environment -Mozilla Calendar -================ -Similar to Evolution, Mozilla Calendar primarily only does OPTIONS/REPORT/GET/PUT/DELETE however -it does not have a cache, so its REPORT requests (a) request data to be included and (b) apply -a date range in their response. - - 200. Initial unauthenticated OPTIONS request. - 201. Initial authenticated OPTIONS request. - 202. Initial unauthenticated REPORT request. - 203. Initial authenticated REPORT request for events from 9th October to 9th December which should find one Mulberry and one Evolution event. - 204. REPORT request against the second calendar created by Mulberry which should only find one Mulberry event. - 205. PROPFIND request which only 0.4 and later versions of Mozilla Calendar will do (see bug 355270). - 206. PUT a recurring event. - 207. REPORT on a period which will only include a subsequent instance of the recurring event. - 208. REPORT on a period after the end of the recurring event, which will return an empty result. - - -Chandler -======== -Support for Chandler is still under development. It appears to operate somewhat similarly to -Mulberry, although apparently without support for MKCALENDAR at this stage, and it also tries -to use more basic DAV functionality than other clients. Basic operation appears to be OK, -although it appears to write some proprietary information into a ".chandler" sub-collection. - - 300. Initial unauthenticated OPTIONS request. - 301. Initial unauthenticated HEAD request. - 302. Initial authenticated OPTIONS request. - 303. Initial PROPFIND request. - 304. Subsequent PROPFIND request which endeavours to retrieve permissions. - 305. Another OPTIONS request looking at the ".chandler" subcollection. - ---->> To Do - Lots of things, including GET, PUT, DELETE and encouraging Chandler to create the .chandler - collection in order to see how it does that. At the end of these regression tests so far, - 'Chandler' has still not discovered what events exist on the server, but in reality it does - successfully do so. - - -Your Favourite Client Here -========================== -I would like to have more client software available to test RSCDS against, but so far it's -just these ones. If you want to point me at more free software, or send me free copies of -proprietary software, then I will add it to the list as well as make RSCDS work with it. +You will also need to edit regression.conf as indicated in that file. diff --git a/testing/normalise_result b/testing/normalise_result index d3387756..03399b6f 100755 --- a/testing/normalise_result +++ b/testing/normalise_result @@ -21,6 +21,10 @@ while( ) { $_ = ""; }; + /^Vary: / && do { + $_ = ""; + }; + /^X-(DAViCal|RSCDS)-Version: (DAViCal|RSCDS)\/[0-9.]+\.[0-9.]+\.[0-9.]+; DB\/[0-9.]+\.[0-9.]+\.[0-9.]+/ && do { $_ = ""; }; diff --git a/testing/run_regressions.sh b/testing/run_regressions.sh index c14e1da4..043b83b8 100755 --- a/testing/run_regressions.sh +++ b/testing/run_regressions.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Run the regression tests and display differences # diff --git a/testing/tests/regression-suite/013-Mulberry-PROPFIND-5.result b/testing/tests/regression-suite/013-Mulberry-PROPFIND-5.result index 89d82617..b4e51c01 100644 --- a/testing/tests/regression-suite/013-Mulberry-PROPFIND-5.result +++ b/testing/tests/regression-suite/013-Mulberry-PROPFIND-5.result @@ -1,7 +1,7 @@ HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule -ETag: "d316148bfdf4f6d2cb5c4df178609e23" +ETag: "5747e43a52649b3441d9f8cff66c0e8f" Content-Length: 1083 Content-Type: text/xml; charset="utf-8" @@ -22,17 +22,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK - - /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics - - - 705 - text/calendar - - - HTTP/1.1 200 OK - - /caldav.php/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics @@ -44,4 +33,15 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK + + /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics + + + 705 + text/calendar + + + HTTP/1.1 200 OK + + diff --git a/testing/tests/regression-suite/015-Mulberry-PROPFIND-6.result b/testing/tests/regression-suite/015-Mulberry-PROPFIND-6.result index d4ef2cf8..ffb18b9b 100644 --- a/testing/tests/regression-suite/015-Mulberry-PROPFIND-6.result +++ b/testing/tests/regression-suite/015-Mulberry-PROPFIND-6.result @@ -1,7 +1,7 @@ HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule -ETag: "c9ccb2ceab9d94e563d624971bb5bdfe" +ETag: "48a3d4c6e9074f82e775ae6604591d2c" Content-Length: 1083 Content-Type: text/xml; charset="utf-8" @@ -22,17 +22,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK - - /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics - - - 747 - text/calendar - - - HTTP/1.1 200 OK - - /caldav.php/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics @@ -44,4 +33,15 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK + + /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics + + + 747 + text/calendar + + + HTTP/1.1 200 OK + + diff --git a/testing/tests/regression-suite/099-REPORT-sync-initial.result b/testing/tests/regression-suite/099-REPORT-sync-initial.result new file mode 100644 index 00000000..efdae12f --- /dev/null +++ b/testing/tests/regression-suite/099-REPORT-sync-initial.result @@ -0,0 +1,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 +ETag: "d668266633188d6d2690a2eb491bba0c" +Content-Length: 404 +Content-Type: text/xml; charset="utf-8" + + + + + /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics + HTTP/1.1 201 Created + + + "2c32a2f8aba853654eb17fe037a4db4d" + + HTTP/1.1 200 OK + + + 1 + diff --git a/testing/tests/regression-suite/099-REPORT-sync-initial.test b/testing/tests/regression-suite/099-REPORT-sync-initial.test new file mode 100644 index 00000000..e161d7bd --- /dev/null +++ b/testing/tests/regression-suite/099-REPORT-sync-initial.test @@ -0,0 +1,19 @@ +# +# Check for support of REPORT sync-collection with no sync-token +# +TYPE=REPORT +URL=http://mycaldav/caldav.php/user1/home/ +HEADER=User-agent: sync-collection initial REPORT +HEADER=Content-type: text/xml +HEAD + +BEGINDATA + + + + + + + +ENDDATA + diff --git a/testing/tests/regression-suite/103-Evo-GET-1.result b/testing/tests/regression-suite/103-Evo-GET-1.result index dc62813f..c7677113 100644 --- a/testing/tests/regression-suite/103-Evo-GET-1.result +++ b/testing/tests/regression-suite/103-Evo-GET-1.result @@ -3,7 +3,7 @@ Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule Etag: "2c32a2f8aba853654eb17fe037a4db4d" Content-Length: 747 -Content-Type: text/calendar +Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR CALSCALE:GREGORIAN diff --git a/testing/tests/regression-suite/106-Evo-GET-1.result b/testing/tests/regression-suite/106-Evo-GET-1.result index e4566baf..e266e3b8 100644 --- a/testing/tests/regression-suite/106-Evo-GET-1.result +++ b/testing/tests/regression-suite/106-Evo-GET-1.result @@ -3,7 +3,7 @@ Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule Etag: "c3658901fd4689d4a1e1d6f08601ef4f" Content-Length: 1059 -Content-Type: text/calendar +Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR CALSCALE:GREGORIAN diff --git a/testing/tests/regression-suite/108-Evo-REPORT-1.test b/testing/tests/regression-suite/108-Evo-REPORT-1.test index bbda3ac4..a1a24e83 100644 --- a/testing/tests/regression-suite/108-Evo-REPORT-1.test +++ b/testing/tests/regression-suite/108-Evo-REPORT-1.test @@ -2,7 +2,7 @@ # Do a REPORT request (test operation in subdirectory of unrelated site) # TYPE=REPORT -URL=http://myempty/davical/caldav.php/user1/home/ +URL=http://alternate.host/davical/caldav.php/user1/home/ HEAD HEADER=Depth: 1 HEADER=User-Agent: Evolution/1.8.1 diff --git a/testing/tests/regression-suite/230-Moz-REPORT-Tasks-Completed.test b/testing/tests/regression-suite/230-Moz-REPORT-Tasks-Completed.test index 0ed6e97b..41353258 100644 --- a/testing/tests/regression-suite/230-Moz-REPORT-Tasks-Completed.test +++ b/testing/tests/regression-suite/230-Moz-REPORT-Tasks-Completed.test @@ -2,7 +2,7 @@ # Do a REPORT request (test operation in subdirectory of unrelated site) # TYPE=REPORT -URL=http://myempty/davical/caldav.php/user1/home/ +URL=http://alternate.host/davical/caldav.php/user1/home/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 diff --git a/testing/tests/regression-suite/231-Moz-REPORT-All-Tasks.test b/testing/tests/regression-suite/231-Moz-REPORT-All-Tasks.test index 773e564d..8f030cd7 100644 --- a/testing/tests/regression-suite/231-Moz-REPORT-All-Tasks.test +++ b/testing/tests/regression-suite/231-Moz-REPORT-All-Tasks.test @@ -2,7 +2,7 @@ # Do a REPORT request (test operation in subdirectory of unrelated site) # TYPE=REPORT -URL=http://myempty/davical/caldav.php/user1/home/ +URL=http://alternate.host/davical/caldav.php/user1/home/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 diff --git a/testing/tests/regression-suite/240-Moz-PROPFIND-sub.test b/testing/tests/regression-suite/240-Moz-PROPFIND-sub.test index 11a48d4e..cea4d27e 100644 --- a/testing/tests/regression-suite/240-Moz-PROPFIND-sub.test +++ b/testing/tests/regression-suite/240-Moz-PROPFIND-sub.test @@ -2,7 +2,7 @@ # Check for PROPFIND for scheduing inbox/outbox # TYPE=PROPFIND -URL=http://myempty/davical/caldav.php/user1/ +URL=http://alternate.host/davical/caldav.php/user1/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 diff --git a/testing/tests/regression-suite/309-Chandler-PROPFIND-4.result b/testing/tests/regression-suite/309-Chandler-PROPFIND-4.result index 5a564bef..a9db0084 100644 --- a/testing/tests/regression-suite/309-Chandler-PROPFIND-4.result +++ b/testing/tests/regression-suite/309-Chandler-PROPFIND-4.result @@ -1,7 +1,7 @@ HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule -ETag: "cc05bebfa735e4f0ece20d0881208947" +ETag: "943586f4f818ccaff360f46d7b8e97e5" Content-Length: 4267 Content-Type: text/xml; charset="utf-8" @@ -23,23 +23,12 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics + /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics - Due 7/8/7 16:30, completed + Lunch with David - "00ad5eb1eb5507884710b0b66aa5d5c4" - - HTTP/1.1 200 OK - - - - /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics - - - Private Event - - "5def8ae2b20893a1c7f4dbaeb008f2f1" + "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK @@ -55,28 +44,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK - - /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics - - - Incomplete, uncancelled - - "509b0f0d8a3363379f9f5727f5dd74a0" - - HTTP/1.1 200 OK - - - - /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics - - - Lunch with David - - "2c32a2f8aba853654eb17fe037a4db4d" - - HTTP/1.1 200 OK - - /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics @@ -88,17 +55,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK - - /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics - - - 50% Complete, uncancelled - - "cb3d9dc3e8c157f53eba3ea0e1e0f146" - - HTTP/1.1 200 OK - - /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics @@ -110,6 +66,61 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK + + /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics + + + Private Event + + "5def8ae2b20893a1c7f4dbaeb008f2f1" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics + + + Tentative Event + + "ac90acd649c25070b1a2a17fb31a105a" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics + + + Incomplete, uncancelled + + "509b0f0d8a3363379f9f5727f5dd74a0" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics + + + 50% Complete, uncancelled + + "cb3d9dc3e8c157f53eba3ea0e1e0f146" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics + + + Due 7/8/7 16:30, completed + + "00ad5eb1eb5507884710b0b66aa5d5c4" + + HTTP/1.1 200 OK + + /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics @@ -121,17 +132,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK - - /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics - - - Release 0.9.3 - - "8f581a053df6d833254756dfd7553d37" - - HTTP/1.1 200 OK - - /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics @@ -144,12 +144,12 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics + /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics - Tentative Event + Release 0.9.3 - "ac90acd649c25070b1a2a17fb31a105a" + "8f581a053df6d833254756dfd7553d37" HTTP/1.1 200 OK diff --git a/testing/tests/regression-suite/504-iCal-PROPFIND.result b/testing/tests/regression-suite/504-iCal-PROPFIND.result index 77ea7e6a..4368dd5a 100644 --- a/testing/tests/regression-suite/504-iCal-PROPFIND.result +++ b/testing/tests/regression-suite/504-iCal-PROPFIND.result @@ -1,7 +1,7 @@ HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule -ETag: "a49a7e4a5017a52585a5fe3a3659542e" +ETag: "9953cc10c8f89c379815cd05912cf774" Content-Length: 4135 Content-Type: text/xml; charset="utf-8" @@ -22,21 +22,11 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics + /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics - "00ad5eb1eb5507884710b0b66aa5d5c4" - - HTTP/1.1 200 OK - - - - /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics - - - - "5def8ae2b20893a1c7f4dbaeb008f2f1" + "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK @@ -51,26 +41,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK - - /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics - - - - "509b0f0d8a3363379f9f5727f5dd74a0" - - HTTP/1.1 200 OK - - - - /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics - - - - "2c32a2f8aba853654eb17fe037a4db4d" - - HTTP/1.1 200 OK - - /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics @@ -81,26 +51,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK - - /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics - - - - "0d7a68984bf525342d22b8924a57e8e2" - - HTTP/1.1 200 OK - - - - /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics - - - - "cb3d9dc3e8c157f53eba3ea0e1e0f146" - - HTTP/1.1 200 OK - - /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics @@ -111,6 +61,56 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK + + /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics + + + + "5def8ae2b20893a1c7f4dbaeb008f2f1" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics + + + + "ac90acd649c25070b1a2a17fb31a105a" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics + + + + "509b0f0d8a3363379f9f5727f5dd74a0" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics + + + + "cb3d9dc3e8c157f53eba3ea0e1e0f146" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics + + + + "00ad5eb1eb5507884710b0b66aa5d5c4" + + HTTP/1.1 200 OK + + /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics @@ -121,26 +121,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 200 OK - - /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics - - - - "421abf7e4848d2fecbf64217ed205d4b" - - HTTP/1.1 200 OK - - - - /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics - - - - "8f581a053df6d833254756dfd7553d37" - - HTTP/1.1 200 OK - - /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics @@ -152,11 +132,31 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics + /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics - "ac90acd649c25070b1a2a17fb31a105a" + "8f581a053df6d833254756dfd7553d37" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics + + + + "0d7a68984bf525342d22b8924a57e8e2" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics + + + + "421abf7e4848d2fecbf64217ed205d4b" HTTP/1.1 200 OK diff --git a/testing/tests/regression-suite/598-REPORT-sync-initial.result b/testing/tests/regression-suite/598-REPORT-sync-initial.result new file mode 100644 index 00000000..704c1584 --- /dev/null +++ b/testing/tests/regression-suite/598-REPORT-sync-initial.result @@ -0,0 +1,161 @@ +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 +ETag: "7ab7cf2174a67bf4fc26271956be7d90" +Content-Length: 4528 +Content-Type: text/xml; charset="utf-8" + + + + + /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics + HTTP/1.1 201 Created + + + "5f050eca5480bbebbe9428222570913d" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics + HTTP/1.1 201 Created + + + "421abf7e4848d2fecbf64217ed205d4b" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics + HTTP/1.1 201 Created + + + "0d7a68984bf525342d22b8924a57e8e2" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics + HTTP/1.1 201 Created + + + "8f581a053df6d833254756dfd7553d37" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics + HTTP/1.1 201 Created + + + "e8060931f30c1798ac58ffbe4ec0bffc" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics + HTTP/1.1 201 Created + + + "a2990674708634a311bb98a59865ca50" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics + HTTP/1.1 201 Created + + + "00ad5eb1eb5507884710b0b66aa5d5c4" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics + HTTP/1.1 201 Created + + + "cb3d9dc3e8c157f53eba3ea0e1e0f146" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics + HTTP/1.1 201 Created + + + "509b0f0d8a3363379f9f5727f5dd74a0" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics + HTTP/1.1 201 Created + + + "ac90acd649c25070b1a2a17fb31a105a" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics + HTTP/1.1 201 Created + + + "5def8ae2b20893a1c7f4dbaeb008f2f1" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics + HTTP/1.1 201 Created + + + "08a435c2abaf38f4a50a997343c098a7" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics + HTTP/1.1 201 Created + + + "a1c6404d61190f9574e2bfd69383f144" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/20061101T073004Z.ics + HTTP/1.1 201 Created + + + "c3658901fd4689d4a1e1d6f08601ef4f" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics + HTTP/1.1 201 Created + + + "2c32a2f8aba853654eb17fe037a4db4d" + + HTTP/1.1 200 OK + + + 2 + diff --git a/testing/tests/regression-suite/598-REPORT-sync-initial.test b/testing/tests/regression-suite/598-REPORT-sync-initial.test new file mode 100644 index 00000000..e161d7bd --- /dev/null +++ b/testing/tests/regression-suite/598-REPORT-sync-initial.test @@ -0,0 +1,19 @@ +# +# Check for support of REPORT sync-collection with no sync-token +# +TYPE=REPORT +URL=http://mycaldav/caldav.php/user1/home/ +HEADER=User-agent: sync-collection initial REPORT +HEADER=Content-type: text/xml +HEAD + +BEGINDATA + + + + + + + +ENDDATA + diff --git a/testing/tests/regression-suite/599-REPORT-sync-changed.result b/testing/tests/regression-suite/599-REPORT-sync-changed.result new file mode 100644 index 00000000..24c435c5 --- /dev/null +++ b/testing/tests/regression-suite/599-REPORT-sync-changed.result @@ -0,0 +1,161 @@ +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 +ETag: "1e80e92dfce8e43ed452a56e350b577b" +Content-Length: 4525 +Content-Type: text/xml; charset="utf-8" + + + + + /caldav.php/user1/home/20061101T073004Z.ics + HTTP/1.1 201 Created + + + "c3658901fd4689d4a1e1d6f08601ef4f" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics + HTTP/1.1 201 Created + + + "a1c6404d61190f9574e2bfd69383f144" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics + HTTP/1.1 201 Created + + + "08a435c2abaf38f4a50a997343c098a7" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics + HTTP/1.1 201 Created + + + "5def8ae2b20893a1c7f4dbaeb008f2f1" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics + HTTP/1.1 201 Created + + + "ac90acd649c25070b1a2a17fb31a105a" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics + HTTP/1.1 201 Created + + + "509b0f0d8a3363379f9f5727f5dd74a0" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics + HTTP/1.1 201 Created + + + "cb3d9dc3e8c157f53eba3ea0e1e0f146" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics + HTTP/1.1 201 Created + + + "00ad5eb1eb5507884710b0b66aa5d5c4" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics + HTTP/1.1 201 Created + + + "a2990674708634a311bb98a59865ca50" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics + HTTP/1.1 201 Created + + + "e8060931f30c1798ac58ffbe4ec0bffc" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics + HTTP/1.1 201 Created + + + "8f581a053df6d833254756dfd7553d37" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics + HTTP/1.1 201 Created + + + "0d7a68984bf525342d22b8924a57e8e2" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics + HTTP/1.1 201 Created + + + "421abf7e4848d2fecbf64217ed205d4b" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics + HTTP/1.1 201 Created + + + "5f050eca5480bbebbe9428222570913d" + + HTTP/1.1 200 OK + + + + /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics + HTTP/1.1 200 OK + + + "5f050eca5480bbebbe9428222570913d" + + HTTP/1.1 200 OK + + + 3 + diff --git a/testing/tests/regression-suite/599-REPORT-sync-changed.test b/testing/tests/regression-suite/599-REPORT-sync-changed.test new file mode 100644 index 00000000..9529d479 --- /dev/null +++ b/testing/tests/regression-suite/599-REPORT-sync-changed.test @@ -0,0 +1,19 @@ +# +# Check for support of REPORT sync-collection with no sync-token +# +TYPE=REPORT +URL=http://mycaldav/caldav.php/user1/home/ +HEADER=User-agent: sync-collection changes REPORT +HEADER=Content-type: text/xml +HEAD + +BEGINDATA + + + 1 + + + + +ENDDATA + diff --git a/testing/tests/regression-suite/602-Soho-PROPFIND.result b/testing/tests/regression-suite/602-Soho-PROPFIND.result index 007903f8..48806ce1 100644 --- a/testing/tests/regression-suite/602-Soho-PROPFIND.result +++ b/testing/tests/regression-suite/602-Soho-PROPFIND.result @@ -1,7 +1,7 @@ HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule -ETag: "6d6148f70715665afa09075dff4049a1" +ETag: "4391c4dac4fc275ca25641a267e12291" Transfer-Encoding: chunked Content-Type: text/xml; charset="utf-8" @@ -52,29 +52,7 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics - - - - /caldav.php/user1/ - - - mailto:user1@example.net - /caldav.php/user1/ - - - HTTP/1.1 200 OK - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics + /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics @@ -117,50 +95,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 404 Not Found - - /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics - - - - /caldav.php/user1/ - - - mailto:user1@example.net - /caldav.php/user1/ - - - HTTP/1.1 200 OK - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics - - - - /caldav.php/user1/ - - - mailto:user1@example.net - /caldav.php/user1/ - - - HTTP/1.1 200 OK - - - - - - - HTTP/1.1 404 Not Found - - /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics @@ -183,50 +117,6 @@ Content-Type: text/xml; charset="utf-8" HTTP/1.1 404 Not Found - - /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics - - - - /caldav.php/user1/ - - - mailto:user1@example.net - /caldav.php/user1/ - - - HTTP/1.1 200 OK - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics - - - - /caldav.php/user1/ - - - mailto:user1@example.net - /caldav.php/user1/ - - - HTTP/1.1 200 OK - - - - - - - HTTP/1.1 404 Not Found - - /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics @@ -250,7 +140,95 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics + /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics + + + + /caldav.php/user1/ + + + mailto:user1@example.net + /caldav.php/user1/ + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics + + + + /caldav.php/user1/ + + + mailto:user1@example.net + /caldav.php/user1/ + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics + + + + /caldav.php/user1/ + + + mailto:user1@example.net + /caldav.php/user1/ + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics + + + + /caldav.php/user1/ + + + mailto:user1@example.net + /caldav.php/user1/ + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics @@ -294,7 +272,7 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics + /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics @@ -338,7 +316,7 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics + /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics @@ -360,7 +338,29 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics + /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics + + + + /caldav.php/user1/ + + + mailto:user1@example.net + /caldav.php/user1/ + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics diff --git a/testing/tests/regression-suite/822-Spec-PROPFIND-3.result b/testing/tests/regression-suite/822-Spec-PROPFIND-3.result index f5a0d70f..79261913 100644 --- a/testing/tests/regression-suite/822-Spec-PROPFIND-3.result +++ b/testing/tests/regression-suite/822-Spec-PROPFIND-3.result @@ -39,146 +39,6 @@ HTTP/1.1 404 Not Found - - /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics - - - 961 - text/calendar - Due 7/8/7 16:30, completed - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "00ad5eb1eb5507884710b0b66aa5d5c4" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics - - - 970 - text/calendar - Private Event - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "5def8ae2b20893a1c7f4dbaeb008f2f1" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/20061101T073004Z.ics - - - 1059 - text/calendar - A Meeting - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "c3658901fd4689d4a1e1d6f08601ef4f" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics - - - 415 - text/calendar - Incomplete, uncancelled - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "509b0f0d8a3363379f9f5727f5dd74a0" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics @@ -214,6 +74,41 @@ HTTP/1.1 404 Not Found + + /caldav.php/user1/home/20061101T073004Z.ics + + + 1059 + text/calendar + A Meeting + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "c3658901fd4689d4a1e1d6f08601ef4f" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics @@ -249,76 +144,6 @@ HTTP/1.1 404 Not Found - - /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics - - - 743 - text/calendar - Beer O'Clock - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "0d7a68984bf525342d22b8924a57e8e2" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics - - - 449 - text/calendar - 50% Complete, uncancelled - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "cb3d9dc3e8c157f53eba3ea0e1e0f146" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics @@ -355,191 +180,16 @@ - /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics + /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics - 981 + 970 text/calendar - BBQ @ ML's + Private Event Dow, 01 Jan 2000 00:00:00 GMT Dow, 01 Jan 2000 00:00:00 GMT - "5f050eca5480bbebbe9428222570913d" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics - - - 1001 - text/calendar - A Cancelled Task, with a start and due date - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "a2990674708634a311bb98a59865ca50" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics - - - 302 - text/calendar - Morning Mgmt Mtg - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "421abf7e4848d2fecbf64217ed205d4b" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics - - - 772 - text/calendar - Party all day! - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "165746adbab8bc0c8336a63cc5332ff2" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics - - - 1013 - text/calendar - Release 0.9.3 - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "8f581a053df6d833254756dfd7553d37" - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - - - - - - HTTP/1.1 404 Not Found - - - - /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics - - - 1119 - text/calendar - Morning Meeting - - Dow, 01 Jan 2000 00:00:00 GMT - Dow, 01 Jan 2000 00:00:00 GMT - "e8060931f30c1798ac58ffbe4ec0bffc" + "5def8ae2b20893a1c7f4dbaeb008f2f1" @@ -599,6 +249,356 @@ HTTP/1.1 404 Not Found + + /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics + + + 415 + text/calendar + Incomplete, uncancelled + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "509b0f0d8a3363379f9f5727f5dd74a0" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics + + + 449 + text/calendar + 50% Complete, uncancelled + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "cb3d9dc3e8c157f53eba3ea0e1e0f146" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics + + + 961 + text/calendar + Due 7/8/7 16:30, completed + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "00ad5eb1eb5507884710b0b66aa5d5c4" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics + + + 1001 + text/calendar + A Cancelled Task, with a start and due date + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "a2990674708634a311bb98a59865ca50" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics + + + 1119 + text/calendar + Morning Meeting + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "e8060931f30c1798ac58ffbe4ec0bffc" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics + + + 1013 + text/calendar + Release 0.9.3 + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "8f581a053df6d833254756dfd7553d37" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics + + + 743 + text/calendar + Beer O'Clock + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "0d7a68984bf525342d22b8924a57e8e2" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics + + + 302 + text/calendar + Morning Mgmt Mtg + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "421abf7e4848d2fecbf64217ed205d4b" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics + + + 981 + text/calendar + BBQ @ ML's + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "5f050eca5480bbebbe9428222570913d" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + + + /caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics + + + 772 + text/calendar + Party all day! + + Dow, 01 Jan 2000 00:00:00 GMT + Dow, 01 Jan 2000 00:00:00 GMT + "165746adbab8bc0c8336a63cc5332ff2" + + + + + + + + + + + + + HTTP/1.1 200 OK + + + + + + + + + HTTP/1.1 404 Not Found + + /caldav.php/user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics diff --git a/testing/tests/regression-suite/840-Spec-PROPPATCH-1.result b/testing/tests/regression-suite/840-Spec-PROPPATCH-1.result index af39b60f..b9d78557 100644 --- a/testing/tests/regression-suite/840-Spec-PROPPATCH-1.result +++ b/testing/tests/regression-suite/840-Spec-PROPPATCH-1.result @@ -21,6 +21,18 @@ changed_last_30se: >1< property_name: >http://apple.com/ns/ical/:calendar-color< property_value: >#391B71A0< + changed_by: >10< +changed_last_30se: >1< + dav_name: >/user1/SOHO collection/< + property_name: >com.apple.ical::calendarcolor< + property_value: >#FF8000FF< + + changed_by: >10< +changed_last_30se: >1< + dav_name: >/user1/SOHO collection/< + property_name: >urn:ietf:params:xml:ns:caldav:calendar-description< + property_value: >Calendar description< + changed_by: >10< changed_last_30se: >1< dav_name: >/user1/collection/< @@ -34,15 +46,3 @@ changed_last_30se: >1< property_name: >urn:mcmillan:bogus:xml:ns:rscds:arbitrary< property_value: >A completely bogus property which should be saved.< - changed_by: >10< -changed_last_30se: >1< - dav_name: >/user1/SOHO collection/< - property_name: >com.apple.ical::calendarcolor< - property_value: >#FF8000FF< - - changed_by: >10< -changed_last_30se: >1< - dav_name: >/user1/SOHO collection/< - property_name: >urn:ietf:params:xml:ns:caldav:calendar-description< - property_value: >Calendar description< - diff --git a/testing/tests/regression-suite/840-Spec-PROPPATCH-1.test b/testing/tests/regression-suite/840-Spec-PROPPATCH-1.test index 01adb1c2..2853c636 100644 --- a/testing/tests/regression-suite/840-Spec-PROPPATCH-1.test +++ b/testing/tests/regression-suite/840-Spec-PROPPATCH-1.test @@ -31,7 +31,7 @@ ENDDATA QUERY SELECT dav_displayname, is_calendar, modified > (current_timestamp - '60 seconds'::interval) AS changed_last_60secs - FROM collection WHERE dav_name = '/user1/home/' + FROM collection WHERE dav_name = '/user1/home/' ORDER BY collection_id ENDQUERY QUERY diff --git a/testing/tests/regression-suite/872-PROPFIND.result b/testing/tests/regression-suite/872-PROPFIND.result index 1ab76853..9398b66d 100644 --- a/testing/tests/regression-suite/872-PROPFIND.result +++ b/testing/tests/regression-suite/872-PROPFIND.result @@ -1,7 +1,7 @@ HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule -ETag: "df869ffbdcfc5abd7d56c9c54d6b181e" +ETag: "800ca97cec1b737be874e0ec11094f59" Content-Length: 1670 Content-Type: text/xml; charset="utf-8" @@ -24,10 +24,10 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user2/home/047871e3-6b70-4178-9af8-0ceb50f7b092.ics + /caldav.php/user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics - "58cba7e3fafb6080e85619ea77d08c7a" + "64d28f4f57515d6c63cec02b5d882eaa" HTTP/1.1 200 OK @@ -40,10 +40,10 @@ Content-Type: text/xml; charset="utf-8" - /caldav.php/user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics + /caldav.php/user2/home/047871e3-6b70-4178-9af8-0ceb50f7b092.ics - "64d28f4f57515d6c63cec02b5d882eaa" + "58cba7e3fafb6080e85619ea77d08c7a" HTTP/1.1 200 OK diff --git a/testing/tests/regression-suite/874-PROPFIND.result b/testing/tests/regression-suite/874-PROPFIND.result new file mode 100644 index 00000000..93ae782f --- /dev/null +++ b/testing/tests/regression-suite/874-PROPFIND.result @@ -0,0 +1,84 @@ +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 +ETag: "e01e87a334e05b0efb2deedc5fa7ae50" +Content-Length: 2219 +Content-Type: text/xml; charset="utf-8" + + + + + /caldav.php/user1/ + + + + + + + + + + + + Read the content of a resource or collection + + + + + + + + + + Create a resource or collection + + + + + + Delete a resource or collection + + + + + + Write content + + + + + + Write properties + + + + + + + Read the free/busy information for a calendar collection + + + + + + Read ACLs for a resource or collection + + + + + + Write ACLs for a resource or collection + + + + + + Remove a lock + + + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/regression-suite/874-PROPFIND.test b/testing/tests/regression-suite/874-PROPFIND.test new file mode 100644 index 00000000..1ea727d1 --- /dev/null +++ b/testing/tests/regression-suite/874-PROPFIND.test @@ -0,0 +1,19 @@ +# +# Testing for Spec compliance. PROPFIND on a principal, +# Depth: 0, looking for the supported-privilege-set response +# +TYPE=PROPFIND +URL=http://mycaldav/caldav.php/user1/ +HEADER=User-Agent: RFC3744 Spec Tests +HEADER=Depth: 0 +HEADER=Content-Type: application/xml +HEAD + +BEGINDATA + + + + + + +ENDDATA diff --git a/testing/tests/regression-suite/901-GET-Collection.result b/testing/tests/regression-suite/901-GET-Collection.result index 4aa835d5..8fbe45ff 100644 --- a/testing/tests/regression-suite/901-GET-Collection.result +++ b/testing/tests/regression-suite/901-GET-Collection.result @@ -3,7 +3,7 @@ Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule Content-Length: 9698 Etag: "735679d819034badbcddd8aa6029bc3d" -Content-Type: text/calendar +Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN diff --git a/testing/tests/regression-suite/903-GET-Collection.result b/testing/tests/regression-suite/903-GET-Collection.result index 935d5e10..e8a30442 100644 --- a/testing/tests/regression-suite/903-GET-Collection.result +++ b/testing/tests/regression-suite/903-GET-Collection.result @@ -3,7 +3,7 @@ Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule Content-Length: 24642 Etag: "a52157c35d64e6051e54024625d3a94a" -Content-Type: text/calendar +Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN