} $lock_opener = $request->FailIfLocked(); if ($add_member) { $request->path = $request->dav_name() . uuid(); $dest = new DAVResource($request->path); if ($dest->Exists()) { $request->path = $request->dav_name() . uuid(); $dest = new DAVResource($request->path); if ($dest->Exists()) { throw new Exception("Failed to generate unique segment name for add-member!"); } } } else { $dest = new DAVResource($request->path); } $container = $dest->GetParentContainer(); if ($container->IsCalendar()) { $request->PreconditionFailed(412, 'urn:ietf:params:xml:ns:caldav:supported-calendar-data', translate('Incorrect content type for calendar: ') . $request->content_type); } else { if ($container->IsAddressbook()) { $request->PreconditionFailed(412, 'urn:ietf:params:xml:ns:carddav:supported-address-data', translate('Incorrect content type for addressbook: ') . $request->content_type); } } if (!$dest->Exists()) { if ($container->IsPrincipal()) { $request->DoResponse(403, translate('A DAViCal principal collection may only contain collections')); } if (!$container->Exists()) { $request->DoResponse(409, translate('Destination collection does not exist')); } $container->NeedPrivilege('DAV::bind');
<?php /** * CalDAV Server - handle DELETE method * * @package davical * @subpackage caldav * @author Andrew McMillan <*****@*****.**> * @copyright Catalyst .Net Ltd, Morphoss Ltd <http://www.morphoss.com/> * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log("delete", "DELETE method handler"); require_once 'DAVResource.php'; $dav_resource = new DAVResource($request->path); $container = $dav_resource->GetParentContainer(); $container->NeedPrivilege('DAV::unbind'); $lock_opener = $request->FailIfLocked(); require_once 'schedule-functions.php'; function delete_collection($id) { $params = array(':collection_id' => $id); $qry = new AwlQuery('SELECT child.collection_id AS child_id FROM collection child JOIN collection parent ON (parent.dav_name = child.parent_container) WHERE parent.collection_id = :collection_id', $params); if ($qry->Exec('DELETE', __LINE__, __FILE__) && $qry->rows() > 0) { while ($row = $qry->Fetch()) { delete_collection($row->child_id); } } if ($qry->QDo("SELECT write_sync_change(collection_id, 404, caldav_data.dav_name) FROM caldav_data WHERE collection_id = :collection_id", $params) && $qry->QDo("DELETE FROM property WHERE dav_name LIKE (SELECT dav_name FROM collection WHERE collection_id = :collection_id) || '%'", $params) && $qry->QDo("DELETE FROM locks WHERE dav_name LIKE (SELECT dav_name FROM collection WHERE collection_id = :collection_id) || '%'", $params) && $qry->QDo("DELETE FROM caldav_data WHERE collection_id = :collection_id", $params) && $qry->QDo("DELETE FROM collection WHERE collection_id = :collection_id", $params)) { @dbg_error_log("DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); return true; }
if ($fh) { fwrite($fh, $request->raw_post); fclose($fh); } } controlRequestContainer($dav_resource->GetProperty('username'), $dav_resource->GetProperty('user_no'), $dav_resource->bound_from(), true); $lock_opener = $request->FailIfLocked(); if ($dav_resource->IsCollection()) { if ($dav_resource->IsPrincipal() || $dav_resource->IsBinding() || !isset($c->readonly_webdav_collections) || $c->readonly_webdav_collections == true) { $request->DoResponse(405); // Method not allowed return; } $appending = isset($_GET['mode']) && $_GET['mode'] == 'append'; /** * 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, $appending); $request->DoResponse(200); return; } $etag = md5($request->raw_post); $request->CheckEtagMatch($dav_resource->Exists(), $dav_resource->unique_tag()); $put_action_type = $dav_resource->Exists() ? 'UPDATE' : 'INSERT'; $collection = $dav_resource->GetParentContainer(); write_resource($dav_resource, $request->raw_post, $collection, $session->user_no, $etag, $put_action_type, true, true); if (isset($etag)) { header(sprintf('ETag: "%s"', $etag)); } $request->DoResponse($dav_resource->Exists() ? 204 : 201);