mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 12:35:12 +08:00
101 lines
2.8 KiB
JavaScript
101 lines
2.8 KiB
JavaScript
import debounce from "discourse/lib/debounce";
|
|
import { i18n } from "discourse/lib/computed";
|
|
import AdminUser from "admin/models/admin-user";
|
|
import { observes } from "ember-addons/ember-computed-decorators";
|
|
|
|
export default Ember.Controller.extend({
|
|
query: null,
|
|
queryParams: ["order", "ascending"],
|
|
order: null,
|
|
ascending: null,
|
|
showEmails: false,
|
|
refreshing: false,
|
|
listFilter: null,
|
|
selectAll: false,
|
|
|
|
queryNew: Em.computed.equal("query", "new"),
|
|
queryPending: Em.computed.equal("query", "pending"),
|
|
queryHasApproval: Em.computed.or("queryNew", "queryPending"),
|
|
showApproval: Em.computed.and(
|
|
"siteSettings.must_approve_users",
|
|
"queryHasApproval"
|
|
),
|
|
searchHint: i18n("search_hint"),
|
|
hasSelection: Em.computed.gt("selectedCount", 0),
|
|
|
|
selectedCount: function() {
|
|
var model = this.get("model");
|
|
if (!model || !model.length) return 0;
|
|
return model.filterBy("selected").length;
|
|
}.property("model.@each.selected"),
|
|
|
|
selectAllChanged: function() {
|
|
var val = this.get("selectAll");
|
|
this.get("model").forEach(function(user) {
|
|
if (user.get("can_approve")) {
|
|
user.set("selected", val);
|
|
}
|
|
});
|
|
}.observes("selectAll"),
|
|
|
|
title: function() {
|
|
return I18n.t("admin.users.titles." + this.get("query"));
|
|
}.property("query"),
|
|
|
|
_filterUsers: debounce(function() {
|
|
this._refreshUsers();
|
|
}, 250).observes("listFilter"),
|
|
|
|
@observes("order", "ascending")
|
|
_refreshUsers: function() {
|
|
this.set("refreshing", true);
|
|
|
|
AdminUser.findAll(this.get("query"), {
|
|
filter: this.get("listFilter"),
|
|
show_emails: this.get("showEmails"),
|
|
order: this.get("order"),
|
|
ascending: this.get("ascending")
|
|
})
|
|
.then(result => {
|
|
this.set("model", result);
|
|
})
|
|
.finally(() => {
|
|
this.set("refreshing", false);
|
|
});
|
|
},
|
|
|
|
actions: {
|
|
approveUsers: function() {
|
|
AdminUser.bulkApprove(this.get("model").filterBy("selected"));
|
|
this._refreshUsers();
|
|
},
|
|
|
|
rejectUsers: function() {
|
|
var maxPostAge = this.siteSettings.delete_user_max_post_age;
|
|
var controller = this;
|
|
AdminUser.bulkReject(this.get("model").filterBy("selected")).then(
|
|
function(result) {
|
|
var message = I18n.t("admin.users.reject_successful", {
|
|
count: result.success
|
|
});
|
|
if (result.failed > 0) {
|
|
message +=
|
|
" " +
|
|
I18n.t("admin.users.reject_failures", { count: result.failed });
|
|
message +=
|
|
" " +
|
|
I18n.t("admin.user.delete_forbidden", { count: maxPostAge });
|
|
}
|
|
bootbox.alert(message);
|
|
controller._refreshUsers();
|
|
}
|
|
);
|
|
},
|
|
|
|
showEmails: function() {
|
|
this.set("showEmails", true);
|
|
this._refreshUsers(true);
|
|
}
|
|
}
|
|
});
|