discourse/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6

86 lines
2.6 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: '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);
}
}
});