149 lines
3.7 KiB
JavaScript
149 lines
3.7 KiB
JavaScript
/**
|
|
This controller supports the interface for listing users in the admin section.
|
|
|
|
@class AdminUsersListController
|
|
@extends Ember.ArrayController
|
|
@namespace Discourse
|
|
@module Discourse
|
|
**/
|
|
export default Ember.ArrayController.extend(Discourse.Presence, {
|
|
username: null,
|
|
query: null,
|
|
selectAll: false,
|
|
content: null,
|
|
loading: false,
|
|
|
|
mustApproveUsers: Discourse.computed.setting('must_approve_users'),
|
|
queryNew: Em.computed.equal('query', 'new'),
|
|
queryPending: Em.computed.equal('query', 'pending'),
|
|
queryHasApproval: Em.computed.or('queryNew', 'queryPending'),
|
|
|
|
searchHint: function() {
|
|
var searchHintKey = Discourse.User.currentProp("admin") ? "search_hint_admin" : "search_hint";
|
|
return I18n.t(searchHintKey);
|
|
}.property(),
|
|
|
|
/**
|
|
Triggered when the selectAll property is changed
|
|
|
|
@event selectAll
|
|
**/
|
|
selectAllChanged: function() {
|
|
var _this = this;
|
|
_.each(this.get('content'),function(user) {
|
|
user.set('selected', _this.get('selectAll'));
|
|
});
|
|
}.observes('selectAll'),
|
|
|
|
/**
|
|
Triggered when the username filter is changed
|
|
|
|
@event filterUsers
|
|
**/
|
|
filterUsers: Discourse.debounce(function() {
|
|
this.refreshUsers();
|
|
}, 250).observes('username'),
|
|
|
|
/**
|
|
Triggered when the order of the users list is changed
|
|
|
|
@event orderChanged
|
|
**/
|
|
orderChanged: function() {
|
|
this.refreshUsers();
|
|
}.observes('query'),
|
|
|
|
/**
|
|
The title of the user list, based on which query was performed.
|
|
|
|
@property title
|
|
**/
|
|
title: function() {
|
|
return I18n.t('admin.users.titles.' + this.get('query'));
|
|
}.property('query'),
|
|
|
|
/**
|
|
Do we want to show the approval controls?
|
|
|
|
@property showApproval
|
|
**/
|
|
showApproval: function() {
|
|
return Discourse.SiteSettings.must_approve_users && this.get('queryHasApproval');
|
|
}.property('queryPending'),
|
|
|
|
/**
|
|
How many users are currently selected
|
|
|
|
@property selectedCount
|
|
**/
|
|
selectedCount: function() {
|
|
if (this.blank('content')) return 0;
|
|
return this.get('content').filterProperty('selected').length;
|
|
}.property('content.@each.selected'),
|
|
|
|
/**
|
|
Do we have any selected users?
|
|
|
|
@property hasSelection
|
|
**/
|
|
hasSelection: Em.computed.gt('selectedCount', 0),
|
|
|
|
/**
|
|
Refresh the current list of users.
|
|
|
|
@method refreshUsers
|
|
**/
|
|
refreshUsers: function() {
|
|
var adminUsersListController = this;
|
|
adminUsersListController.set('loading', true);
|
|
|
|
Discourse.AdminUser.findAll(this.get('query'), { filter: this.get('username') }).then(function (result) {
|
|
adminUsersListController.set('content', result);
|
|
adminUsersListController.set('loading', false);
|
|
});
|
|
},
|
|
|
|
|
|
/**
|
|
Show the list of users.
|
|
|
|
@method show
|
|
**/
|
|
show: function(term) {
|
|
if (this.get('query') === term) {
|
|
this.refreshUsers();
|
|
return;
|
|
}
|
|
this.set('query', term);
|
|
},
|
|
|
|
/**
|
|
Approve all the currently selected users.
|
|
|
|
@method approveUsers
|
|
**/
|
|
approveUsers: function() {
|
|
Discourse.AdminUser.bulkApprove(this.get('content').filterProperty('selected'));
|
|
this.refreshUsers();
|
|
},
|
|
|
|
/**
|
|
Reject all the currently selected users.
|
|
|
|
@method rejectUsers
|
|
**/
|
|
rejectUsers: function() {
|
|
var controller = this;
|
|
Discourse.AdminUser.bulkReject(this.get('content').filterProperty('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: Discourse.SiteSettings.delete_user_max_post_age});
|
|
}
|
|
bootbox.alert(message);
|
|
controller.refreshUsers();
|
|
});
|
|
}
|
|
|
|
});
|