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); } } });