FEATURE: Change user groups in bulk via admin

This commit is contained in:
Robin Ward
2015-10-26 15:56:59 -04:00
parent e1d5503053
commit 47e25648df
11 changed files with 143 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
import computed from 'ember-addons/ember-computed-decorators';
import { popupAjaxError } from 'discourse/lib/ajax-error';
export default Ember.Controller.extend({
users: null,
groupId: null,
saving: false,
@computed('saving', 'users', 'groupId')
buttonDisabled(saving, users, groupId) {
return saving || !groupId || !users || !users.length;
},
actions: {
addToGroup() {
if (this.get('saving')) { return; }
const users = this.get('users').split("\n")
.uniq()
.reject(x => x.length === 0);
this.set('saving', true);
Discourse.ajax('/admin/groups/bulk', {
data: { users, group_id: this.get('groupId') },
method: 'PUT'
}).then(() => {
this.transitionToRoute('adminGroups.bulkComplete');
}).catch(popupAjaxError).finally(() => {
this.set('saving', false);
});
}
}
});

View File

@@ -0,0 +1,13 @@
import Group from 'discourse/models/group';
export default Ember.Route.extend({
model() {
return Group.findAll().then(groups => {
return groups.filter(g => !g.get('automatic'));
});
},
setupController(controller, groups) {
controller.setProperties({ groups, groupId: null, users: null });
}
});

View File

@@ -49,6 +49,8 @@ export default {
});
this.resource('adminGroups', { path: '/groups' }, function() {
this.route('bulk');
this.route('bulkComplete', { path: 'bulk-complete' });
this.resource('adminGroupsType', { path: '/:type' }, function() {
this.resource('adminGroup', { path: '/:name' });
});

View File

@@ -0,0 +1 @@
<p>{{i18n "admin.groups.bulk_complete"}}</p>

View File

@@ -0,0 +1,19 @@
<div class='groups-bulk'>
<p>{{i18n "admin.groups.bulk_paste"}}</p>
<div class='control'>
{{textarea value=users class="paste-users"}}
</div>
<div class='control'>
{{combo-box content=groups valueAttribute="id" value=groupId none="admin.groups.bulk_select"}}
</div>
<div class='control'>
{{d-button disabled=buttonDisabled
class="btn-primary"
action="addToGroup"
icon="plus"
label="admin.groups.bulk"}}
</div>
</div>

View File

@@ -1,6 +1,7 @@
{{#admin-nav}}
{{nav-item route='adminGroupsType' routeParam='custom' label='admin.groups.custom'}}
{{nav-item route='adminGroupsType' routeParam='automatic' label='admin.groups.automatic'}}
{{nav-item route='adminGroups.bulk' label='admin.groups.bulk'}}
{{/admin-nav}}
<div class="admin-container">