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: 'seen', 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); } } });