mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 06:30:15 +08:00
bf91532260
- Remove ArrayController - Remove {{view}} from templates - Replace many cases of needs: [‘controller’] with inject - Enable Ember Legacy Views
180 lines
5.8 KiB
JavaScript
180 lines
5.8 KiB
JavaScript
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
|
import { propertyEqual } from 'discourse/lib/computed';
|
|
import { escapeExpression } from 'discourse/lib/utilities';
|
|
import computed from 'ember-addons/ember-computed-decorators';
|
|
|
|
export default Ember.Controller.extend({
|
|
adminGroupsType: Ember.inject.controller(),
|
|
disableSave: false,
|
|
savingStatus: '',
|
|
|
|
currentPage: function() {
|
|
if (this.get("model.user_count") === 0) { return 0; }
|
|
return Math.floor(this.get("model.offset") / this.get("model.limit")) + 1;
|
|
}.property("model.limit", "model.offset", "model.user_count"),
|
|
|
|
totalPages: function() {
|
|
if (this.get("model.user_count") === 0) { return 0; }
|
|
return Math.floor(this.get("model.user_count") / this.get("model.limit")) + 1;
|
|
}.property("model.limit", "model.user_count"),
|
|
|
|
showingFirst: Em.computed.lte("currentPage", 1),
|
|
showingLast: propertyEqual("currentPage", "totalPages"),
|
|
|
|
aliasLevelOptions: function() {
|
|
return [
|
|
{ name: I18n.t("groups.alias_levels.nobody"), value: 0 },
|
|
{ name: I18n.t("groups.alias_levels.mods_and_admins"), value: 2 },
|
|
{ name: I18n.t("groups.alias_levels.members_mods_and_admins"), value: 3 },
|
|
{ name: I18n.t("groups.alias_levels.everyone"), value: 99 }
|
|
];
|
|
}.property(),
|
|
|
|
trustLevelOptions: function() {
|
|
return [
|
|
{ name: I18n.t("groups.trust_levels.none"), value: 0 },
|
|
{ name: 1, value: 1 }, { name: 2, value: 2 }, { name: 3, value: 3 }, { name: 4, value: 4 }
|
|
];
|
|
}.property(),
|
|
|
|
@computed
|
|
demoAvatarUrl() {
|
|
return Discourse.getURL('/images/avatar.png');
|
|
},
|
|
|
|
@computed('model.flair_url')
|
|
flairPreviewIcon() {
|
|
return this.get('model.flair_url') && this.get('model.flair_url').substr(0,3) === 'fa-';
|
|
},
|
|
|
|
@computed('flairPreviewIcon')
|
|
flairPreviewImage() {
|
|
return this.get('model.flair_url') && !this.get('flairPreviewIcon');
|
|
},
|
|
|
|
@computed('flairPreviewImage', 'model.flair_url', 'model.flairBackgroundHexColor', 'model.flairHexColor')
|
|
flairPreviewStyle() {
|
|
var style = '';
|
|
if (this.get('flairPreviewImage')) {
|
|
style += 'background-image: url(' + escapeExpression(this.get('model.flair_url')) + '); ';
|
|
}
|
|
if (this.get('model.flairBackgroundHexColor')) {
|
|
style += 'background-color: #' + this.get('model.flairBackgroundHexColor') + ';';
|
|
}
|
|
if (this.get('model.flairHexColor')) {
|
|
style += 'color: #' + this.get('model.flairHexColor') + ';';
|
|
}
|
|
return style;
|
|
},
|
|
|
|
@computed('model.flairBackgroundHexColor')
|
|
flairPreviewClasses() {
|
|
if (this.get('model.flairBackgroundHexColor')) {
|
|
return 'rounded';
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
next() {
|
|
if (this.get("showingLast")) { return; }
|
|
|
|
const group = this.get("model"),
|
|
offset = Math.min(group.get("offset") + group.get("limit"), group.get("user_count"));
|
|
|
|
group.set("offset", offset);
|
|
|
|
return group.findMembers();
|
|
},
|
|
|
|
previous() {
|
|
if (this.get("showingFirst")) { return; }
|
|
|
|
const group = this.get("model"),
|
|
offset = Math.max(group.get("offset") - group.get("limit"), 0);
|
|
|
|
group.set("offset", offset);
|
|
|
|
return group.findMembers();
|
|
},
|
|
|
|
removeMember(member) {
|
|
const self = this,
|
|
message = I18n.t("admin.groups.delete_member_confirm", { username: member.get("username"), group: this.get("model.name") });
|
|
return bootbox.confirm(message, I18n.t("no_value"), I18n.t("yes_value"), function(confirm) {
|
|
if (confirm) {
|
|
self.get("model").removeMember(member);
|
|
}
|
|
});
|
|
},
|
|
|
|
removeOwner(member) {
|
|
const self = this,
|
|
message = I18n.t("admin.groups.delete_owner_confirm", { username: member.get("username"), group: this.get("model.name") });
|
|
return bootbox.confirm(message, I18n.t("no_value"), I18n.t("yes_value"), function(confirm) {
|
|
if (confirm) {
|
|
self.get("model").removeOwner(member);
|
|
}
|
|
});
|
|
},
|
|
|
|
addOwners() {
|
|
if (Em.isEmpty(this.get("model.ownerUsernames"))) { return; }
|
|
this.get("model").addOwners(this.get("model.ownerUsernames")).catch(popupAjaxError);
|
|
this.set("model.ownerUsernames", null);
|
|
},
|
|
|
|
addMembers() {
|
|
if (Em.isEmpty(this.get("model.usernames"))) { return; }
|
|
this.get("model").addMembers(this.get("model.usernames")).catch(popupAjaxError);
|
|
this.set("model.usernames", null);
|
|
},
|
|
|
|
save() {
|
|
const group = this.get('model'),
|
|
groupsController = this.get("adminGroupsType"),
|
|
groupType = groupsController.get("type");
|
|
|
|
this.set('disableSave', true);
|
|
this.set('savingStatus', I18n.t('saving'));
|
|
|
|
let promise = group.get("id") ? group.save() : group.create().then(() => groupsController.get('model').addObject(group));
|
|
|
|
promise.then(() => {
|
|
this.transitionToRoute("adminGroup", groupType, group.get('name'));
|
|
this.set('savingStatus', I18n.t('saved'));
|
|
}).catch(popupAjaxError)
|
|
.finally(() => this.set('disableSave', false));
|
|
},
|
|
|
|
destroy() {
|
|
const group = this.get('model'),
|
|
groupsController = this.get('adminGroupsType'),
|
|
self = this;
|
|
|
|
if (!group.get('id')) {
|
|
self.transitionToRoute('adminGroupsType.index', 'custom');
|
|
return;
|
|
}
|
|
|
|
this.set('disableSave', true);
|
|
|
|
bootbox.confirm(
|
|
I18n.t("admin.groups.delete_confirm"),
|
|
I18n.t("no_value"),
|
|
I18n.t("yes_value"),
|
|
function(confirmed) {
|
|
if (confirmed) {
|
|
group.destroy().then(() => {
|
|
groupsController.get('model').removeObject(group);
|
|
self.transitionToRoute('adminGroups.index');
|
|
}).catch(() => bootbox.alert(I18n.t("admin.groups.delete_failed")))
|
|
.finally(() => self.set('disableSave', false));
|
|
} else {
|
|
self.set('disableSave', false);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
});
|