From 4df08f296b6242f9df7b1fc729801b7bd221be25 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Wed, 1 Nov 2017 22:00:53 +0100 Subject: ensure uid for calendar objects is unique Signed-off-by: Georg Ehrke --- apps/dav/lib/CalDAV/CalDavBackend.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'apps/dav/lib/CalDAV/CalDavBackend.php') diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 2c34f6d6d31..4947d401560 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -957,6 +957,20 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription function createCalendarObject($calendarId, $objectUri, $calendarData) { $extraData = $this->getDenormalizedData($calendarData); + $q = $this->db->getQueryBuilder(); + $q->select($q->createFunction('COUNT(*)')) + ->from('calendarobjects') + ->where($q->expr()->eq('calendarid', $q->createNamedParameter($calendarId))) + ->andWhere($q->expr()->eq('uid', $q->createNamedParameter($extraData['uid']))); + + $result = $q->execute(); + $count = (int) $result->fetchColumn(); + $result->closeCursor(); + + if ($count !== 0) { + throw new \Sabre\DAV\Exception\BadRequest('Calendar object with uid already exists in this calendar collection.'); + } + $query = $this->db->getQueryBuilder(); $query->insert('calendarobjects') ->values([ -- cgit v1.2.3