Monotone-Parent: 87a5b99c1c6050fac3ae23cc68cad8099adec7da

Monotone-Revision: ca4e48599cbe0a9577bf9aa27cd8ffc7e1a0e61c

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2008-05-16T20:33:55
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2008-05-16 20:33:55 +00:00
parent c6f6ed7f2d
commit 60bef234d7
9 changed files with 130 additions and 86 deletions

View File

@ -1,5 +1,14 @@
2008-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
-subscribe:reallyDoinTheNameOf:delegatedUserfromMailInvitation:isMailInvitationinContext:localContext]):
published method.
([-folderReference]): no longer distingish between the user owned
and the subscribed folders.
* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
no longer use the "_" in the folder's nameInContainer.
* UI/Common/UIxFolderActions.m ([UIxFolderActions -subscribeAction])
([UIxFolderActions -unsubscribeAction]): use the client object's
method for un-/subscribing.

View File

@ -381,7 +381,12 @@
- (NSArray *) aclUsers
{
return [container aclUsersForObjectAtPath: [self pathArrayToSOGoObject]];
NSMutableArray *pathArray;
pathArray = [NSMutableArray arrayWithArray: [container pathArrayToFolder]];
[pathArray addObject: nameInContainer];
return pathArray;
}
- (NSArray *) aclsForUser: (NSString *) uid

View File

@ -28,11 +28,17 @@
@interface SOGoFolder : SOGoObject
{
NSMutableString *displayName;
BOOL isSubscription;
}
- (void) setDisplayName: (NSString *) newDisplayName;
- (NSString *) displayName;
- (void) setIsSubscription: (BOOL) newIsSubscription;
- (BOOL) isSubscription;
- (NSString *) realNameInContainer;
- (NSString *) folderType;
- (NSArray *) fetchContentObjectNames;

View File

@ -65,7 +65,10 @@
- (id) init
{
if ((self = [super init]))
displayName = nil;
{
displayName = nil;
isSubscription = NO;
}
return self;
}
@ -86,6 +89,32 @@
return ((displayName) ? displayName : nameInContainer);
}
- (void) setIsSubscription: (BOOL) newIsSubscription
{
isSubscription = newIsSubscription;
}
- (BOOL) isSubscription
{
return isSubscription;
}
- (NSString *) realNameInContainer
{
NSString *realNameInContainer, *ownerName;
if (isSubscription)
{
ownerName = [self ownerInContext: context];
realNameInContainer
= [nameInContainer substringFromIndex: [ownerName length] + 1];
}
else
realNameInContainer = nameInContainer;
return realNameInContainer;
}
- (NSString *) folderType
{
[self subclassResponsibility: _cmd];
@ -132,26 +161,13 @@
/* sorting */
- (NSComparisonResult) _compareByOrigin: (SOGoFolder *) otherFolder
{
NSArray *thisElements, *otherElements;
unsigned thisCount, otherCount;
NSComparisonResult comparison;
thisElements = [nameInContainer componentsSeparatedByString: @"_"];
otherElements = [[otherFolder nameInContainer]
componentsSeparatedByString: @"_"];
thisCount = [thisElements count];
otherCount = [otherElements count];
if (thisCount == otherCount)
{
if (thisCount == 1)
comparison = NSOrderedSame;
else
comparison = [[thisElements objectAtIndex: 0]
compare: [otherElements objectAtIndex: 0]];
}
if (isSubscription == [otherFolder isSubscription])
comparison = NSOrderedSame;
else
{
if (thisCount > otherCount)
if (isSubscription)
comparison = NSOrderedDescending;
else
comparison = NSOrderedAscending;
@ -162,23 +178,24 @@
- (NSComparisonResult) _compareByNameInContainer: (SOGoFolder *) otherFolder
{
NSString *otherName;
NSString *selfName, *otherName;
NSComparisonResult comparison;
otherName = [otherFolder nameInContainer];
if ([nameInContainer hasSuffix: @"personal"])
selfName = [self realNameInContainer];
otherName = [otherFolder realNameInContainer];
if ([selfName isEqualToString: @"personal"])
{
if ([otherName hasSuffix: @"personal"])
comparison = [nameInContainer compare: otherName];
if ([otherName isEqualToString: @"personal"])
comparison = NSOrderedSame;
else
comparison = NSOrderedAscending;
}
else
{
if ([otherName hasSuffix: @"personal"])
if ([otherName isEqualToString: @"personal"])
comparison = NSOrderedDescending;
else
comparison = NSOrderedSame;
comparison = [selfName compare: otherName];
}
return comparison;

View File

@ -30,6 +30,8 @@
@class NSString;
@class GCSFolder;
@class WOContext;
@class WOResponse;
/*
SOGoGCSFolder
@ -60,6 +62,7 @@
- (GCSFolder *) ocsFolder;
- (NSString *) folderReference;
- (NSArray *) pathArrayToFolder;
/* lower level fetches */
- (BOOL) nameExistsInFolder: (NSString *) objectName;
@ -77,6 +80,11 @@
- (NSException *) delete;
- (void) renameTo: (NSString *) newName;
- (WOResponse *) subscribe: (BOOL) reallyDo
inTheNameOf: (NSString *) delegatedUser
fromMailInvitation: (BOOL) isMailInvitation
inContext: (WOContext *) localContext;
/* acls as a container */
- (NSArray *) aclUsersForObjectAtPath: (NSArray *) objectPathArray;
- (NSArray *) aclsForUser: (NSString *) uid

View File

@ -138,10 +138,13 @@ static BOOL sendFolderAdvisories = NO;
{
id newFolder;
NSArray *elements, *pathElements;
NSString *path, *objectPath, *login, *ocsName, *folderName;
NSString *path, *objectPath, *login, *currentUser, *ocsName, *folderName;
WOContext *context;
elements = [reference componentsSeparatedByString: @":"];
login = [elements objectAtIndex: 0];
context = [[WOApplication application] context];
currentUser = [[context activeUser] login];
objectPath = [elements objectAtIndex: 1];
pathElements = [objectPath componentsSeparatedByString: @"/"];
if ([pathElements count] > 1)
@ -155,6 +158,7 @@ static BOOL sendFolderAdvisories = NO;
newFolder = [self objectWithName: folderName inContainer: aContainer];
[newFolder setOCSPath: path];
[newFolder setOwner: login];
[newFolder setIsSubscription: ![login isEqualToString: currentUser]];
if (![newFolder displayName])
newFolder = nil;
@ -284,27 +288,21 @@ static BOOL sendFolderAdvisories = NO;
- (NSString *) folderReference
{
NSString *login, *reference, *realName;
NSArray *nameComponents;
return [NSString stringWithFormat: @"%@:%@/%@",
owner,
[container nameInContainer],
[self realNameInContainer]];
}
login = [[context activeUser] login];
if ([owner isEqualToString: login])
reference = nameInContainer;
else
{
nameComponents = [nameInContainer componentsSeparatedByString: @"_"];
if ([nameComponents count] > 1)
realName = [nameComponents objectAtIndex: 1];
else
realName = nameInContainer;
- (NSArray *) pathArrayToFolder
{
NSArray *basePathElements;
unsigned int max;
reference = [NSString stringWithFormat: @"%@:%@/%@",
owner,
[container nameInContainer],
realName];
}
basePathElements = [[self ocsPath] componentsSeparatedByString: @"/"];
max = [basePathElements count];
return reference;
return [basePathElements subarrayWithRange: NSMakeRange (2, max - 2)];
}
- (NSString *) davDisplayName
@ -497,7 +495,6 @@ static BOOL sendFolderAdvisories = NO;
}
}
#warning this method is dirty code
- (NSDictionary *) fetchContentStringsAndNamesOfAllObjects
{
NSDictionary *files;
@ -508,27 +505,23 @@ static BOOL sendFolderAdvisories = NO;
[self errorWithFormat:@"(%s): fetch failed!", __PRETTY_FUNCTION__];
return nil;
}
if ([files isKindOfClass:[NSException class]])
return files;
return files;
}
#warning this code should be cleaned up
#warning this code is a dup of UIxFolderActions,\
we should remove the methods there
- (void) _subscribeUser: (SOGoUser *) subscribingUser
reallyDo: (BOOL) reallyDo
fromMailInvitation: (BOOL) isMailInvitation
inResponse: (WOResponse *) response
{
NSMutableArray *folderSubscription;
NSString *subscriptionPointer, *baseFolder, *folder;
NSString *subscriptionPointer, *mailInvitationURL;
NSUserDefaults *ud;
NSArray *realFolderPath;
NSMutableDictionary *moduleSettings;
ud = [subscribingUser userSettings];
baseFolder = [container nameInContainer];
moduleSettings = [ud objectForKey: baseFolder];
moduleSettings = [ud objectForKey: [container nameInContainer]];
if ([owner isEqualToString: [subscribingUser login]])
{
@ -548,12 +541,6 @@ static BOOL sendFolderAdvisories = NO;
forKey: @"SubscribedFolders"];
}
realFolderPath = [nameInContainer componentsSeparatedByString: @"_"];
if ([realFolderPath count] > 1)
folder = [realFolderPath objectAtIndex: 1];
else
folder = [realFolderPath objectAtIndex: 0];
subscriptionPointer = [self folderReference];
if (reallyDo)
[folderSubscription addObjectUniquely: subscriptionPointer];
@ -562,13 +549,23 @@ static BOOL sendFolderAdvisories = NO;
[ud synchronize];
[response setStatus: 204];
if (isMailInvitation)
{
mailInvitationURL = [[self soURLToBaseContainerForCurrentUser]
absoluteString];
[response setStatus: 302];
[response setHeader: mailInvitationURL
forKey: @"location"];
}
else
[response setStatus: 204];
}
}
- (WOResponse *) _subscribe: (BOOL) reallyDo
inTheNameOf: (NSString *) delegatedUser
inContext: (WOContext *) localContext
- (WOResponse *) subscribe: (BOOL) reallyDo
inTheNameOf: (NSString *) delegatedUser
fromMailInvitation: (BOOL) isMailInvitation
inContext: (WOContext *) localContext
{
WOResponse *response;
SOGoUser *currentUser, *subscriptionUser;
@ -591,6 +588,7 @@ static BOOL sendFolderAdvisories = NO;
if (validRequest)
[self _subscribeUser: subscriptionUser
reallyDo: reallyDo
fromMailInvitation: isMailInvitation
inResponse: response];
else
{
@ -616,15 +614,17 @@ static BOOL sendFolderAdvisories = NO;
- (id <WOActionResults>) davSubscribe: (WOContext *) queryContext
{
return [self _subscribe: YES
return [self subscribe: YES
inTheNameOf: [self _parseDAVDelegatedUser: queryContext]
fromMailInvitation: NO
inContext: queryContext];
}
- (id <WOActionResults>) davUnsubscribe: (WOContext *) queryContext
{
return [self _subscribe: NO
return [self subscribe: NO
inTheNameOf: [self _parseDAVDelegatedUser: queryContext]
fromMailInvitation: NO
inContext: queryContext];
}
@ -784,7 +784,7 @@ static BOOL sendFolderAdvisories = NO;
/* acls */
- (NSArray *) aclUsers
{
return [self aclUsersForObjectAtPath: [self pathArrayToSOGoObject]];
return [self aclUsersForObjectAtPath: [self pathArrayToFolder]];
}
- (NSArray *) aclsForUser: (NSString *) uid
@ -793,8 +793,7 @@ static BOOL sendFolderAdvisories = NO;
NSArray *ownAcls, *containerAcls;
acls = [NSMutableArray array];
ownAcls = [self aclsForUser: uid
forObjectAtPath: [self pathArrayToSOGoObject]];
ownAcls = [self aclsForUser: uid forObjectAtPath: [self pathArrayToFolder]];
[acls addObjectsFromArray: ownAcls];
if ([container respondsToSelector: @selector (aclsForUser:)])
{
@ -815,13 +814,13 @@ static BOOL sendFolderAdvisories = NO;
{
return [self setRoles: roles
forUser: uid
forObjectAtPath: [self pathArrayToSOGoObject]];
forObjectAtPath: [self pathArrayToFolder]];
}
- (void) removeAclsForUsers: (NSArray *) users
{
return [self removeAclsForUsers: users
forObjectAtPath: [self pathArrayToSOGoObject]];
forObjectAtPath: [self pathArrayToFolder]];
}
- (NSString *) defaultUserID

View File

@ -623,12 +623,13 @@ function onFolderUnsubscribeCB(folderId) {
function onAddressBookRemove(event) {
var selector = $("contactFolders");
var nodes = selector.getSelectedNodes();
if (nodes.length > 0) {
if (nodes.length > 0) {
nodes[0].deselect();
var folderId = nodes[0].getAttribute("id");
var folderIdElements = folderId.split("_");
if (folderIdElements.length > 1)
unsubscribeFromFolder(folderId, onFolderUnsubscribeCB, folderId);
var owner = nodes[0].getAttribute("owner");
if (owner != UserLogin) {
var folderId = nodes[0].getAttribute("id");
unsubscribeFromFolder(folderId, owner, onFolderUnsubscribeCB, folderId);
}
else {
var abId = folderIdElements[0].substr(1);
deletePersonalAddressBook(abId);

View File

@ -1754,10 +1754,11 @@ function onCalendarRemove(event) {
var nodes = $("calendarList").getSelectedNodes();
for (var i = 0; i < nodes.length; i++) {
nodes[i].deselect();
var folderId = nodes[i].getAttribute("id");
var folderIdElements = folderId.split("_");
if (folderIdElements.length > 1) {
unsubscribeFromFolder(folderId, onFolderUnsubscribeCB, folderId);
var owner = nodes[i].getAttribute("owner");
if (owner != UserLogin) {
var folderId = nodes[i].getAttribute("id");
unsubscribeFromFolder(folderId, owner,
onFolderUnsubscribeCB, folderId);
}
else
deletePersonalCalendar(folderIdElements[0]);

View File

@ -1061,18 +1061,16 @@ function folderUnsubscriptionCallback(http) {
}
}
function unsubscribeFromFolder(folder, refreshCallback, refreshCallbackData) {
function unsubscribeFromFolder(folder, owner, refreshCallback,
refreshCallbackData) {
if (document.body.hasClassName("popup")) {
window.opener.unsubscribeFromFolder(folder, refreshCallback,
refreshCallbackData);
}
else {
var folderData = folder.split("_");
var username = folderData[0];
var folderPath = folderData[1];
if (username.startsWith('/'))
username = username.substring(1);
if (username != UserLogin) {
if (owner.startsWith('/'))
owner = owner.substring(1);
if (owner != UserLogin) {
var url = (ApplicationBaseURL + folder + "/unsubscribe");
removeFolderRequestCount++;
var rfCbData = { method: refreshCallback, data: refreshCallbackData };