[CalendarServer-changes] [13898] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Aug 19 17:13:58 PDT 2014


Revision: 13898
          http://trac.calendarserver.org//changeset/13898
Author:   gaya at apple.com
Date:     2014-08-19 17:13:58 -0700 (Tue, 19 Aug 2014)
Log Message:
-----------
fix uninviteUIDFromShare(), require CalDAVTester r13897

Revision Links:
--------------
    http://trac.calendarserver.org//changeset/13897

Modified Paths:
--------------
    CalendarServer/trunk/requirements-dev.txt
    CalendarServer/trunk/txdav/caldav/datastore/sql.py

Modified: CalendarServer/trunk/requirements-dev.txt
===================================================================
--- CalendarServer/trunk/requirements-dev.txt	2014-08-19 23:43:21 UTC (rev 13897)
+++ CalendarServer/trunk/requirements-dev.txt	2014-08-20 00:13:58 UTC (rev 13898)
@@ -7,4 +7,4 @@
 mockldap
 q
 --editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVClientLibrary/trunk@13420#egg=CalDAVClientLibrary
---editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@13893#egg=CalDAVTester
+--editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@13897#egg=CalDAVTester

Modified: CalendarServer/trunk/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/sql.py	2014-08-19 23:43:21 UTC (rev 13897)
+++ CalendarServer/trunk/txdav/caldav/datastore/sql.py	2014-08-20 00:13:58 UTC (rev 13898)
@@ -1886,25 +1886,24 @@
                 )
             )
         ).on(self._txn, uid=self.viewerHome().uid())
-        if rows[0][0] > 0:
+        if rows[0][0] > 1:
             # no mode change for group shares
-            returnValue(
-                {
-                    _BIND_MODE_GROUP: _BIND_MODE_GROUP,
-                    _BIND_MODE_GROUP_READ: _BIND_MODE_GROUP_READ,
-                    _BIND_MODE_GROUP_WRITE: _BIND_MODE_GROUP_WRITE,
-                }.get(self._bindMode)
-            )
+            result = {
+                _BIND_MODE_GROUP: _BIND_MODE_GROUP,
+                _BIND_MODE_GROUP_READ: _BIND_MODE_GROUP_READ,
+                _BIND_MODE_GROUP_WRITE: _BIND_MODE_GROUP_WRITE,
+            }.get(self._bindMode)
 
-        # else return mode without any groups
-        returnValue(
-            {
+        else:
+            # return mode without any groups
+            result = {
                 _BIND_MODE_GROUP_READ: _BIND_MODE_READ,
                 _BIND_MODE_GROUP_WRITE: _BIND_MODE_WRITE,
             }.get(self._bindMode)
-        )
 
+        returnValue(result)
 
+
     @inlineCallbacks
     def updateShareeGroupLink(self, groupUID, mode=None):
         """
@@ -2073,22 +2072,20 @@
         @type shareeUID: C{str}
         """
 
-        # see if group sharee for self & delete
-        gr = schema.GROUPS
-        gs = schema.GROUP_SHAREE
-        rows = yield Delete(
-            From=gs,
-            Where=(gs.CALENDAR_ID == self._resourceID).And(
-                gs.GROUP_ID == Select(
-                    [gr.GROUP_ID],
-                    From=gr,
-                    Where=(gr.GROUP_UID == shareeUID)
-                )
-            ),
-            Return=[gs.GROUP_ID]
-        ).on(self._txn)
+        rows = None
+        groupID = (yield self._txn.groupByUID(shareeUID, create=False))[0]
+        if groupID is not None:
+            gs = schema.GROUP_SHAREE
+            rows = yield Select(
+                [gs.GROUP_ID],
+                From=gs,
+                Where=(gs.CALENDAR_ID == self._resourceID).And(
+                    gs.GROUP_ID == groupID
+                ),
+            ).on(self._txn)
 
         if rows:
+            reinvites = []
             # uninvite each member of group
             memberUIDs = yield self._txn.groupMemberUIDs(rows[0][0])
             for memberUID in memberUIDs:
@@ -2101,9 +2098,21 @@
                                 # one group or individual share: delete share
                                 yield super(Calendar, self).uninviteUIDFromShare(memberUID)
                         else:
-                            # multiple groups or group and individual was shared, update to new mode
-                            yield super(Calendar, self).inviteUIDToShare(memberUID, newMode)
+                            # multiple groups or group and individual was shared add to reinvite list to update
+                            reinvites.append((memberUID, newMode))
 
+            # Delete before super.inviteUIDTOShare() and after super.inviteUIDToShare() so notification has correct access mode
+            yield Delete(
+                From=gs,
+                Where=(gs.CALENDAR_ID == self._resourceID).And(
+                    gs.GROUP_ID == groupID
+                ),
+            ).on(self._txn)
+
+            for memberUID, newMode in reinvites:
+                shareeView = yield self.shareeView(memberUID)
+                yield super(Calendar, self).inviteUIDToShare(memberUID, newMode)
+
         else:
             shareeView = yield self.shareeView(shareeUID)
             if shareeView is not None:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140819/bf3b5264/attachment.html>


More information about the calendarserver-changes mailing list