Monotone-Parent: f93961e90221976ffc8c660ae642c8bbe0c84f61

Monotone-Revision: ee9b43e5b99198d94635546e134d5ce8243594d1

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2011-11-30T14:51:01
This commit is contained in:
Wolfgang Sourdeau
2011-11-30 14:51:01 +00:00
parent cd7d211b60
commit f0c0fb0837
2 changed files with 75 additions and 9 deletions

View File

@@ -1,5 +1,12 @@
2011-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Appointments/SOGoCalendarProxy.m (+webdavAclManager):
overriden method.
(-davGroupMemberSet, -setDavGroupMemberSet:): instantiate the
"Calendar" object from the result of -[self lookupUserFolder]
instead of "container", since we might attach proxy objects to
other containers.
* Main/SOGo+DAV.m (-davPrincipalURL): new DAV getter.
(-davPrincipalSearchPropertySet): added "calendar-user-type", even
though it's a lie.

View File

@@ -30,12 +30,74 @@
#import <SOGo/SOGoUser.h>
#import <SOGo/SOGoUserSettings.h>
#import <SOGo/NSObject+DAV.h>
#import <SOGo/SOGoPermissions.h>
#import <SOGo/SOGoWebDAVAclManager.h>
#import "SOGoAppointmentFolders.h"
#import "SOGoCalendarProxy.h"
@implementation SOGoCalendarProxy
+ (SOGoWebDAVAclManager *) webdavAclManager
{
static SOGoWebDAVAclManager *aclManager = nil;
NSString *nsI;
if (!aclManager)
{
nsI = @"urn:inverse:params:xml:ns:inverse-dav";
aclManager = [SOGoWebDAVAclManager new];
[aclManager registerDAVPermission: davElement (@"read", XMLNS_WEBDAV)
abstract: YES
withEquivalent: SoPerm_WebDAVAccess
asChildOf: davElement (@"all", XMLNS_WEBDAV)];
[aclManager
registerDAVPermission: davElement (@"read-current-user-privilege-set", XMLNS_WEBDAV)
abstract: YES
withEquivalent: SoPerm_WebDAVAccess
asChildOf: davElement (@"read", XMLNS_WEBDAV)];
[aclManager registerDAVPermission: davElement (@"write", XMLNS_WEBDAV)
abstract: YES
withEquivalent: nil
asChildOf: davElement (@"all", XMLNS_WEBDAV)];
[aclManager registerDAVPermission: davElement (@"bind", XMLNS_WEBDAV)
abstract: NO
withEquivalent: SoPerm_AddDocumentsImagesAndFiles
asChildOf: davElement (@"write", XMLNS_WEBDAV)];
[aclManager registerDAVPermission: davElement (@"unbind", XMLNS_WEBDAV)
abstract: NO
withEquivalent: SoPerm_DeleteObjects
asChildOf: davElement (@"write", XMLNS_WEBDAV)];
[aclManager
registerDAVPermission: davElement (@"write-properties", XMLNS_WEBDAV)
abstract: NO
withEquivalent: SoPerm_ChangePermissions /* hackish */
asChildOf: davElement (@"write", XMLNS_WEBDAV)];
[aclManager
registerDAVPermission: davElement (@"write-content", XMLNS_WEBDAV)
abstract: NO
withEquivalent: SoPerm_AddDocumentsImagesAndFiles
asChildOf: davElement (@"write", XMLNS_WEBDAV)];
[aclManager registerDAVPermission: davElement (@"admin", nsI)
abstract: YES
withEquivalent: nil
asChildOf: davElement (@"all", XMLNS_WEBDAV)];
[aclManager registerDAVPermission: davElement (@"read-acl", XMLNS_WEBDAV)
abstract: YES
withEquivalent: SOGoPerm_ReadAcls
asChildOf: davElement (@"admin", nsI)];
[aclManager registerDAVPermission: davElement (@"write-acl", XMLNS_WEBDAV)
abstract: YES
withEquivalent: SoPerm_ChangePermissions
asChildOf: davElement (@"admin", nsI)];
}
return aclManager;
}
- (id) init
{
if ((self = [super init]))
@@ -78,7 +140,9 @@
appName = [[context request] applicationName];
proxySubscribers
= [[container lookupName: @"Calendar" inContext: context acquire: NO]
= [[[self lookupUserFolder] lookupName: @"Calendar"
inContext: context
acquire: NO]
proxySubscribersWithWriteAccess: hasWriteAccess];
max = [proxySubscribers count];
members = [NSMutableArray arrayWithCapacity: max];
@@ -138,18 +202,13 @@
- (NSException *) setDavGroupMemberSet: (NSString *) memberSet
{
SOGoUser *ownerUser;
SOGoUserSettings *us;
NSMutableArray *addedSubscribers, *removedSubscribers;
NSArray *oldProxySubscribers, *newProxySubscribers;
NSString *login;
SOGoAppointmentFolders *folders;
login = [self ownerInContext: context];
ownerUser = [SOGoUser userWithLogin: login roles: nil];
us = [ownerUser userSettings];
folders = [container lookupName: @"Calendar"
inContext: context acquire: NO];
folders = [[self lookupUserFolder] lookupName: @"Calendar"
inContext: context
acquire: NO];
oldProxySubscribers
= [folders proxySubscribersWithWriteAccess: hasWriteAccess];
if (!oldProxySubscribers)