mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-09-01 11:47:19 +00:00
Add addressbook subscriptions widget
This commit is contained in:
@@ -27,8 +27,8 @@
|
||||
* @return a new Resource object
|
||||
*/
|
||||
Resource.$factory = ['$http', '$q', function($http, $q) {
|
||||
return function(path, options) {
|
||||
return new Resource($http, $q, path, options);
|
||||
return function(path, activeUser, options) {
|
||||
return new Resource($http, $q, path, activeUser, options);
|
||||
};
|
||||
}];
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
User.factory = ['$q', 'sgSettings', 'sgResource', function($q, Settings, Resource) {
|
||||
angular.extend(User, {
|
||||
$q: $q,
|
||||
$$resource: new Resource(Settings.baseURL)
|
||||
$$resource: new Resource(Settings.baseURL, Settings.activeUser)
|
||||
});
|
||||
|
||||
return User;
|
||||
@@ -91,7 +91,7 @@
|
||||
return data;
|
||||
});
|
||||
}
|
||||
return deferred;
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -169,6 +169,31 @@
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $folders
|
||||
* @memberof User.prototype
|
||||
* @desc Retrive the list of folders of a specific type
|
||||
* @param {String} type - either 'contact' or 'calendar'
|
||||
* @return a promise of the HTTP query result or the cached result
|
||||
*/
|
||||
User.prototype.$folders = function(type) {
|
||||
var _this = this,
|
||||
deferred = User.$q.defer(),
|
||||
param = {type: type};
|
||||
if (this.$$folders) {
|
||||
deferred.resolve(this.$$folders);
|
||||
}
|
||||
else {
|
||||
User.$$resource.userResource(this.uid).fetch(null, 'foldersSearch', param).then(function(data) {
|
||||
_this.$$folders = data;
|
||||
deferred.resolve(data);
|
||||
console.debug(JSON.stringify(data, undefined, 2));
|
||||
return data;
|
||||
});
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $omit
|
||||
* @memberof User.prototype
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
angular.extend(AddressBook, {
|
||||
$q: $q,
|
||||
$timeout: $timeout,
|
||||
$$resource: new Resource(Settings.baseURL),
|
||||
$$resource: new Resource(Settings.baseURL, Settings.activeUser),
|
||||
$Card: Card,
|
||||
$$Acl: Acl,
|
||||
activeUser: Settings.activeUser
|
||||
@@ -58,8 +58,11 @@
|
||||
// Insert new addressbook at proper index
|
||||
var sibling, i;
|
||||
|
||||
addressbook.isOwned = this.activeUser.isSuperUser || addressbook.owner == this.activeUser.login;
|
||||
sibling = _.find(this.$addressbooks, function(o) {
|
||||
return (o.isRemote || (o.id != 'personal' && o.name.localeCompare(addressbook.name) === 1));
|
||||
return (o.isRemote || (o.id != 'personal'
|
||||
&& o.isOwned == addressbook.isOwned
|
||||
&& o.name.localeCompare(addressbook.name) === 1));
|
||||
});
|
||||
i = sibling ? _.indexOf(_.pluck(this.$addressbooks, 'id'), sibling.id) : 1;
|
||||
this.$addressbooks.splice(i, 0, addressbook);
|
||||
@@ -88,7 +91,7 @@
|
||||
|
||||
/**
|
||||
* @memberOf AddressBook
|
||||
* @desc Fetch list of cards and return an AddressBook instance
|
||||
* @desc Fetch list of cards and return an AddressBook instance.
|
||||
* @param {string} addressbookId - the addressbook identifier
|
||||
* @returns an AddressBook object instance
|
||||
*/
|
||||
@@ -98,8 +101,32 @@
|
||||
return new AddressBook(futureAddressBookData);
|
||||
};
|
||||
|
||||
/* Instance methods */
|
||||
/**
|
||||
* @memberOf AddressBook
|
||||
* @desc Subscribe to another user's addressbook and add it to the list of addressbooks.
|
||||
* @param {String} uid - user id
|
||||
* @param {String} path - path of folder for specified user
|
||||
* @returns a promise of the HTTP query result
|
||||
*/
|
||||
AddressBook.$subscribe = function(uid, path) {
|
||||
var _this = this;
|
||||
return AddressBook.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(addressbookData) {
|
||||
var addressbook = new AddressBook(addressbookData);
|
||||
if (!_.find(_this.$addressbooks, function(o) {
|
||||
return o.id == addressbookData.id;
|
||||
})) {
|
||||
AddressBook.$add(addressbook);
|
||||
}
|
||||
return addressbook;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $id
|
||||
* @memberof AddressBook.prototype
|
||||
* @desc Resolve the addressbook id.
|
||||
* @returns a promise of the addressbook id
|
||||
*/
|
||||
AddressBook.prototype.$id = function() {
|
||||
return this.$futureAddressBookData.then(function(data) {
|
||||
return data.id;
|
||||
@@ -166,15 +193,21 @@
|
||||
|
||||
AddressBook.prototype.$delete = function() {
|
||||
var _this = this,
|
||||
d = AddressBook.$q.defer();
|
||||
AddressBook.$$resource.remove(this.id)
|
||||
.then(function() {
|
||||
var i = _.indexOf(_.pluck(AddressBook.$addressbooks, 'id'), _this.id);
|
||||
AddressBook.$addressbooks.splice(i, 1);
|
||||
d.resolve(true);
|
||||
}, function(data, status) {
|
||||
d.reject(data);
|
||||
});
|
||||
d = AddressBook.$q.defer(),
|
||||
promise;
|
||||
|
||||
if (this.isOwned)
|
||||
promise = AddressBook.$$resource.remove(this.id);
|
||||
else
|
||||
promise = AddressBook.$$resource.fetch(this.id, 'unsubscribe');
|
||||
|
||||
promise.then(function() {
|
||||
var i = _.indexOf(_.pluck(AddressBook.$addressbooks, 'id'), _this.id);
|
||||
AddressBook.$addressbooks.splice(i, 1);
|
||||
d.resolve(true);
|
||||
}, function(data, status) {
|
||||
d.reject(data);
|
||||
});
|
||||
return d.promise;
|
||||
};
|
||||
|
||||
|
||||
@@ -131,7 +131,8 @@
|
||||
{
|
||||
name: name,
|
||||
isEditable: true,
|
||||
isRemote: false
|
||||
isRemote: false,
|
||||
owner: UserLogin
|
||||
}
|
||||
);
|
||||
AddressBook.$add(addressbook);
|
||||
@@ -164,20 +165,34 @@
|
||||
}
|
||||
};
|
||||
$scope.confirmDelete = function() {
|
||||
Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook <em>%{0}</em>?',
|
||||
$rootScope.addressbook.name))
|
||||
.then(function(res) {
|
||||
if (res) {
|
||||
$rootScope.addressbook.$delete()
|
||||
.then(function() {
|
||||
$rootScope.addressbook = null;
|
||||
}, function(data, status) {
|
||||
Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',
|
||||
$rootScope.addressbook.name),
|
||||
l(data.error));
|
||||
});
|
||||
}
|
||||
});
|
||||
if ($scope.addressbook.isOwned) {
|
||||
Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook <em>%{0}</em>?',
|
||||
$scope.addressbook.name))
|
||||
.then(function(res) {
|
||||
if (res) {
|
||||
$rootScope.addressbook.$delete()
|
||||
.then(function() {
|
||||
$rootScope.addressbook = null;
|
||||
}, function(data, status) {
|
||||
Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',
|
||||
$rootScope.addressbook.name),
|
||||
l(data.error));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
// Unsubscribe without confirmation
|
||||
$rootScope.addressbook.$delete()
|
||||
.then(function() {
|
||||
$rootScope.addressbook = null;
|
||||
}, function(data, status) {
|
||||
Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',
|
||||
$rootScope.addressbook.name),
|
||||
l(data.error));
|
||||
});
|
||||
|
||||
}
|
||||
};
|
||||
$scope.importCards = function() {
|
||||
|
||||
@@ -187,7 +202,7 @@
|
||||
};
|
||||
$scope.share = function() {
|
||||
var modal = $modal.open({
|
||||
templateUrl: stateAddressbook.id + '/aclsTemplate',
|
||||
templateUrl: stateAddressbook.id + '/aclsTemplate', // UI/Templates/UIxAclEditor.wox
|
||||
resolve: {
|
||||
modalUsers: function() {
|
||||
return stateAddressbook.$acl.$users();
|
||||
@@ -266,6 +281,16 @@
|
||||
}
|
||||
$scope.search.lastFilter = $scope.search.filter;
|
||||
};
|
||||
|
||||
/**
|
||||
* subscribeToFolder - Callback of sgSubscribe directive
|
||||
*/
|
||||
$scope.subscribeToFolder = function(addressbookData) {
|
||||
console.debug('subscribeToFolder ' + addressbookData.owner + addressbookData.name);
|
||||
AddressBook.$subscribe(addressbookData.owner, addressbookData.name).catch(function(data) {
|
||||
Dialog.alert(l('Warning'), l('An error occured please try again.'));
|
||||
});
|
||||
};
|
||||
}])
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,7 +9,13 @@
|
||||
angular.module('SOGo.ContactsUI', ['ionic', 'SOGo.Common', 'SOGo.UIMobile'])
|
||||
|
||||
.constant('sgSettings', {
|
||||
baseURL: ApplicationBaseURL
|
||||
baseURL: ApplicationBaseURL,
|
||||
activeUser: {
|
||||
login: UserLogin,
|
||||
language: UserLanguage,
|
||||
folderURL: UserFolderURL,
|
||||
isSuperUser: IsSuperUser
|
||||
}
|
||||
})
|
||||
|
||||
.run(function($ionicPlatform) {
|
||||
@@ -52,9 +58,9 @@
|
||||
templateUrl: 'addressbook.html',
|
||||
controller: 'AddressBookCtrl',
|
||||
resolve: {
|
||||
stateAddressbook: function($stateParams, sgAddressBook) {
|
||||
return sgAddressBook.$find($stateParams.addressbookId);
|
||||
}
|
||||
stateAddressbook: ['$stateParams', 'sgAddressBook', function($stateParams, AddressBook) {
|
||||
return AddressBook.$find($stateParams.addressbookId);
|
||||
}]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user