Monotone-Parent: d4724feea77a2bfe4a1315b1572ab4ae3ea3afc9

Monotone-Revision: d083c5462a586e018b7a81654d14c0bfa96479fd

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2010-01-19T13:38:09
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2010-01-19 13:38:09 +00:00
parent 4639bf6b99
commit 937bd959ed
2 changed files with 40 additions and 22 deletions

View File

@ -1,5 +1,12 @@
2010-01-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Appointments/SOGoAppointmentFolders.m
(-hasProxyCalendarsWithWriteAccess:forUserWithLogin:)
(-proxySubscribersWithWriteAccess)
(-addProxySubscribers:withWriteAccess:)
(removeProxySubscribers:withWriteAccess:): prevent caldav-proxy
operations on the owner's subscribed resources.
* UI/Common/UIxFolderActions.m (-subscribeUsersAction): new web
method that enables resource owners to subscribe other users to
their resources from the acl editor.

View File

@ -397,7 +397,9 @@
currentUser = [SOGoUser userWithLogin: userLogin];
sortedSubFolders = [[self subFolders] objectEnumerator];
while ((currentFolder = [sortedSubFolders nextObject]))
if ([currentUser hasSubscribedToCalendar: currentFolder])
if ([currentUser hasSubscribedToCalendar: currentFolder]
&& [owner
isEqualToString: [currentFolder ownerInContext: nil]])
{
curPermission = [currentFolder
proxyPermissionForUserWithLogin: userLogin];
@ -428,16 +430,19 @@
for (folderCount = 0; folderCount < folderMax; folderCount++)
{
currentFolder = [subFolderNames objectAtIndex: folderCount];
aclUsers = [currentFolder aclUsersWithProxyWriteAccess: write];
userMax = [aclUsers count];
for (userCount = 0; userCount < userMax; userCount++)
if ([owner isEqualToString: [currentFolder ownerInContext: nil]])
{
aclUser = [aclUsers objectAtIndex: userCount];
if (![subscribers containsObject: aclUser])
aclUsers = [currentFolder aclUsersWithProxyWriteAccess: write];
userMax = [aclUsers count];
for (userCount = 0; userCount < userMax; userCount++)
{
currentUser = [SOGoUser userWithLogin: aclUser];
if ([currentUser hasSubscribedToCalendar: currentFolder])
[subscribers addObject: aclUser];
aclUser = [aclUsers objectAtIndex: userCount];
if (![subscribers containsObject: aclUser])
{
currentUser = [SOGoUser userWithLogin: aclUser];
if ([currentUser hasSubscribedToCalendar: currentFolder])
[subscribers addObject: aclUser];
}
}
}
}
@ -491,14 +496,17 @@
for (folderCount = 0; folderCount < folderMax; folderCount++)
{
currentFolder = [subFolderNames objectAtIndex: folderCount];
[currentFolder setRoles: proxyRoles
forUsers: proxySubscribers];
if ([owner isEqualToString: [currentFolder ownerInContext: nil]])
{
[currentFolder setRoles: proxyRoles
forUsers: proxySubscribers];
userMax = [proxySubscribers count];
for (userCount = 0; userCount < userMax; userCount++)
[currentFolder
subscribeUser: [proxySubscribers objectAtIndex: userCount]
reallyDo: YES];
userMax = [proxySubscribers count];
for (userCount = 0; userCount < userMax; userCount++)
[currentFolder
subscribeUser: [proxySubscribers objectAtIndex: userCount]
reallyDo: YES];
}
}
}
@ -517,13 +525,16 @@
for (folderCount = 0; folderCount < folderMax; folderCount++)
{
currentFolder = [subFolderNames objectAtIndex: folderCount];
[currentFolder removeAclsForUsers: proxySubscribers];
if ([owner isEqualToString: [currentFolder ownerInContext: nil]])
{
[currentFolder removeAclsForUsers: proxySubscribers];
userMax = [proxySubscribers count];
for (userCount = 0; userCount < userMax; userCount++)
[currentFolder
subscribeUser: [proxySubscribers objectAtIndex: userCount]
reallyDo: NO];
userMax = [proxySubscribers count];
for (userCount = 0; userCount < userMax; userCount++)
[currentFolder
subscribeUser: [proxySubscribers objectAtIndex: userCount]
reallyDo: NO];
}
}
}