From 40dd74447b2ffd9dd60183bdccfd851049ffa7ef Mon Sep 17 00:00:00 2001 From: Andrew McMillan Date: Sat, 20 Mar 2010 01:06:48 +1300 Subject: [PATCH] Support schedule-calendar-transp property. --- inc/caldav-PROPPATCH.php | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/inc/caldav-PROPPATCH.php b/inc/caldav-PROPPATCH.php index 882b1e3d..9df2b71d 100644 --- a/inc/caldav-PROPPATCH.php +++ b/inc/caldav-PROPPATCH.php @@ -49,6 +49,7 @@ $success = array(); */ $qry = new AwlQuery(); $qry->Begin(); +$setcalendar = count($xmltree->GetPath('/DAV::propertyupdate/DAV::set/DAV::prop/DAV::resourcetype/urn:ietf:params:xml:ns:caldav:calendar')); foreach( $setprops AS $k => $setting ) { $tag = $setting->GetTag(); $content = $setting->RenderContent(); @@ -59,12 +60,12 @@ foreach( $setprops AS $k => $setting ) { /** * Can't set displayname on resources - only collections or principals */ - if ( $request->IsCollection() || $request->IsPrincipal() ) { + if ( $dav_resource->IsCollection() || $dav_resource->IsPrincipal() ) { if ( $dav_resource->IsBinding() ) { $qry->QDo('UPDATE dav_binding SET dav_displayname = :displayname WHERE dav_name = :dav_name', array( ':displayname' => $content, ':dav_name' => $dav_resource->dav_name()) ); } - else if ( $request->IsPrincipal() ) { + else if ( $dav_resource->IsPrincipal() ) { $qry->QDo('UPDATE dav_principal SET fullname = :displayname, displayname = :displayname, modified = current_timestamp WHERE user_no = :user_no', array( ':displayname' => $content, ':user_no' => $request->user_no) ); } @@ -93,9 +94,8 @@ foreach( $setprops AS $k => $setting ) { * Only collections may be CalDAV calendars or addressbooks, and they may not be both. */ $setcollection = count($setting->GetPath('DAV::resourcetype/DAV::collection')); - $setcalendar = count($setting->GetPath('DAV::resourcetype/urn:ietf:params:xml:ns:caldav:calendar')); $setaddressbook = count($setting->GetPath('DAV::resourcetype/urn:ietf:params:xml:ns:carddav:addressbook')); - if ( $request->IsCollection() && $setcollection && ! $dav_resource->IsPrincipal() + if ( $dav_resource->IsCollection() && $setcollection && ! $dav_resource->IsPrincipal() && ! $dav_resource->IsBinding() && ! ($setaddressbook && $setcalendar) ) { $resourcetypes = $setting->GetPath('DAV::resourcetype/*'); $resourcetypes = str_replace( "\n", "", implode('',$resourcetypes)); @@ -117,6 +117,26 @@ foreach( $setprops AS $k => $setting ) { } break; + case 'urn:ietf:params:xml:ns:caldav:schedule-calendar-transp': + if ( $dav_resource->IsCollection() && ( $dav_resource->IsCalendar() || $setcalendar ) && !$dav_resource->IsBinding() ) { + $transparency = $setting->GetPath('urn:ietf:params:xml:ns:caldav:schedule-calendar-transp/*'); + $transparency = preg_replace( '{^.*:}', '', $transparency[0]->GetTag()); + $qry->QDo('UPDATE collection SET schedule_transp = :transparency WHERE dav_name = :dav_name', + array( ':dav_name' => $dav_resource->dav_name(), ':transparency' => $transparency ) ); + $success[$tag] = 1; + } + else { + $failure['set-'.$tag] = new XMLElement( 'propstat', array( + new XMLElement( 'prop', new XMLElement($tag)), + new XMLElement( 'status', 'HTTP/1.1 403 Forbidden' ), + new XMLElement( 'responsedescription', array( + new XMLElement( 'error', new XMLElement( 'cannot-modify-protected-property') ), + translate("The CalDAV:schedule-calendar-transp property may only be set on calendars.") ) + ) + )); + } + break; + case 'urn:ietf:params:xml:ns:caldav:calendar-free-busy-set': $failure['set-'.$tag] = new XMLElement( 'propstat', array( new XMLElement( 'prop', new XMLElement($tag)),