[CalendarServer-changes] [10024] CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/ datastore/sql.py
source_changes at macosforge.org
source_changes at macosforge.org
Mon Nov 12 16:44:51 PST 2012
Revision: 10024
http://trac.calendarserver.org//changeset/10024
Author: gaya at apple.com
Date: 2012-11-12 16:44:51 -0800 (Mon, 12 Nov 2012)
Log Message:
-----------
roll back cleanup of AddressBookObject.remove()
Modified Paths:
--------------
CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py 2012-11-12 19:24:09 UTC (rev 10023)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py 2012-11-13 00:44:51 UTC (rev 10024)
@@ -375,21 +375,21 @@
if self._resourceID == self._addressbook._resourceID:
raise DeleteOfShadowGroupNotAllowedError
- ownerGroup, ownerAddressBook = yield self._ownerGroupAndAddressBook()
-
- # delete members table row for this object
+ aboForeignMembers = schema.ABO_FOREIGN_MEMBERS
aboMembers = schema.ABO_MEMBERS
- groupIDRows = yield Select(
- [aboMembers.GROUP_ID],
- From=aboMembers,
- Where=aboMembers.MEMBER_ID == self._resourceID,
- ).on(self._txn)
+ ownerGroup, ownerAddressBook = yield self._ownerGroupAndAddressBook()
memberAddress = "urn:uuid:" + self._uid
- for groupID in [groupIDRow[0] for groupIDRow in groupIDRows]:
- if ownerGroup and groupID == ownerAddressBook._resourceID:
- pass # convert delete in shared group to remove of membership only part 1
- else:
+ if ownerGroup:
+ # convert a delete of a shared group member to a remove of that member in shared group and subgroups
+ groupIDRows = yield Select(
+ [aboMembers.GROUP_ID],
+ From=aboMembers,
+ Where=(aboMembers.MEMBER_ID == self._resourceID).And(
+ aboMembers.GROUP_ID != ownerAddressBook._resourceID),
+ ).on(self._txn)
+
+ for groupID in [groupIDRow[0] for groupIDRow in groupIDRows]:
groupObject = yield ownerAddressBook.objectResourceWithID(groupID)
groupComponent = yield groupObject.component()
if memberAddress in groupComponent.resourceMemberAddresses():
@@ -397,9 +397,24 @@
groupComponent.replaceProperty(Property("PRODID", vCardProductID))
yield groupObject.updateDatabase(groupComponent)
- if ownerGroup:
- pass # convert delete in shared group to remove of member only part 2
else:
+ # delete members table rows for this object,...
+ groupIDRows = yield Delete(
+ aboMembers,
+ Where=aboMembers.MEMBER_ID == self._resourceID,
+ Return=aboMembers.GROUP_ID
+ ).on(self._txn)
+
+ # add to foreign member table row by UID
+ for groupID in [groupIDRow[0] for groupIDRow in groupIDRows]:
+ if groupID != self._ownerAddressBookResourceID:
+ # add aboForeignMembers row to local groups only
+ yield Insert(
+ {aboForeignMembers.GROUP_ID: groupID,
+ aboForeignMembers.ADDRESSBOOK_ID: self._ownerAddressBookResourceID,
+ aboForeignMembers.MEMBER_ADDRESS: memberAddress, }
+ ).on(self._txn)
+
yield super(AddressBookObject, self).remove()
self._kind = None
self._ownerAddressBookResourceID = None
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20121112/7d7b99c1/attachment.html>
More information about the calendarserver-changes
mailing list