discourse/app/assets/javascripts/admin/models/flagged-post.js.es6

140 lines
3.9 KiB
Plaintext
Raw Normal View History

2016-06-30 13:55:44 -04:00
import { ajax } from 'discourse/lib/ajax';
import Post from 'discourse/models/post';
2017-09-06 10:21:07 -04:00
import computed from 'ember-addons/ember-computed-decorators';
import { popupAjaxError } from 'discourse/lib/ajax-error';
2017-09-11 16:44:20 -04:00
export default Post.extend({
2017-09-06 10:21:07 -04:00
@computed
summary() {
2013-06-17 03:15:56 -04:00
return _(this.post_actions)
.groupBy(function (a) { return a.post_action_type_id; })
.map(function (v,k) { return I18n.t('admin.flags.summary.action_type_' + k, { count: v.length }); })
.join(',');
2017-09-06 10:21:07 -04:00
},
2017-09-06 10:21:07 -04:00
@computed('last_revised_at', 'post_actions.@each.created_at')
wasEdited(lastRevisedAt) {
if (Ember.isEmpty(this.get("last_revised_at"))) { return false; }
2017-09-06 10:21:07 -04:00
lastRevisedAt = Date.parse(lastRevisedAt);
return _.some(this.get("post_actions"), function (postAction) {
return Date.parse(postAction.created_at) < lastRevisedAt;
});
2017-09-06 10:21:07 -04:00
},
@computed('post_actions')
hasDisposedBy() {
return this.get('post_actions').some(action => action.disposed_by);
},
2017-09-06 10:21:07 -04:00
@computed('post_actions.@each.name_key')
flaggedForSpam() {
2017-09-11 10:31:38 -04:00
return this.get('post_actions').every(action => action.name_key === 'spam');
2017-09-06 10:21:07 -04:00
},
2017-09-06 10:21:07 -04:00
@computed('post_actions.@each.targets_topic')
topicFlagged() {
2014-02-05 17:54:16 -05:00
return _.any(this.get('post_actions'), function(action) { return action.targets_topic; });
2017-09-06 10:21:07 -04:00
},
2014-02-05 17:54:16 -05:00
2017-09-06 10:21:07 -04:00
@computed('post_actions.@each.targets_topic')
postAuthorFlagged() {
2014-02-05 17:54:16 -05:00
return _.any(this.get('post_actions'), function(action) { return !action.targets_topic; });
2017-09-06 10:21:07 -04:00
},
2014-02-05 17:54:16 -05:00
2017-09-11 10:31:38 -04:00
@computed('flaggedForSpam')
2017-09-06 10:21:07 -04:00
canDeleteAsSpammer(flaggedForSpam) {
2017-09-11 10:31:38 -04:00
return flaggedForSpam &&
this.get('user.can_delete_all_posts') &&
this.get('user.can_be_deleted');
2017-09-06 10:21:07 -04:00
},
2017-09-06 10:21:07 -04:00
deletePost() {
if (this.get('post_number') === 1) {
2016-06-30 13:55:44 -04:00
return ajax('/t/' + this.topic_id, { type: 'DELETE', cache: false });
} else {
2016-06-30 13:55:44 -04:00
return ajax('/posts/' + this.id, { type: 'DELETE', cache: false });
}
},
2017-09-06 10:21:07 -04:00
disagreeFlags() {
return ajax('/admin/flags/disagree/' + this.id, { type: 'POST', cache: false }).catch(popupAjaxError);
},
2017-09-06 10:21:07 -04:00
deferFlags(deletePost) {
const action = () => {
return ajax('/admin/flags/defer/' + this.id, {
type: 'POST', cache: false, data: { delete_post: deletePost }
});
};
if (deletePost && this._hasDeletableReplies()) {
return this._actOnFlagAndDeleteReplies(action);
} else {
return action().catch(popupAjaxError);
}
},
2017-09-06 10:21:07 -04:00
agreeFlags(actionOnPost) {
const action = () => {
return ajax('/admin/flags/agree/' + this.id, {
type: 'POST', cache: false, data: { action_on_post: actionOnPost }
});
};
if (actionOnPost === 'delete' && this._hasDeletableReplies()) {
return this._actOnFlagAndDeleteReplies(action);
} else {
return action().catch(popupAjaxError);
}
},
_hasDeletableReplies() {
return this.get('post_number') > 1 && this.get('reply_count') > 0;
},
_actOnFlagAndDeleteReplies(action) {
return new Ember.RSVP.Promise((resolve, reject) => {
return ajax(`/posts/${this.id}/reply-ids/all.json`).then(replies => {
const buttons = [];
buttons.push({
label: I18n.t('no_value'),
callback() {
action()
.then(resolve)
.catch(error => {
popupAjaxError(error);
reject();
});
}
});
buttons.push({
label: I18n.t('yes_value'),
class: "btn-danger",
callback() {
Post.deleteMany(replies.map(r => r.id))
.then(action)
.then(resolve)
.catch(error => {
popupAjaxError(error);
reject();
});
}
});
bootbox.dialog(I18n.t("admin.flags.delete_replies", { count: replies.length }), buttons);
}).catch(error => {
popupAjaxError(error);
reject();
});
});
},
2017-09-06 10:21:07 -04:00
postHidden: Ember.computed.alias('hidden'),
2017-09-11 14:01:59 -04:00
deleted: Ember.computed.or('deleted_at', 'topic_deleted_at'),
});