diff --git a/UI/Common/UIxFolderActions.m b/UI/Common/UIxFolderActions.m index 332c98b9e..7be7a2998 100644 --- a/UI/Common/UIxFolderActions.m +++ b/UI/Common/UIxFolderActions.m @@ -32,16 +32,17 @@ #import #import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import #import "WODirectAction+SOGo.h" @@ -76,18 +77,17 @@ - (WOResponse *) _subscribeAction: (BOOL) reallyDo { WOResponse *response; + NSDictionary *jsonResponse; NSURL *mailInvitationURL; - response = [context response]; - [response setHeader: @"text/plain; charset=utf-8" - forKey: @"Content-Type"]; - + response = nil; [self _setupContext]; if ([owner isEqualToString: login]) { - [response setStatus: 403]; - [response appendContentString: - @"You cannot (un)subscribe to a folder that you own!"]; + jsonResponse = [NSDictionary dictionaryWithObject: [self labelForKey: @"You cannot (un)subscribe to a folder that you own!"] + forKey: @"error"]; + response = [self responseWithStatus: 403 + andJSONRepresentation: jsonResponse]; } else { @@ -97,14 +97,27 @@ if (isMailInvitation) { - mailInvitationURL - = [clientObject soURLToBaseContainerForCurrentUser]; - [response setStatus: 302]; + mailInvitationURL = [clientObject soURLToBaseContainerForCurrentUser]; + response = [self responseWithStatus: 302]; [response setHeader: [mailInvitationURL absoluteString] forKey: @"location"]; } else - [response setStatus: 204]; + { + // @see [SOGoGCSFolder folderWithSubscriptionReference:inContainer:] + jsonResponse + = [NSDictionary dictionaryWithObjectsAndKeys: + [NSString stringWithFormat: @"%@_%@", [owner asCSSIdentifier], [clientObject nameInContainer]], @"id", + owner, @"owner", + [clientObject displayName], @"name", + [NSNumber numberWithBool: [clientObject isKindOfClass: [SOGoGCSFolder class]]], @"isEditable", + [NSNumber numberWithBool: + [clientObject isKindOfClass: [SOGoContactSourceFolder class]] + && ![(SOGoContactSourceFolder *) clientObject isPersonalSource]], @"isRemote", + nil]; + response = [self responseWithStatus: 200 + andJSONRepresentation: jsonResponse]; + } } return response; diff --git a/UI/Common/product.plist b/UI/Common/product.plist index 75b9a78b0..9c7d9c787 100644 --- a/UI/Common/product.plist +++ b/UI/Common/product.plist @@ -1,5 +1,5 @@ { /* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ - requires = ( MAIN, Mailer ); + requires = ( MAIN, Contacts, Mailer ); publicResources = ( calendar.css,