mirror of
https://github.com/discourse/discourse.git
synced 2025-06-03 19:39:30 +08:00
FIX: proper handling of group memberships
This commit is contained in:
@ -1,34 +1,69 @@
|
||||
export default Em.ObjectController.extend({
|
||||
needs: ['adminGroups'],
|
||||
members: null,
|
||||
disableSave: false,
|
||||
usernames: null,
|
||||
|
||||
currentPage: function() {
|
||||
if (this.get("user_count") == 0) { return 0; }
|
||||
return Math.floor(this.get("offset") / this.get("limit")) + 1;
|
||||
}.property("limit", "offset", "user_count"),
|
||||
|
||||
totalPages: function() {
|
||||
if (this.get("user_count") == 0) { return 0; }
|
||||
return Math.floor(this.get("user_count") / this.get("limit")) + 1;
|
||||
}.property("limit", "user_count"),
|
||||
|
||||
showingFirst: Em.computed.lte("currentPage", 1),
|
||||
showingLast: Discourse.computed.propertyEqual("currentPage", "totalPages"),
|
||||
|
||||
aliasLevelOptions: function() {
|
||||
return [
|
||||
{ name: I18n.t("groups.alias_levels.nobody"), value: 0},
|
||||
{ name: I18n.t("groups.alias_levels.mods_and_admins"), value: 2},
|
||||
{ name: I18n.t("groups.alias_levels.members_mods_and_admins"), value: 3},
|
||||
{ name: I18n.t("groups.alias_levels.everyone"), value: 99}
|
||||
{ name: I18n.t("groups.alias_levels.nobody"), value: 0 },
|
||||
{ name: I18n.t("groups.alias_levels.mods_and_admins"), value: 2 },
|
||||
{ name: I18n.t("groups.alias_levels.members_mods_and_admins"), value: 3 },
|
||||
{ name: I18n.t("groups.alias_levels.everyone"), value: 99 }
|
||||
];
|
||||
}.property(),
|
||||
|
||||
usernames: function(key, value) {
|
||||
var members = this.get('members');
|
||||
if (arguments.length > 1) {
|
||||
this.set('_usernames', value);
|
||||
} else {
|
||||
var usernames;
|
||||
if(members) {
|
||||
usernames = members.map(function(user) {
|
||||
return user.get('username');
|
||||
}).join(',');
|
||||
}
|
||||
this.set('_usernames', usernames);
|
||||
}
|
||||
return this.get('_usernames');
|
||||
}.property('members.@each.username'),
|
||||
|
||||
actions: {
|
||||
next: function() {
|
||||
if (this.get("showingLast")) { return; }
|
||||
|
||||
var group = this.get("model"),
|
||||
offset = Math.min(group.get("offset") + group.get("limit"), group.get("user_count"));
|
||||
|
||||
group.set("offset", offset);
|
||||
|
||||
return group.findMembers();
|
||||
},
|
||||
|
||||
previous: function() {
|
||||
if (this.get("showingFirst")) { return; }
|
||||
|
||||
var group = this.get("model"),
|
||||
offset = Math.max(group.get("offset") - group.get("limit"), 0);
|
||||
|
||||
group.set("offset", offset);
|
||||
|
||||
return group.findMembers();
|
||||
},
|
||||
|
||||
removeMember: function(member) {
|
||||
var self = this,
|
||||
message = I18n.t("admin.groups.delete_member_confirm", { username: member.get("username"), group: this.get("name") });
|
||||
return bootbox.confirm(message, I18n.t("no_value"), I18n.t("yes_value"), function(confirm) {
|
||||
if (confirm) {
|
||||
self.get("model").removeMember(member);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
addMembers: function() {
|
||||
// TODO: should clear the input
|
||||
if (Em.isEmpty(this.get("usernames"))) { return; }
|
||||
this.get("model").addMembers(this.get("usernames"));
|
||||
},
|
||||
|
||||
save: function() {
|
||||
var self = this,
|
||||
group = this.get('model');
|
||||
@ -37,9 +72,9 @@ export default Em.ObjectController.extend({
|
||||
|
||||
var promise;
|
||||
if (group.get('id')) {
|
||||
promise = group.saveWithUsernames(this.get('usernames'));
|
||||
promise = group.save();
|
||||
} else {
|
||||
promise = group.createWithUsernames(this.get('usernames')).then(function() {
|
||||
promise = group.create().then(function() {
|
||||
var groupsController = self.get('controllers.adminGroups');
|
||||
groupsController.addObject(group);
|
||||
});
|
||||
|
Reference in New Issue
Block a user