From 1bbd867cbe339d9c8d56d5dd29e8ce8b4239b6bc Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 30 Nov 2007 16:43:55 +0000 Subject: [PATCH] Monotone-Parent: 59c3c57568af9cf49ee2644db4b869f2bedea64c Monotone-Revision: 399ddcc3b0b509af5a4d05cd434475774187e48c Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-11-30T16:43:55 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 +++ SoObjects/SOGo/SOGoGCSFolder.m | 37 ++++++++++++++------------- SoObjects/SOGo/SOGoParentFolder.m | 42 ++++++++++++++++++++----------- 3 files changed, 52 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index f75b25b43..9f43ee5ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2007-11-30 Wolfgang Sourdeau + * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder + -appendSubscribedSources]): don't include sources for which we + don't have the SOGoPerm_AccessObject permission. + * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -rfc822DateString]): we want positive timezones to be specified with a leading "+" too. diff --git a/SoObjects/SOGo/SOGoGCSFolder.m b/SoObjects/SOGo/SOGoGCSFolder.m index 2e0a1c9c6..69e2a3561 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.m +++ b/SoObjects/SOGo/SOGoGCSFolder.m @@ -93,7 +93,6 @@ static NSString *defaultUserID = @""; ocsPath = nil; ocsFolder = nil; aclCache = [NSMutableDictionary new]; - [self _fetchDisplayName]; } return self; @@ -104,7 +103,6 @@ static NSString *defaultUserID = @""; [ocsFolder release]; [ocsPath release]; [aclCache release]; - [displayName release]; [super dealloc]; } @@ -116,23 +114,25 @@ static NSString *defaultUserID = @""; NSDictionary *ownerIdentity; primaryDN = [row objectForKey: @"c_foldername"]; - displayName = [NSMutableString string]; - if ([primaryDN isEqualToString: [container defaultFolderName]]) - [displayName appendString: [self labelForKey: primaryDN]]; - else - [displayName appendString: primaryDN]; - - currentLogin = [[context activeUser] login]; - ownerLogin = [self ownerInContext: context]; - if (![currentLogin isEqualToString: ownerLogin]) + if ([primaryDN length]) { - ownerIdentity = [[SOGoUser userWithLogin: ownerLogin roles: nil] - primaryIdentity]; - [displayName - appendString: [ownerIdentity keysWithFormat: - @" (%{fullName} <%{email}>)"]]; + displayName = [NSMutableString new]; + if ([primaryDN isEqualToString: [container defaultFolderName]]) + [displayName appendString: [self labelForKey: primaryDN]]; + else + [displayName appendString: primaryDN]; + + currentLogin = [[context activeUser] login]; + ownerLogin = [self ownerInContext: context]; + if (![currentLogin isEqualToString: ownerLogin]) + { + ownerIdentity = [[SOGoUser userWithLogin: ownerLogin roles: nil] + primaryIdentity]; + [displayName + appendString: [ownerIdentity keysWithFormat: + @" (%{fullName} <%{email}>)"]]; + } } - [displayName retain]; } - (void) _fetchDisplayName @@ -166,6 +166,9 @@ static NSString *defaultUserID = @""; - (NSString *) displayName { + if (!displayName) + [self _fetchDisplayName]; + return displayName; } diff --git a/SoObjects/SOGo/SOGoParentFolder.m b/SoObjects/SOGo/SOGoParentFolder.m index a0d7616a6..fb27adcb3 100644 --- a/SoObjects/SOGo/SOGoParentFolder.m +++ b/SoObjects/SOGo/SOGoParentFolder.m @@ -25,6 +25,7 @@ #import #import +#import #import #import #import @@ -37,8 +38,16 @@ #import "SOGoParentFolder.h" +static SoSecurityManager *sm = nil; + @implementation SOGoParentFolder ++ (void) initialize +{ + if (!sm) + sm = [SoSecurityManager sharedSecurityManager]; +} + - (id) init { if ((self = [super init])) @@ -171,13 +180,29 @@ #warning TO BE IMPLEMENTED SOON FIXME } +- (void) _appendSubscribedSource: (NSString *) sourceKey +{ + SOGoGCSFolder *subscribedFolder; + + subscribedFolder + = [subFolderClass folderWithSubscriptionReference: sourceKey + inContainer: self]; + if (subscribedFolder + && ![sm validatePermission: SOGoPerm_AccessObject + onObject: subscribedFolder + inContext: context]) + [subFolders setObject: subscribedFolder + forKey: [subscribedFolder nameInContainer]]; + else + [self _removeSubscribedSource: sourceKey]; +} + - (void) appendSubscribedSources { NSArray *subscribedReferences; NSUserDefaults *settings; NSEnumerator *allKeys; NSString *currentKey; - SOGoGCSFolder *subscribedFolder; settings = [[context activeUser] userSettings]; subscribedReferences = [[settings objectForKey: nameInContainer] @@ -185,19 +210,8 @@ if ([subscribedReferences isKindOfClass: [NSArray class]]) { allKeys = [subscribedReferences objectEnumerator]; - currentKey = [allKeys nextObject]; - while (currentKey) - { - subscribedFolder - = [subFolderClass folderWithSubscriptionReference: currentKey - inContainer: self]; - if (subscribedFolder) - [subFolders setObject: subscribedFolder - forKey: [subscribedFolder nameInContainer]]; - else - [self _removeSubscribedSource: currentKey]; - currentKey = [allKeys nextObject]; - } + while ((currentKey = [allKeys nextObject])) + [self _appendSubscribedSource: currentKey]; } }