UNPKG

linagora-rse

Version:
257 lines (215 loc) 8.43 kB
(function(angular) { 'use strict'; angular.module('linagora.esn.contact') .factory('contactAddressbookService', contactAddressbookService); function contactAddressbookService( $q, $window, $log, _, session, esnUserConfigurationService, contactAddressbookParser, ContactAPIClient, contactAddressbookDisplayService, ContactVirtualAddressBookService, CONTACT_ADDRESSBOOK_TYPES, CONTACT_ADDRESSBOOK_STATES, CONTACT_ADDRESSBOOK_MEMBERS_RIGHTS, CONTACT_SHARING_INVITE_STATUS, CONTACT_SHARING_SUBSCRIPTION_TYPE ) { var DAVSERVER_CONFIGURATION = 'davserver'; return { createAddressbook: createAddressbook, createGroupAddressbook: createGroupAddressbook, getAddressbookByBookName: getAddressbookByBookName, getAddressbookUrl: getAddressbookUrl, listAddressbooks: listAddressbooks, listAggregatedAddressbooks: listAggregatedAddressbooks, listAddressbooksUserCanCreateContact: listAddressbooksUserCanCreateContact, removeAddressbook: removeAddressbook, updateAddressbook: updateAddressbook, listSubscribableAddressbooks: listSubscribableAddressbooks, listSubscribedAddressbooks: listSubscribedAddressbooks, subscribeAddressbooks: subscribeAddressbooks, shareAddressbook: shareAddressbook, updateAddressbookPublicRight: updateAddressbookPublicRight, updateGroupAddressbookMembersRight: updateGroupAddressbookMembersRight }; function getAddressbookByBookName(bookName, group) { return ContactVirtualAddressBookService.get(bookName).then(function(addressbook) { if (addressbook) { return addressbook; } var bookId = group && group.id ? group.id : session.user._id; return ContactAPIClient.addressbookHome(bookId).addressbook(bookName).get(); }); } function listAggregatedAddressbooks() { return listAddressbooks().then(function(addressbooks) { return addressbooks.filter(function(addressbook) { return !addressbook.excludeFromAggregate; }); }); } function listAddressbooks() { return $q.all([_listAddressbooks(), ContactVirtualAddressBookService.list()]).then(function(addressbooks) { return Array.prototype.concat(addressbooks[0], addressbooks[1]); }); } function _listAddressbooks() { return ContactAPIClient.addressbookHome(session.user._id).addressbook().list({ personal: true, subscribed: true, shared: true, contactsCount: true, inviteStatus: CONTACT_SHARING_INVITE_STATUS.ACCEPTED }); } function listAddressbooksUserCanCreateContact() { return listAddressbooks().then(function(addressbooks) { return addressbooks.filter(function(addressbook) { return addressbook.canCreateContact; }); }); } function createAddressbook(addressbook) { if (!addressbook) { return $q.reject(new Error('Address book is required')); } if (!addressbook.name) { return $q.reject(new Error('Address book\'s name is required')); } addressbook.type = CONTACT_ADDRESSBOOK_TYPES.user; return ContactAPIClient .addressbookHome(session.user._id) .addressbook() .create(addressbook); } function createGroupAddressbook(addressbook, groupId) { if (!addressbook) { return $q.reject(new Error('Address book is required')); } if (!addressbook.name) { return $q.reject(new Error('Address book\'s name is required')); } if (!groupId) { return $q.reject(new Error('groupId is required')); } addressbook.type = CONTACT_ADDRESSBOOK_TYPES.group; addressbook.state = addressbook.state || CONTACT_ADDRESSBOOK_STATES.enabled; addressbook.acl = addressbook.acl || CONTACT_ADDRESSBOOK_MEMBERS_RIGHTS.READ.value; // by default, members of group just have only read permission return ContactAPIClient .addressbookHome(groupId) .addressbook() .create(addressbook); } function removeAddressbook(addressbook) { return ContactAPIClient .addressbookHome(session.user._id) .addressbook(addressbook.bookName) .remove(); } function updateAddressbook(addressbook) { return ContactAPIClient .addressbookHome(addressbook.bookId) .addressbook(addressbook.bookName) .update(addressbook); } function listSubscribableAddressbooks(userId) { return $q.all([ ContactAPIClient.addressbookHome(userId).addressbook().list({ public: true }), ContactAPIClient.addressbookHome(session.user._id).addressbook().list({ inviteStatus: CONTACT_SHARING_INVITE_STATUS.NORESPONSE, shared: true, shareOwner: userId }) ]) .then(function(data) { return data[0].concat(data[1]); }); } function listSubscribedAddressbooks() { return ContactAPIClient.addressbookHome(session.user._id).addressbook().list({ subscribed: true }); } function subscribeAddressbooks(addressbookShells) { return $q.all(addressbookShells.map(function(addressbookShell) { if (addressbookShell.subscriptionType === CONTACT_SHARING_SUBSCRIPTION_TYPE.delegation) { var displayname = contactAddressbookDisplayService.buildDisplayName(addressbookShell.source); return ContactAPIClient .addressbookHome(addressbookShell.bookId) .addressbook(addressbookShell.bookName) .acceptShare({ displayname: displayname }); } var formattedSubscriptions = { description: addressbookShell.description, name: contactAddressbookDisplayService.buildDisplayName(addressbookShell), type: CONTACT_ADDRESSBOOK_TYPES.subscription, 'openpaas:source': { _links: { self: { href: addressbookShell.href } } } }; return ContactAPIClient .addressbookHome(session.user._id) .addressbook() .create(formattedSubscriptions); })); } function shareAddressbook(addressbookShell, sharees) { return ContactAPIClient .addressbookHome(addressbookShell.bookId) .addressbook(addressbookShell.bookName) .share(sharees); } function updateAddressbookPublicRight(addressbook, publicRight) { return ContactAPIClient .addressbookHome(addressbook.bookId) .addressbook(addressbook.bookName) .updatePublicRight(publicRight); } function updateGroupAddressbookMembersRight(addressbook, membersRight) { return ContactAPIClient .addressbookHome(addressbook.bookId) .addressbook(addressbook.bookName) .updateMembersRight(membersRight); } function getAddressbookUrl(addressbook) { return _getFrontendURL().then(function(url) { return [url, _sanitizeAddressbookHref(addressbook)] .map(function(fragment) { return fragment.replace(/^\/|\/$/g, ''); }) .join('/'); }); } function _sanitizeAddressbookHref(addressbook) { var parsedPath = contactAddressbookParser.parseAddressbookPath(addressbook.href); return ['addressbooks', parsedPath.bookId, parsedPath.bookName].join('/'); } function _getFrontendURL() { return esnUserConfigurationService.get([DAVSERVER_CONFIGURATION], 'core') .then(function(configurations) { if (!configurations || !configurations.length) { $log.debug('No valid configurations found for davserver'); return _getDefaultURL(); } var davserver = _.find(configurations, { name: DAVSERVER_CONFIGURATION }); if (!davserver) { $log.debug('davserver configuration is not set'); return _getDefaultURL(); } return davserver.value && davserver.value.frontend && davserver.value.frontend.url ? davserver.value.frontend.url : _getDefaultURL(); }, function(err) { $log.debug('Can not get davserver from configuration', err); return _getDefaultURL(); }); } function _getDefaultURL() { return $window.location.origin; } } })(angular);