2007-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+ * 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.
ocsPath = nil;
ocsFolder = nil;
aclCache = [NSMutableDictionary new];
- [self _fetchDisplayName];
}
return self;
[ocsFolder release];
[ocsPath release];
[aclCache release];
- [displayName release];
[super dealloc];
}
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
- (NSString *) displayName
{
+ if (!displayName)
+ [self _fetchDisplayName];
+
return displayName;
}
#import <Foundation/NSUserDefaults.h>
#import <NGObjWeb/NSException+HTTP.h>
+#import <NGObjWeb/SoSecurityManager.h>
#import <NGObjWeb/WOContext+SoObjects.h>
#import <GDLContentStore/GCSChannelManager.h>
#import <GDLContentStore/GCSFolderManager.h>
#import "SOGoParentFolder.h"
+static SoSecurityManager *sm = nil;
+
@implementation SOGoParentFolder
++ (void) initialize
+{
+ if (!sm)
+ sm = [SoSecurityManager sharedSecurityManager];
+}
+
- (id) init
{
if ((self = [super init]))
#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]
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];
}
}