Skip to content

Commit

Permalink
Fix links to newly added addressbook
Browse files Browse the repository at this point in the history
  • Loading branch information
cgx committed Nov 8, 2016
1 parent 8e33794 commit ea64046
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 20 deletions.
6 changes: 2 additions & 4 deletions UI/Contacts/UIxContactFoldersView.h
@@ -1,8 +1,6 @@
/* UIxContactFoldersView.h - this file is part of SOGo
*
* Copyright (C) 2006-2009 Inverse inc.
*
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
* Copyright (C) 2006-2016 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -36,7 +34,7 @@
BOOL contextIsSetup;
}

- (NSString *) contactFolders;
- (NSArray *) contactFolders;

- (NSArray *) personalContactInfos;

Expand Down
37 changes: 34 additions & 3 deletions UI/Contacts/UIxContactFoldersView.m
@@ -1,6 +1,6 @@
/* UIxContactFoldersView.m - this file is part of SOGo
*
* Copyright (C) 2006-2014 Inverse inc.
* Copyright (C) 2006-2016 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -274,7 +274,7 @@ - (BOOL) isPublicAccessEnabled
return [[SOGoSystemDefaults sharedSystemDefaults] enablePublicAccess];
}

- (NSString *) contactFolders
- (NSArray *) contactFolders
{
SOGoContactFolders *folderContainer;
NSMutableDictionary *urls, *acls;
Expand Down Expand Up @@ -347,7 +347,38 @@ - (NSString *) contactFolders
[foldersAttrs addObject: folderAttrs];
}

return [foldersAttrs jsonRepresentation];
return foldersAttrs;
}

/**
* @api {get} /so/:username/Contacts/addressbooksList Get address books
* @apiVersion 1.0.0
* @apiName GetAddressbooksList
* @apiGroup Contacts
* @apiExample {curl} Example usage:
* curl -i http://localhost/SOGo/so/sogo1/Contacts/addressbooksList
*
* @apiSuccess (Success 200) {Object[]} addressbooks List of address books
* @apiSuccess (Success 200) {String} addressbooks.id AddressBook ID
* @apiSuccess (Success 200) {String} addressbooks.name Human readable name
* @apiSuccess (Success 200) {String} addressbooks.owner User ID of owner
* @apiSuccess (Success 200) {Number} addressbooks.synchronize 1 if address book must be synchronized in EAS
* @apiSuccess (Success 200) {Number} addressbooks.listRequiresDot 1 if listing requires a search
* @apiSuccess (Success 200) {Number} addressbooks.isRemote 1 if address book is a global source
* @apiSuccess (Success 200) {Object[]} urls URLs to this address book
* @apiSuccess (Success 200) {String} [urls.cardDavURL] CardDAV URL
* @apiSuccess (Success 200) {String} [urls.publicCardDavURL] Public CardDAV URL
*/
- (WOResponse *) addressbooksListAction
{
NSDictionary *data;
WOResponse *response;

data = [NSDictionary dictionaryWithObject: [self contactFolders]
forKey: @"addressbooks"];
response = [self responseWithStatus: 200 andJSONRepresentation: data];

return response;
}

// - (NSString *) currentContactFolderId
Expand Down
2 changes: 1 addition & 1 deletion UI/Templates/ContactsUI/UIxContactFoldersView.wox
Expand Up @@ -11,7 +11,7 @@
const:userDefaultsKeys="SOGoContactsCategories"
const:jsFiles="vendor/ckeditor/ckeditor.js, vendor/ckeditor/ck.js, Common.js, Preferences.services.js, Mailer.services.js, Contacts.js, Contacts.services.js, vendor/angular-file-upload.min.js, vendor/FileSaver.min.js">
<script type="text/javascript">
var contactFolders = <var:string value="contactFolders" const:escapeHTML="NO" />;
var contactFolders = <var:string value="contactFolders.jsonRepresentation" const:escapeHTML="NO" />;
</script>

<main class="view"
Expand Down
25 changes: 25 additions & 0 deletions UI/WebServerResources/js/Contacts/AddressBook.service.js
Expand Up @@ -199,6 +199,31 @@
});
};

/**
* @memberof AddressBook
* @desc Reload the list of known addressbooks.
*/
AddressBook.$reloadAll = function() {
var _this = this;

return AddressBook.$$resource.fetch('addressbooksList').then(function(data) {
_.forEach(data.addressbooks, function(addressbookData) {
var group, addressbook;

if (addressbookData.isRemote)
group = _this.$remotes;
else if (addressbookData.owner != AddressBook.activeUser.login)
group = _this.$subscriptions;
else
group = _this.$addressbooks;

addressbook = _.find(group, function(o) { return o.id == addressbookData.id; });
if (addressbook)
addressbook.init(addressbookData);
});
});
};

/**
* @function init
* @memberof AddressBook.prototype
Expand Down
32 changes: 20 additions & 12 deletions UI/WebServerResources/js/Contacts/AddressBooksController.js
Expand Up @@ -6,8 +6,8 @@
/**
* @ngInject
*/
AddressBooksController.$inject = ['$state', '$scope', '$rootScope', '$stateParams', '$timeout', '$window', '$mdDialog', '$mdToast', '$mdMedia', '$mdSidenav', 'FileUploader', 'sgConstant', 'sgHotkeys', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];
function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $window, $mdDialog, $mdToast, $mdMedia, $mdSidenav, FileUploader, sgConstant, sgHotkeys, focus, Card, AddressBook, Dialog, Settings, User, stateAddressbooks) {
AddressBooksController.$inject = ['$q', '$state', '$scope', '$rootScope', '$stateParams', '$timeout', '$window', '$mdDialog', '$mdToast', '$mdMedia', '$mdSidenav', 'FileUploader', 'sgConstant', 'sgHotkeys', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];
function AddressBooksController($q, $state, $scope, $rootScope, $stateParams, $timeout, $window, $mdDialog, $mdToast, $mdMedia, $mdSidenav, FileUploader, sgConstant, sgHotkeys, focus, Card, AddressBook, Dialog, Settings, User, stateAddressbooks) {
var vm = this, hotkeys = [];

vm.activeUser = Settings.activeUser;
Expand Down Expand Up @@ -234,16 +234,24 @@
}

function showLinks(addressbook) {
$mdDialog.show({
parent: angular.element(document.body),
clickOutsideToClose: true,
escapeToClose: true,
templateUrl: addressbook.id + '/links',
controller: LinksDialogController,
controllerAs: 'links',
locals: {
addressbook: addressbook
}
var promise;
if (addressbook.urls)
promise = $q.when();
else
// Refresh list of addressbooks to fetch links associated to addressbook
promise = AddressBook.$reloadAll();
promise.then(function() {
$mdDialog.show({
parent: angular.element(document.body),
clickOutsideToClose: true,
escapeToClose: true,
templateUrl: addressbook.id + '/links',
controller: LinksDialogController,
controllerAs: 'links',
locals: {
addressbook: addressbook
}
});
});

/**
Expand Down

0 comments on commit ea64046

Please sign in to comment.