Fix display name of subscribed folders

pull/64/head
Francis Lachapelle 2014-10-09 15:10:20 -04:00
parent ff9d49be71
commit 6cc8f17c86
2 changed files with 32 additions and 31 deletions

1
NEWS
View File

@ -4,6 +4,7 @@
Bug fixes Bug fixes
- fixed freebusy lookup with "Show time as busy" (#2930) - fixed freebusy lookup with "Show time as busy" (#2930)
- don't escape <br>'s in a card's note field - don't escape <br>'s in a card's note field
- fixed folder's display name when the active user subscribes another user to one of her/his folders
2.2.9a (2014-09-29) 2.2.9a (2014-09-29)
------------------- -------------------

View File

@ -282,41 +282,40 @@ static NSArray *childRecordFields = nil;
return value; return value;
} }
- (void) _setDisplayNameFromRow: (NSDictionary *) row - (NSString *) _displayNameFromRow: (NSDictionary *) row
{ {
NSString *primaryDN; NSString *name, *primaryDN;
name = nil;
primaryDN = [row objectForKey: @"c_foldername"]; primaryDN = [row objectForKey: @"c_foldername"];
if ([primaryDN length]) if ([primaryDN length])
{ {
DESTROY(displayName);
if ([primaryDN isEqualToString: [container defaultFolderName]]) if ([primaryDN isEqualToString: [container defaultFolderName]])
displayName = [self labelForKey: primaryDN name = [self labelForKey: primaryDN
inContext: context]; inContext: context];
else else
displayName = primaryDN; name = primaryDN;
RETAIN(displayName);
} }
return name;
} }
/* This method fetches the display name defined by the owner, but is also the /* This method fetches the display name defined by the owner, but is also the
fallback when a subscriber has not redefined the display name yet in his fallback when a subscriber has not redefined the display name yet in his
environment. */ environment. */
- (void) _fetchDisplayNameFromOwner - (NSString *) _displayNameFromOwner
{ {
GCSChannelManager *cm; GCSChannelManager *cm;
EOAdaptorChannel *fc; EOAdaptorChannel *fc;
NSURL *folderLocation; NSURL *folderLocation;
NSString *sql; NSString *name, *sql;
NSArray *attrs; NSArray *attrs;
NSDictionary *row; NSDictionary *row;
name = nil;
cm = [GCSChannelManager defaultChannelManager]; cm = [GCSChannelManager defaultChannelManager];
folderLocation folderLocation = [[GCSFolderManager defaultFolderManager] folderInfoLocation];
= [[GCSFolderManager defaultFolderManager] folderInfoLocation];
fc = [cm acquireOpenChannelForURL: folderLocation]; fc = [cm acquireOpenChannelForURL: folderLocation];
if (fc) if (fc)
{ {
@ -324,33 +323,34 @@ static NSArray *childRecordFields = nil;
// performing the query. This could have unexpected results. // performing the query. This could have unexpected results.
NS_DURING NS_DURING
{ {
sql sql = [NSString stringWithFormat: (@"SELECT c_foldername FROM %@"
= [NSString stringWithFormat: (@"SELECT c_foldername FROM %@" @" WHERE c_path = '%@'"),
@" WHERE c_path = '%@'"), [folderLocation gcsTableName], ocsPath];
[folderLocation gcsTableName], ocsPath];
[fc evaluateExpressionX: sql]; [fc evaluateExpressionX: sql];
attrs = [fc describeResults: NO]; attrs = [fc describeResults: NO];
row = [fc fetchAttributes: attrs withZone: NULL]; row = [fc fetchAttributes: attrs withZone: NULL];
if (row) if (row)
[self _setDisplayNameFromRow: row]; name = [self _displayNameFromRow: row];
[fc cancelFetch]; [fc cancelFetch];
[cm releaseChannel: fc]; [cm releaseChannel: fc];
} }
NS_HANDLER; NS_HANDLER;
NS_ENDHANDLER; NS_ENDHANDLER;
} }
return name;
} }
- (void) _fetchDisplayNameFromSubscriber - (NSString *) _displayNameFromSubscriber
{ {
NSDictionary *ownerIdentity, *folderSubscriptionValues; NSDictionary *ownerIdentity, *folderSubscriptionValues;
NSString *displayNameFormat; NSString *name, *displayNameFormat;
SOGoDomainDefaults *dd; SOGoDomainDefaults *dd;
displayName = [self folderPropertyValueInCategory: @"FolderDisplayNames"]; name = [self folderPropertyValueInCategory: @"FolderDisplayNames"];
if (!displayName) if (!name)
{ {
[self _fetchDisplayNameFromOwner]; name = [self _displayNameFromOwner];
// We MUST NOT use SOGoUser instances here (by calling -primaryIdentity) // We MUST NOT use SOGoUser instances here (by calling -primaryIdentity)
// as it'll load user defaults and user settings which is _very costly_ // as it'll load user defaults and user settings which is _very costly_
@ -358,17 +358,17 @@ static NSArray *childRecordFields = nil;
ownerIdentity = [[SOGoUserManager sharedUserManager] ownerIdentity = [[SOGoUserManager sharedUserManager]
contactInfosForUserWithUIDorEmail: owner]; contactInfosForUserWithUIDorEmail: owner];
folderSubscriptionValues = [[NSDictionary alloc] initWithObjectsAndKeys: displayName, @"FolderName", folderSubscriptionValues = [[NSDictionary alloc] initWithObjectsAndKeys: name, @"FolderName",
[ownerIdentity objectForKey: @"cn"], @"UserName", [ownerIdentity objectForKey: @"cn"], @"UserName",
[ownerIdentity objectForKey: @"c_email"], @"Email", nil]; [ownerIdentity objectForKey: @"c_email"], @"Email", nil];
dd = [[context activeUser] domainDefaults]; dd = [[context activeUser] domainDefaults];
displayNameFormat = [dd subscriptionFolderFormat]; displayNameFormat = [dd subscriptionFolderFormat];
displayName = [folderSubscriptionValues keysWithFormat: displayNameFormat]; name = [folderSubscriptionValues keysWithFormat: displayNameFormat];
} }
[displayName retain]; return name;
} }
- (NSString *) displayName - (NSString *) displayName
@ -376,14 +376,14 @@ static NSArray *childRecordFields = nil;
if (!displayName) if (!displayName)
{ {
if (activeUserIsOwner) if (activeUserIsOwner)
[self _fetchDisplayNameFromOwner]; displayName = [self _displayNameFromOwner];
else else
{ {
[self _fetchDisplayNameFromSubscriber]; displayName = [self _displayNameFromSubscriber];
if (!displayName) if (!displayName)
[self _fetchDisplayNameFromOwner]; displayName = [self _displayNameFromOwner];
} }
[displayName retain];
} }
return displayName; return displayName;
@ -949,7 +949,7 @@ static NSArray *childRecordFields = nil;
forKey: @"FolderShowAlarms"]; forKey: @"FolderShowAlarms"];
} }
[self setFolderPropertyValue: [self displayName] [self setFolderPropertyValue: [self _displayNameFromSubscriber]
inCategory: @"FolderDisplayNames" inCategory: @"FolderDisplayNames"
settings: us]; settings: us];