Merge pull request #2178 from vikhyat/badge-system

Don't display granted badges in the badge grant combobox
This commit is contained in:
Régis Hanol 2014-03-25 12:04:23 +01:00
commit ae98bc91a1
4 changed files with 48 additions and 4 deletions

View File

@ -13,6 +13,36 @@ Discourse.AdminUserBadgesController = Ember.ArrayController.extend({
sortProperties: ['granted_at'],
sortAscending: false,
/**
Array of badges that have not been granted to this user.
@property grantableBadges
@type {Boolean}
**/
grantableBadges: function() {
var granted = {};
this.get('model').forEach(function(userBadge) {
granted[userBadge.get('badge_id')] = true;
});
var badges = [];
this.get('badges').forEach(function(badge) {
if (!granted[badge.get('id')]) {
badges.push(badge);
}
});
return badges;
}.property('badges.@each', 'model.@each'),
/**
Whether there are any badges that can be granted.
@property noBadges
@type {Boolean}
**/
noBadges: Em.computed.empty('grantableBadges'),
actions: {
/**
@ -25,6 +55,10 @@ Discourse.AdminUserBadgesController = Ember.ArrayController.extend({
var self = this;
Discourse.UserBadge.grant(badgeId, this.get('user.username')).then(function(userBadge) {
self.pushObject(userBadge);
Ember.run.next(function() {
// Update the selected badge ID after the combobox has re-rendered.
self.set('selectedBadgeId', self.get('grantableBadges')[0].get('id'));
});
}, function() {
// Failure
bootbox.alert(I18n.t('generic_error'));

View File

@ -19,9 +19,10 @@ Discourse.AdminUserBadgesRoute = Discourse.Route.extend({
Discourse.Badge.findAll().then(function(badges) {
controller.set('badges', badges);
if (badges.length > 0) {
controller.set('selectedBadgeId', badges[0].get('id'));
} else {
controller.set('noBadges', true);
var grantableBadges = controller.get('grantableBadges');
if (grantableBadges.length > 0) {
controller.set('selectedBadgeId', grantableBadges[0].get('id'));
}
}
controller.set('loading', false);
});

View File

@ -15,7 +15,7 @@
<p>{{i18n admin.badges.no_badges}}</p>
{{else}}
<br>
{{combobox valueAttribute="id" value=controller.selectedBadgeId content=controller.badges}}
{{combobox valueAttribute="id" value=controller.selectedBadgeId content=controller.grantableBadges}}
<button class='btn btn-primary' {{action grantBadge controller.selectedBadgeId}}>{{i18n admin.badges.grant}}</button>
{{/if}}

View File

@ -58,6 +58,10 @@ Discourse.ComboboxView = Discourse.View.extend({
$combo.trigger("liszt:updated");
}.observes('value'),
contentChanged: function() {
this.rerender();
}.observes('content.@each'),
didInsertElement: function() {
var $elem = this.$(),
self = this;
@ -80,6 +84,11 @@ Discourse.ComboboxView = Discourse.View.extend({
$elem.chosen().change(function(e) {
self.set('value', $(e.target).val());
});
},
willClearRender: function() {
var chosenId = this.$().attr('id') + "_chzn";
Ember.$("#" + chosenId).remove();
}
});