mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-07-15 13:24:54 +00:00
Improve Administration module
This commit is contained in:
@@ -42,6 +42,7 @@
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
stateUser: stateUser,
|
||||
stateFolder: stateFolder
|
||||
}
|
||||
});
|
||||
@@ -49,39 +50,75 @@
|
||||
// if none of the above states are matched, use this as the fallback
|
||||
$urlRouterProvider.otherwise('/rights');
|
||||
}
|
||||
|
||||
stateFolder.$inject = ['$stateParams', 'User', 'AddressBook', 'Calendar'];
|
||||
function stateFolder($stateParams, User, AddressBook, Calendar) {
|
||||
var user = _.find(User.$users, function(user) {
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateUser.$inject = ['$q', '$stateParams', 'User'];
|
||||
function stateUser($q, $stateParams, User) {
|
||||
var user;
|
||||
|
||||
user = _.find(User.$users, function(user) {
|
||||
return user.uid == $stateParams.userId;
|
||||
});
|
||||
|
||||
var folder = _.find(user.$$folders, function(folder) {
|
||||
return folder.name == $stateParams.folderId;
|
||||
});
|
||||
if (angular.isUndefined(user)) {
|
||||
return User.$filter($stateParams.userId).then(function(users) {
|
||||
user = _.find(User.$users, function(user) {
|
||||
return user.uid == $stateParams.userId;
|
||||
});
|
||||
if (angular.isUndefined(user)) {
|
||||
return $q.reject('User with ID ' + $stateParams.userId + ' not found');
|
||||
}
|
||||
else {
|
||||
// Resolve folders
|
||||
return user.$folders().then(function() {
|
||||
return user;
|
||||
});
|
||||
}
|
||||
return user;
|
||||
});
|
||||
}
|
||||
|
||||
var o;
|
||||
return user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateFolder.$inject = ['$state', '$stateParams', 'decodeUriFilter', 'stateUser', 'AddressBook', 'Calendar'];
|
||||
function stateFolder($state, $stateParams, decodeUriFilter, stateUser, AddressBook, Calendar) {
|
||||
var folder, o,
|
||||
folderId = decodeUriFilter($stateParams.folderId);
|
||||
|
||||
folder = _.find(stateUser.$$folders, function(folder) {
|
||||
return folder.name == folderId;
|
||||
});
|
||||
|
||||
if (folder.type == "Appointment") {
|
||||
o = new Calendar({id: folder.name.split('/').pop(),
|
||||
owner: folder.owner,
|
||||
name: folder.displayName});
|
||||
o = new Calendar({ id: folder.name.split('/').pop(),
|
||||
owner: folder.owner,
|
||||
name: folder.displayName });
|
||||
} else {
|
||||
o = new AddressBook({id: folder.name.split('/').pop(),
|
||||
owner: folder.owner,
|
||||
name: folder.displayName});
|
||||
o = new AddressBook({ id: folder.name.split('/').pop(),
|
||||
owner: folder.owner,
|
||||
name: folder.displayName });
|
||||
}
|
||||
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
runBlock.$inject = ['$rootScope'];
|
||||
function runBlock($rootScope) {
|
||||
runBlock.$inject = ['$log', '$rootScope', '$state'];
|
||||
function runBlock($log, $rootScope, $state) {
|
||||
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
|
||||
$log.error(error);
|
||||
$state.go('administration.rights');
|
||||
});
|
||||
$rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {
|
||||
console.error(event, current, previous, rejection);
|
||||
$log.error(event, current, previous, rejection);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -7,13 +7,18 @@
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
AdministrationAclController.$inject = ['$state', '$mdToast', 'stateFolder', 'User'];
|
||||
function AdministrationAclController($state, $mdToast, stateFolder, User) {
|
||||
AdministrationAclController.$inject = ['$animate', '$state', '$mdToast', 'stateUser', 'stateFolder', 'User'];
|
||||
function AdministrationAclController($animate, $state, $mdToast, stateUser, stateFolder, User) {
|
||||
var vm = this;
|
||||
|
||||
vm.user = stateUser;
|
||||
vm.folder = stateFolder;
|
||||
vm.folderType = angular.isDefined(stateFolder.$cards)? 'AddressBook' : 'Calendar';
|
||||
vm.selectedUser = null;
|
||||
vm.getTemplate = getTemplate;
|
||||
vm.selectedUid = null;
|
||||
vm.selectUser = selectUser;
|
||||
vm.removeUser = removeUser;
|
||||
vm.getTemplate = getTemplate;
|
||||
vm.save = save;
|
||||
|
||||
vm.userToAdd = '';
|
||||
@@ -33,19 +38,26 @@
|
||||
}
|
||||
|
||||
function selectUser(user) {
|
||||
if (vm.selectedUser == user) {
|
||||
vm.selectedUser = null;
|
||||
if (vm.selectedUid == user.uid) {
|
||||
vm.selectedUid = null;
|
||||
}
|
||||
else {
|
||||
vm.selectedUid = user.uid;
|
||||
vm.selectedUser = user;
|
||||
vm.selectedUser.$rights();
|
||||
}
|
||||
}
|
||||
|
||||
function userFilter($query) {
|
||||
return User.$filter($query, stateFolder.$acl.users);
|
||||
return User.$filter($query, stateFolder.$acl.users, { dry: true });
|
||||
}
|
||||
|
||||
|
||||
function removeUser(user) {
|
||||
stateFolder.$acl.$removeUser(user.uid).catch(function(data, status) {
|
||||
Dialog.alert(l('Warning'), l('An error occured please try again.'));
|
||||
});
|
||||
}
|
||||
|
||||
function addUser(data) {
|
||||
if (data) {
|
||||
stateFolder.$acl.$addUser(data, stateFolder.owner).then(function() {
|
||||
@@ -69,7 +81,6 @@
|
||||
Dialog.alert(l('Warning'), l('An error occured please try again.'));
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
angular
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
AdministrationController.$inject = ['$state', '$mdDialog', '$mdToast', 'Dialog', 'User', 'Administration'];
|
||||
function AdministrationController($state, $mdDialog, $mdToast, Dialog, User, Administration) {
|
||||
AdministrationController.$inject = ['$state', '$mdDialog', '$mdToast', 'Dialog', 'encodeUriFilter', 'User', 'Administration'];
|
||||
function AdministrationController($state, $mdDialog, $mdToast, Dialog, encodeUriFilter, User, Administration) {
|
||||
var vm = this;
|
||||
|
||||
vm.administration = Administration;
|
||||
@@ -26,8 +26,7 @@
|
||||
}
|
||||
|
||||
function filter(searchText) {
|
||||
User.$filter(searchText).then(function() {
|
||||
});
|
||||
User.$filter(searchText);
|
||||
}
|
||||
|
||||
function selectUser(i) {
|
||||
@@ -43,7 +42,7 @@
|
||||
}
|
||||
|
||||
function selectFolder(folder) {
|
||||
$state.go('administration.rights.edit', {userId: vm.selectedUser.uid, folderId: folder.name});
|
||||
$state.go('administration.rights.edit', {userId: vm.selectedUser.uid, folderId: encodeUriFilter(folder.name)});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -43,25 +43,33 @@
|
||||
* @param {object[]} excludedUsers - a list of User objects that must be excluded from the results
|
||||
* @return a promise of an array of matching User objects
|
||||
*/
|
||||
User.$filter = function(search, excludedUsers) {
|
||||
User.$filter = function(search, excludedUsers, options) {
|
||||
var _this = this, param = {search: search};
|
||||
|
||||
if (!search) {
|
||||
// No query specified
|
||||
User.$users.splice(0, User.$users.length);
|
||||
return User.$q.when(User.$users);
|
||||
if (!options || !options.dry) {
|
||||
if (!search) {
|
||||
// No query specified
|
||||
User.$users.splice(0, User.$users.length);
|
||||
return User.$q.when(User.$users);
|
||||
}
|
||||
if (User.$query == search) {
|
||||
// Query hasn't changed
|
||||
return User.$q.when(User.$users);
|
||||
}
|
||||
User.$query = search;
|
||||
}
|
||||
if (User.$query == search) {
|
||||
// Query hasn't changed
|
||||
return User.$q.when(User.$users);
|
||||
}
|
||||
User.$query = search;
|
||||
|
||||
return User.$$resource.fetch(null, 'usersSearch', param).then(function(response) {
|
||||
var results, index, user,
|
||||
var results, index, user, users,
|
||||
compareUids = function(data) {
|
||||
return this.uid == data.uid;
|
||||
};
|
||||
|
||||
if (options && options.dry)
|
||||
users = [];
|
||||
else
|
||||
users = User.$users;
|
||||
|
||||
if (excludedUsers) {
|
||||
// Remove excluded users from response
|
||||
results = _.filter(response.users, function(user) {
|
||||
@@ -73,21 +81,21 @@
|
||||
}
|
||||
|
||||
// Remove users that no longer match the search query
|
||||
for (index = User.$users.length - 1; index >= 0; index--) {
|
||||
user = User.$users[index];
|
||||
for (index = users.length - 1; index >= 0; index--) {
|
||||
user = users[index];
|
||||
if (!_.find(results, compareUids, user)) {
|
||||
User.$users.splice(index, 1);
|
||||
users.splice(index, 1);
|
||||
}
|
||||
}
|
||||
// Add new users matching the search query
|
||||
_.each(results, function(data, index) {
|
||||
if (_.isUndefined(_.find(User.$users, compareUids, data))) {
|
||||
if (_.isUndefined(_.find(users, compareUids, data))) {
|
||||
var user = new User(data);
|
||||
User.$users.splice(index, 0, user);
|
||||
users.splice(index, 0, user);
|
||||
}
|
||||
});
|
||||
User.$log.debug(User.$users);
|
||||
return User.$users;
|
||||
User.$log.debug(users);
|
||||
return users;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user