This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/controllers/flag_controller.js
2013-10-01 11:16:27 -04:00

100 lines
3.0 KiB
JavaScript

/**
This controller supports actions related to flagging
@class FlagController
@extends Discourse.ObjectController
@namespace Discourse
@uses Discourse.ModalFunctionality
@module Discourse
**/
Discourse.FlagController = Discourse.ObjectController.extend(Discourse.ModalFunctionality, {
onShow: function() {
this.set('selected', null);
},
submitEnabled: function() {
var selected = this.get('selected');
if (!selected) return false;
if (selected.get('is_custom_flag')) {
var len = this.get('message.length') || 0;
return len >= Discourse.SiteSettings.min_private_message_post_length &&
len <= Discourse.PostActionType.MAX_MESSAGE_LENGTH;
}
return true;
}.property('selected.is_custom_flag', 'message.length'),
submitDisabled: Em.computed.not('submitEnabled'),
// Staff accounts can "take action"
canTakeAction: function() {
// We can only take actions on non-custom flags
if (this.get('selected.is_custom_flag')) return false;
return Discourse.User.currentProp('staff');
}.property('selected.is_custom_flag'),
submitText: function(){
if (this.get('selected.is_custom_flag')) {
return I18n.t("flagging.notify_action");
} else {
return I18n.t("flagging.action");
}
}.property('selected.is_custom_flag'),
actions: {
takeAction: function() {
this.send('createFlag', {takeAction: true});
this.set('hidden', true);
},
createFlag: function(opts) {
var flagController = this;
var postAction = this.get('actionByName.' + this.get('selected.name_key'));
var params = this.get('selected.is_custom_flag') ? {message: this.get('message')} : {};
if (opts) params = $.extend(params, opts);
$('#discourse-modal').modal('hide');
postAction.act(params).then(function() {
flagController.send('closeModal');
}, function(errors) {
$('#discourse-modal').modal('show');
flagController.displayErrors(errors);
});
},
changePostActionType: function(action) {
this.set('selected', action);
}
},
canDeleteSpammer: function() {
if (Discourse.User.currentProp('staff') && this.get('selected.name_key') === 'spam') {
return this.get('userDetails.can_be_deleted') && this.get('userDetails.can_delete_all_posts');
} else {
return false;
}
}.property('selected.name_key', 'userDetails.can_be_deleted', 'userDetails.can_delete_all_posts'),
deleteSpammer: function() {
this.send('closeModal');
this.get('userDetails').deleteAsSpammer(function() { window.location.reload(); });
},
usernameChanged: function() {
this.set('userDetails', null);
this.fetchUserDetails();
}.observes('username'),
fetchUserDetails: function() {
if( Discourse.User.currentProp('staff') && this.get('username') ) {
var flagController = this;
Discourse.AdminUser.find(this.get('username').toLowerCase()).then(function(user){
flagController.set('userDetails', user);
});
}
}
});