Monotone-Parent: 87a5b99c1c6050fac3ae23cc68cad8099adec7da
Monotone-Revision: ca4e48599cbe0a9577bf9aa27cd8ffc7e1a0e61c Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2008-05-16T20:33:55 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
c6f6ed7f2d
commit
60bef234d7
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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 };
|
||||
|
|
Loading…
Reference in New Issue