FEATURE: add staff action log for 'restore topic'
This commit is contained in:
parent
25284d2340
commit
d96c1058a2
|
@ -355,7 +355,7 @@ const Topic = RestModel.extend({
|
|||
'details.can_delete': false,
|
||||
'details.can_recover': true
|
||||
});
|
||||
return ajax("/t/" + this.get('id'), {
|
||||
return ajax(`/t/${this.get('id')}`, {
|
||||
data: { context: window.location.pathname },
|
||||
type: 'DELETE'
|
||||
});
|
||||
|
@ -369,7 +369,10 @@ const Topic = RestModel.extend({
|
|||
'details.can_delete': true,
|
||||
'details.can_recover': false
|
||||
});
|
||||
return ajax("/t/" + this.get('id') + "/recover", { type: 'PUT' });
|
||||
return ajax(`/t/${this.get('id')}/recover`, {
|
||||
data: { context: window.location.pathname },
|
||||
type: 'PUT'
|
||||
});
|
||||
},
|
||||
|
||||
// Update our attributes from a JSON result
|
||||
|
|
|
@ -450,7 +450,7 @@ class TopicsController < ApplicationController
|
|||
guardian.ensure_can_recover_topic!(topic)
|
||||
|
||||
first_post = topic.posts.with_deleted.order(:post_number).first
|
||||
PostDestroyer.new(current_user, first_post).recover
|
||||
PostDestroyer.new(current_user, first_post, context: params[:context]).recover
|
||||
|
||||
render body: nil
|
||||
end
|
||||
|
|
|
@ -70,7 +70,8 @@ class UserHistory < ActiveRecord::Base
|
|||
check_personal_message: 51,
|
||||
disabled_second_factor: 52,
|
||||
post_edit: 53,
|
||||
topic_published: 54
|
||||
topic_published: 54,
|
||||
recover_topic: 55
|
||||
)
|
||||
end
|
||||
|
||||
|
@ -119,7 +120,8 @@ class UserHistory < ActiveRecord::Base
|
|||
:check_personal_message,
|
||||
:disabled_second_factor,
|
||||
:post_edit,
|
||||
:topic_published
|
||||
:topic_published,
|
||||
:recover_topic
|
||||
]
|
||||
end
|
||||
|
||||
|
|
|
@ -59,24 +59,24 @@ class StaffActionLogger
|
|||
details: details.join("\n")))
|
||||
end
|
||||
|
||||
def log_topic_deletion(deleted_topic, opts = {})
|
||||
raise Discourse::InvalidParameters.new(:deleted_topic) unless deleted_topic && deleted_topic.is_a?(Topic)
|
||||
def log_topic_delete_recover(topic, action = "delete_topic", opts = {})
|
||||
raise Discourse::InvalidParameters.new(:topic) unless topic && topic.is_a?(Topic)
|
||||
|
||||
user = deleted_topic.user ? "#{deleted_topic.user.username} (#{deleted_topic.user.name})" : "(deleted user)"
|
||||
user = topic.user ? "#{topic.user.username} (#{topic.user.name})" : "(deleted user)"
|
||||
|
||||
details = [
|
||||
"id: #{deleted_topic.id}",
|
||||
"created_at: #{deleted_topic.created_at}",
|
||||
"id: #{topic.id}",
|
||||
"created_at: #{topic.created_at}",
|
||||
"user: #{user}",
|
||||
"title: #{deleted_topic.title}"
|
||||
"title: #{topic.title}"
|
||||
]
|
||||
|
||||
if first_post = deleted_topic.ordered_posts.first
|
||||
if first_post = topic.ordered_posts.with_deleted.first
|
||||
details << "raw: #{first_post.raw}"
|
||||
end
|
||||
|
||||
UserHistory.create(params(opts).merge(action: UserHistory.actions[:delete_topic],
|
||||
topic_id: deleted_topic.id,
|
||||
UserHistory.create(params(opts).merge(action: UserHistory.actions[action.to_sym],
|
||||
topic_id: topic.id,
|
||||
details: details.join("\n")))
|
||||
end
|
||||
|
||||
|
|
|
@ -3298,6 +3298,7 @@ en:
|
|||
revoke_badge: "revoke badge"
|
||||
check_email: "check email"
|
||||
delete_topic: "delete topic"
|
||||
recover_topic: "un-delete topic"
|
||||
delete_post: "delete post"
|
||||
impersonate: "impersonate"
|
||||
anonymize_user: "anonymize user"
|
||||
|
|
|
@ -69,7 +69,10 @@ class PostDestroyer
|
|||
topic.update_statistics
|
||||
recover_user_actions
|
||||
DiscourseEvent.trigger(:post_recovered, @post, @opts, @user)
|
||||
DiscourseEvent.trigger(:topic_recovered, topic, @user) if @post.is_first_post?
|
||||
if @post.is_first_post?
|
||||
DiscourseEvent.trigger(:topic_recovered, topic, @user)
|
||||
StaffActionLogger.new(@user).log_topic_delete_recover(topic, "recover_topic", @opts.slice(:context)) if @user.id != @post.user_id
|
||||
end
|
||||
end
|
||||
|
||||
def staff_recovered
|
||||
|
@ -115,7 +118,7 @@ class PostDestroyer
|
|||
remove_associated_replies
|
||||
remove_associated_notifications
|
||||
if @post.topic && @post.is_first_post?
|
||||
StaffActionLogger.new(@user).log_topic_deletion(@post.topic, @opts.slice(:context)) if @user.id != @post.user_id
|
||||
StaffActionLogger.new(@user).log_topic_delete_recover(@post.topic, "delete_topic", @opts.slice(:context)) if @user.id != @post.user_id
|
||||
@post.topic.trash!(@user)
|
||||
elsif @user.id != @post.user_id
|
||||
StaffActionLogger.new(@user).log_post_deletion(@post, @opts.slice(:context))
|
||||
|
|
|
@ -12,7 +12,7 @@ describe Admin::StaffActionLogsController do
|
|||
it 'generates logs' do
|
||||
|
||||
topic = Fabricate(:topic)
|
||||
_record = StaffActionLogger.new(Discourse.system_user).log_topic_deletion(topic)
|
||||
_record = StaffActionLogger.new(Discourse.system_user).log_topic_delete_recover(topic, "delete_topic")
|
||||
|
||||
get :index, params: { action_id: UserHistory.actions[:delete_topic] }, format: :json
|
||||
|
||||
|
|
|
@ -72,21 +72,39 @@ describe StaffActionLogger do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'log_topic_deletion' do
|
||||
let(:deleted_topic) { Fabricate(:topic) }
|
||||
describe 'log_topic_delete_recover' do
|
||||
let(:topic) { Fabricate(:topic) }
|
||||
|
||||
subject(:log_topic_deletion) { described_class.new(admin).log_topic_deletion(deleted_topic) }
|
||||
context "when deleting topic" do
|
||||
subject(:log_topic_delete_recover) { described_class.new(admin).log_topic_delete_recover(topic) }
|
||||
|
||||
it 'raises an error when topic is nil' do
|
||||
expect { logger.log_topic_deletion(nil) }.to raise_error(Discourse::InvalidParameters)
|
||||
it 'raises an error when topic is nil' do
|
||||
expect { logger.log_topic_delete_recover(nil) }.to raise_error(Discourse::InvalidParameters)
|
||||
end
|
||||
|
||||
it 'raises an error when topic is not a Topic' do
|
||||
expect { logger.log_topic_delete_recover(1) }.to raise_error(Discourse::InvalidParameters)
|
||||
end
|
||||
|
||||
it 'creates a new UserHistory record' do
|
||||
expect { log_topic_delete_recover }.to change { UserHistory.count }.by(1)
|
||||
end
|
||||
end
|
||||
|
||||
it 'raises an error when topic is not a Topic' do
|
||||
expect { logger.log_topic_deletion(1) }.to raise_error(Discourse::InvalidParameters)
|
||||
end
|
||||
context "when recovering topic" do
|
||||
subject(:log_topic_delete_recover) { described_class.new(admin).log_topic_delete_recover(topic, "recover_topic") }
|
||||
|
||||
it 'creates a new UserHistory record' do
|
||||
expect { log_topic_deletion }.to change { UserHistory.count }.by(1)
|
||||
it 'raises an error when topic is nil' do
|
||||
expect { logger.log_topic_delete_recover(nil, "recover_topic") }.to raise_error(Discourse::InvalidParameters)
|
||||
end
|
||||
|
||||
it 'raises an error when topic is not a Topic' do
|
||||
expect { logger.log_topic_delete_recover(1, "recover_topic") }.to raise_error(Discourse::InvalidParameters)
|
||||
end
|
||||
|
||||
it 'creates a new UserHistory record' do
|
||||
expect { log_topic_delete_recover }.to change { UserHistory.count }.by(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue