allow end user to recover a post they delete

automatically delete stubs after 1 day
This commit is contained in:
Sam
2013-07-22 17:48:24 +10:00
parent d68f30c09d
commit 1f3c5cb656
13 changed files with 131 additions and 23 deletions

View File

@@ -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
});
}

View File

@@ -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";

View File

@@ -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'),