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 +