mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
allow end user to recover a post they delete
automatically delete stubs after 1 day
This commit is contained in:
@@ -27,12 +27,12 @@ Discourse.Post = Discourse.Model.extend({
|
||||
deleted: Em.computed.or('deleted_at', 'deletedViaTopic'),
|
||||
|
||||
postDeletedBy: function() {
|
||||
if (this.get('firstPost')) { return this.get('topic.deleted_by') }
|
||||
if (this.get('firstPost')) { return this.get('topic.deleted_by'); }
|
||||
return this.get('deleted_by');
|
||||
}.property('firstPost', 'deleted_by', 'topic.deleted_by'),
|
||||
|
||||
postDeletedAt: function() {
|
||||
if (this.get('firstPost')) { return this.get('topic.deleted_at') }
|
||||
if (this.get('firstPost')) { return this.get('topic.deleted_at'); }
|
||||
return this.get('deleted_at');
|
||||
}.property('firstPost', 'deleted_at', 'topic.deleted_at'),
|
||||
|
||||
@@ -199,13 +199,23 @@ Discourse.Post = Discourse.Model.extend({
|
||||
@method recover
|
||||
**/
|
||||
recover: function() {
|
||||
this.setProperties({
|
||||
var post = this;
|
||||
post.setProperties({
|
||||
deleted_at: null,
|
||||
deleted_by: null,
|
||||
can_delete: true
|
||||
user_deleted: false,
|
||||
can_delete: false
|
||||
});
|
||||
|
||||
return Discourse.ajax("/posts/" + (this.get('id')) + "/recover", { type: 'PUT', cache: false });
|
||||
return Discourse.ajax("/posts/" + (this.get('id')) + "/recover", { type: 'PUT', cache: false }).then(function(data){
|
||||
post.setProperties({
|
||||
cooked: data.cooked,
|
||||
raw: data.raw,
|
||||
user_deleted: false,
|
||||
can_delete: true,
|
||||
version: data.version
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -226,7 +236,10 @@ Discourse.Post = Discourse.Model.extend({
|
||||
this.setProperties({
|
||||
cooked: Discourse.Markdown.cook(I18n.t("post.deleted_by_author")),
|
||||
can_delete: false,
|
||||
version: this.get('version') + 1
|
||||
version: this.get('version') + 1,
|
||||
can_recover: true,
|
||||
can_edit: false,
|
||||
user_deleted: true
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ Discourse.PostMenuView = Discourse.View.extend({
|
||||
} else {
|
||||
|
||||
// The delete actions target the post iteself
|
||||
if (post.get('deleted_at')) {
|
||||
if (post.get('deleted_at') || post.get('user_deleted')) {
|
||||
if (!post.get('can_recover')) { return; }
|
||||
label = "post.controls.undelete";
|
||||
action = "recover";
|
||||
|
||||
@@ -12,10 +12,15 @@ Discourse.PostView = Discourse.View.extend({
|
||||
classNameBindings: ['postTypeClass',
|
||||
'selected',
|
||||
'post.hidden:hidden',
|
||||
'post.deleted',
|
||||
'addDeletedClass:deleted',
|
||||
'parentPost:replies-above'],
|
||||
postBinding: 'content',
|
||||
|
||||
addDeletedClass: function() {
|
||||
var post = this.get('post');
|
||||
return post.get('deleted') || post.get('user_deleted');
|
||||
}.property('post.deleted','post.user_deleted'),
|
||||
|
||||
postTypeClass: function() {
|
||||
return this.get('post.post_type') === Discourse.Site.instance().get('post_types.moderator_action') ? 'moderator' : 'regular';
|
||||
}.property('post.post_type'),
|
||||
|
||||
Reference in New Issue
Block a user