diff --git a/SoObjects/Contacts/SOGoContactGCSFolder.h b/SoObjects/Contacts/SOGoContactGCSFolder.h index 15c823542..6ed85c1e8 100644 --- a/SoObjects/Contacts/SOGoContactGCSFolder.h +++ b/SoObjects/Contacts/SOGoContactGCSFolder.h @@ -1,6 +1,5 @@ /* - Copyright (C) 2006-2014 Inverse inc. - Copyright (C) 2004-2005 SKYRIX Software AG + Copyright (C) 2006-2015 Inverse inc. This file is part of SOGo. @@ -32,9 +31,13 @@ @class NSString; @interface SOGoContactGCSFolder : SOGoGCSFolder - +{ + NSString *baseCardDAVURL, *basePublicCardDAVURL; +} - (void) fixupContactRecord: (NSMutableDictionary *) contactRecord; - (NSDictionary *) lookupContactWithName: (NSString *) aName; +- (NSString *) cardDavURL; +- (NSString *) publicCardDavURL; @end diff --git a/SoObjects/Contacts/SOGoContactGCSFolder.m b/SoObjects/Contacts/SOGoContactGCSFolder.m index 6d9fa4f5a..6bd1a67ff 100644 --- a/SoObjects/Contacts/SOGoContactGCSFolder.m +++ b/SoObjects/Contacts/SOGoContactGCSFolder.m @@ -1,6 +1,5 @@ /* - Copyright (C) 2006-2013 Inverse inc. - Copyright (C) 2004-2005 SKYRIX Software AG + Copyright (C) 2006-2013-2015 Inverse inc. This file is part of SOGo. @@ -67,6 +66,24 @@ static NSArray *folderListingFields = nil; @"c_component", nil]; } +- (id) init +{ + if ((self = [super init])) + { + baseCardDAVURL = nil; + basePublicCardDAVURL = nil; + } + + return self; +} + +- (void) dealloc +{ + [baseCardDAVURL release]; + [basePublicCardDAVURL release]; + [super dealloc]; +} + - (Class) objectClassForContent: (NSString *) content { CardGroup *cardEntry; @@ -436,4 +453,48 @@ static NSArray *folderListingFields = nil; return [NSString stringWithFormat: @"%@:%@", nsRep, nodeName]; } +- (NSString *) _baseCardDAVURL +{ + NSString *davURL; + + if (!baseCardDAVURL) + { + davURL = [[self realDavURL] absoluteString]; + if ([davURL hasSuffix: @"/"]) + baseCardDAVURL = [davURL substringToIndex: [davURL length] - 1]; + else + baseCardDAVURL = davURL; + [baseCardDAVURL retain]; + } + + return baseCardDAVURL; +} + +- (NSString *) cardDavURL +{ + return [NSString stringWithFormat: @"%@/", [self _baseCardDAVURL]]; +} + +- (NSString *) _basePublicCardDAVURL +{ + NSString *davURL; + + if (!basePublicCardDAVURL) + { + davURL = [[self publicDavURL] absoluteString]; + if ([davURL hasSuffix: @"/"]) + basePublicCardDAVURL = [davURL substringToIndex: [davURL length] - 1]; + else + basePublicCardDAVURL = davURL; + [basePublicCardDAVURL retain]; + } + + return basePublicCardDAVURL; +} + +- (NSString *) publicCardDavURL +{ + return [NSString stringWithFormat: @"%@/", [self _basePublicCardDAVURL]]; +} + @end /* SOGoContactGCSFolder */ diff --git a/UI/Contacts/UIxContactFolderLinksTemplate.h b/UI/Contacts/UIxContactFolderLinksTemplate.h index ce31cf4d4..76acb4de5 100644 --- a/UI/Contacts/UIxContactFolderLinksTemplate.h +++ b/UI/Contacts/UIxContactFolderLinksTemplate.h @@ -20,14 +20,6 @@ #import -@class NSString; - -@class SOGoContactGCSFolder; - @interface UIxContactFolderLinksTemplate : UIxComponent -{ - SOGoContactGCSFolder *addressBook; - NSString *baseCardDAVURL, *basePublicCardDAVURL; -} @end diff --git a/UI/Contacts/UIxContactFolderLinksTemplate.m b/UI/Contacts/UIxContactFolderLinksTemplate.m index eec11092e..ec4f08c14 100644 --- a/UI/Contacts/UIxContactFolderLinksTemplate.m +++ b/UI/Contacts/UIxContactFolderLinksTemplate.m @@ -24,69 +24,6 @@ @implementation UIxContactFolderLinksTemplate -- (id) init -{ - if ((self = [super init])) - { - addressBook = [self clientObject]; - baseCardDAVURL = nil; - basePublicCardDAVURL = nil; - } - - return self; -} - -- (void) dealloc -{ - [baseCardDAVURL release]; - [basePublicCardDAVURL release]; - [super dealloc]; -} - -- (NSString *) _baseCardDAVURL -{ - NSString *davURL; - - if (!baseCardDAVURL) - { - davURL = [[addressBook realDavURL] absoluteString]; - if ([davURL hasSuffix: @"/"]) - baseCardDAVURL = [davURL substringToIndex: [davURL length] - 1]; - else - baseCardDAVURL = davURL; - [baseCardDAVURL retain]; - } - - return baseCardDAVURL; -} - -- (NSString *) cardDavURL -{ - return [NSString stringWithFormat: @"%@/", [self _baseCardDAVURL]]; -} - -- (NSString *) _basePublicCardDAVURL -{ - NSString *davURL; - - if (!basePublicCardDAVURL) - { - davURL = [[addressBook publicDavURL] absoluteString]; - if ([davURL hasSuffix: @"/"]) - basePublicCardDAVURL = [davURL substringToIndex: [davURL length] - 1]; - else - basePublicCardDAVURL = davURL; - [basePublicCardDAVURL retain]; - } - - return basePublicCardDAVURL; -} - -- (NSString *) publicCardDavURL -{ - return [NSString stringWithFormat: @"%@/", [self _basePublicCardDAVURL]]; -} - - (BOOL) isPublicAccessEnabled { // NOTE: This method is the same found in Common/UIxAclEditor.m diff --git a/UI/Contacts/UIxContactFoldersView.m b/UI/Contacts/UIxContactFoldersView.m index 4b3ceefb3..e8a055ed0 100644 --- a/UI/Contacts/UIxContactFoldersView.m +++ b/UI/Contacts/UIxContactFoldersView.m @@ -275,12 +275,19 @@ Class SOGoContactSourceFolderK, SOGoGCSFolderK; return [[self queryParameterForKey: @"popup"] boolValue]; } +- (BOOL) isPublicAccessEnabled +{ + // NOTE: This method is the same found in Common/UIxAclEditor.m + return [[SOGoSystemDefaults sharedSystemDefaults] enablePublicAccess]; +} + - (NSString *) contactFolders { SOGoContactFolders *folderContainer; - NSArray *folders; NSMutableArray *foldersAttrs; + NSMutableDictionary *urls; NSDictionary *folderAttrs; + NSArray *folders; id currentFolder; int max, i; @@ -291,9 +298,25 @@ Class SOGoContactSourceFolderK, SOGoGCSFolderK; folders = [folderContainer subFolders]; max = [folders count]; foldersAttrs = [NSMutableArray arrayWithCapacity: max]; + urls = nil; + for (i = 0; i < max; i++) { currentFolder = [folders objectAtIndex: i]; + + if ([currentFolder respondsToSelector: @selector(cardDavURL)]) + { + urls = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [currentFolder cardDavURL], @"cardDavURL", + nil]; + if ([self isPublicAccessEnabled]) + { + [urls setObject: [currentFolder publicCardDavURL] forKey: @"publicCardDavURL"]; + } + } + + // NOTE: keep urls as the last key/value here, to avoid chopping the dictionary + // if it is not a GCS folder folderAttrs = [NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat: @"%@", [currentFolder nameInContainer]], @"id", [currentFolder displayName], @"name", @@ -301,6 +324,7 @@ Class SOGoContactSourceFolderK, SOGoGCSFolderK; [NSNumber numberWithBool: [currentFolder isKindOfClass: SOGoGCSFolderK]], @"isEditable", [NSNumber numberWithBool: [currentFolder isKindOfClass: SOGoContactSourceFolderK] && ![currentFolder isPersonalSource]], @"isRemote", + urls, @"urls", nil]; [foldersAttrs addObject: folderAttrs]; } @@ -419,12 +443,6 @@ Class SOGoContactSourceFolderK, SOGoGCSFolderK; return [super defaultAction]; } -- (BOOL) isPublicAccessEnabled -{ - // NOTE: This method is the same found in Common/UIxAclEditor.m - return [[SOGoSystemDefaults sharedSystemDefaults] enablePublicAccess]; -} - @end @interface UIxContactViewTemplate : UIxComponent diff --git a/UI/Templates/ContactsUI/UIxContactFolderLinksTemplate.wox b/UI/Templates/ContactsUI/UIxContactFolderLinksTemplate.wox index 3b888f71a..bd310b46c 100644 --- a/UI/Templates/ContactsUI/UIxContactFolderLinksTemplate.wox +++ b/UI/Templates/ContactsUI/UIxContactFolderLinksTemplate.wox @@ -12,9 +12,9 @@
-
+
{{links.addressbook.name}}
- + close
@@ -25,7 +25,7 @@
- + @@ -33,7 +33,7 @@
- +
diff --git a/UI/Templates/SchedulerUI/UIxCalendarFolderLinksTemplate.wox b/UI/Templates/SchedulerUI/UIxCalendarFolderLinksTemplate.wox index f708a4ca3..13f95950b 100644 --- a/UI/Templates/SchedulerUI/UIxCalendarFolderLinksTemplate.wox +++ b/UI/Templates/SchedulerUI/UIxCalendarFolderLinksTemplate.wox @@ -13,9 +13,9 @@
-
+
{{links.calendar.name}}
- + close
@@ -25,50 +25,45 @@
+ + + + - - - - - - - +
- - + - + - + - +
- -
+
- + - + - +
-
diff --git a/UI/WebServerResources/js/Contacts/AddressBooksController.js b/UI/WebServerResources/js/Contacts/AddressBooksController.js index ab3d36617..3a4c6d1dd 100644 --- a/UI/WebServerResources/js/Contacts/AddressBooksController.js +++ b/UI/WebServerResources/js/Contacts/AddressBooksController.js @@ -109,25 +109,31 @@ window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder'; } - function showLinks(selectedFolder) { + function showLinks(addressbook) { $mdDialog.show({ parent: angular.element(document.body), clickOutsideToClose: true, escapeToClose: true, - templateUrl: selectedFolder.id + '/links', + templateUrl: addressbook.id + '/links', + controller: LinksDialogController, + controllerAs: 'links', locals: { - }, - controller: LinksDialogController + addressbook: addressbook + } }); /** * @ngInject */ - LinksDialogController.$inject = ['scope', '$mdDialog']; - function LinksDialogController(scope, $mdDialog) { - scope.close = function() { + LinksDialogController.$inject = ['$mdDialog', 'addressbook']; + function LinksDialogController($mdDialog, addressbook) { + var vm = this; + this.addressbook = addressbook; + this.close = close; + + function close() { $mdDialog.hide(); - }; + } } }