diff --git a/CHANGELOG b/CHANGELOG
index c82f9ee11..d1fe4c3f4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -64,6 +64,7 @@ Users:
- Added new field for participant number.
- Added new field 'is_committee' and new default group 'Committees'.
- Improved users CSV import (use group names instead of id).
+- Added more multiselect actions.
Other:
- Django 1.10 is now supported. Dropped support for Django 1.8 and 1.9.
diff --git a/openslides/users/static/js/users/site.js b/openslides/users/static/js/users/site.js
index 8e7b52ca7..395b43dc2 100644
--- a/openslides/users/static/js/users/site.js
+++ b/openslides/users/static/js/users/site.js
@@ -516,8 +516,8 @@ angular.module('OpenSlidesApp.users.site', [
isCommittee: {
value: undefined,
displayName: gettext('Committee'),
- choiceYes: gettext('Is committee'),
- choiceNo: gettext('Is not committee'),
+ choiceYes: gettext('Is a committee'),
+ choiceNo: gettext('Is not a committee'),
},
};
@@ -591,6 +591,10 @@ angular.module('OpenSlidesApp.users.site', [
$scope.alert = { type: 'danger', msg: message, show: true };
});
};
+ // delete single user
+ $scope.delete = function (user) {
+ User.destroy(user.id);
+ };
// *** select mode functions ***
$scope.isSelectMode = false;
// check all checkboxes
@@ -609,60 +613,60 @@ angular.module('OpenSlidesApp.users.site', [
});
}
};
- // delete all selected users
- $scope.deleteMultiple = function () {
- angular.forEach($scope.users, function (user) {
+ var selectModeAction = function (predicate) {
+ angular.forEach($scope.usersFiltered, function (user) {
if (user.selected) {
- User.destroy(user.id);
+ predicate(user);
}
});
$scope.isSelectMode = false;
$scope.uncheckAll();
};
- // delete single user
- $scope.delete = function (user) {
- User.destroy(user.id);
+ // delete all selected users
+ $scope.deleteMultiple = function () {
+ selectModeAction(function (user) {
+ $scope.delete(user);
+ });
};
// add group for selected users
$scope.addGroupMultiple = function (group) {
- angular.forEach($scope.users, function (user) {
- if (user.selected) {
+ if (group) {
+ selectModeAction(function (user) {
user.groups_id.push(group);
User.save(user);
- }
- });
- $scope.isSelectMode = false;
- $scope.uncheckAll();
+ });
+ }
};
// remove group for selected users
$scope.removeGroupMultiple = function (group) {
- angular.forEach($scope.users, function (user) {
- if (user.selected) {
- var groupIndex = user.groups_id.indexOf(parseInt(group));
+ if (group) {
+ selectModeAction(function (user) {
+ var groupIndex = _.indexOf(user.groups_id, parseInt(group));
if (groupIndex > -1) {
user.groups_id.splice(groupIndex, 1);
User.save(user);
}
- }
- });
- $scope.isSelectMode = false;
- $scope.uncheckAll();
+ });
+ }
};
// generate new passwords
$scope.generateNewPasswordsMultiple = function () {
- angular.forEach($scope.users, function (user) {
- if (user.selected) {
- var newPassword = PasswordGenerator.generate();
- user.default_password = newPassword;
- User.save(user);
- $http.post(
- '/rest/users/user/' + user.id + '/reset_password/',
- {'password': newPassword}
- );
- }
+ selectModeAction(function (user) {
+ var newPassword = PasswordGenerator.generate();
+ user.default_password = newPassword;
+ User.save(user);
+ $http.post(
+ '/rest/users/user/' + user.id + '/reset_password/',
+ {'password': newPassword}
+ );
+ });
+ };
+ // set boolean properties (is_active, is_present, is_committee)
+ $scope.setBoolPropertyMultiple = function (property, value) {
+ selectModeAction(function (user) {
+ user[property] = value;
+ User.save(user);
});
- $scope.isSelectMode = false;
- $scope.uncheckAll();
};
// Export as PDF
diff --git a/openslides/users/static/templates/users/user-list.html b/openslides/users/static/templates/users/user-list.html
index f822bcdc7..110e6ed8e 100644
--- a/openslides/users/static/templates/users/user-list.html
+++ b/openslides/users/static/templates/users/user-list.html
@@ -71,6 +71,9 @@
+
+
+
Generate new passwords
+
+
+ Set active
+ Set present
+ Set committee
+
+
+
+ Unset active
+ Unset present
+ Unset committee
+