FIX: Include post in staff action logs when silencing a user

This commit is contained in:
Robin Ward 2018-02-13 15:33:15 -05:00
parent ed114177e7
commit 7348513848
5 changed files with 39 additions and 10 deletions

View File

@ -289,7 +289,8 @@ class Admin::UsersController < Admin::AdminController
silenced_till: params[:silenced_till], silenced_till: params[:silenced_till],
reason: params[:reason], reason: params[:reason],
message_body: message, message_body: message,
keep_posts: true keep_posts: true,
post_id: params[:post_id]
) )
if silencer.silence && message.present? if silencer.silence && message.present?
Jobs.enqueue( Jobs.enqueue(

View File

@ -289,13 +289,14 @@ class StaffActionLogger
def log_silence_user(user, opts = {}) def log_silence_user(user, opts = {})
raise Discourse::InvalidParameters.new(:user) unless user raise Discourse::InvalidParameters.new(:user) unless user
UserHistory.create( create_args = params(opts).merge(
params(opts).merge( action: UserHistory.actions[:silence_user],
action: UserHistory.actions[:silence_user], target_user_id: user.id,
target_user_id: user.id, details: opts[:details]
details: opts[:details]
)
) )
create_args[:post_id] = opts[:post_id] if opts[:post_id]
UserHistory.create(create_args)
end end
def log_unsilence_user(user, opts = {}) def log_unsilence_user(user, opts = {})

View File

@ -33,10 +33,12 @@ class UserSilencer
SystemMessage.create(@user, message_type) SystemMessage.create(@user, message_type)
if @by_user if @by_user
log_params = { context: context, details: details }
log_params[:post_id] = @opts[:post_id].to_i if @opts[:post_id]
@user_history = StaffActionLogger.new(@by_user).log_silence_user( @user_history = StaffActionLogger.new(@by_user).log_silence_user(
@user, @user,
context: context, log_params
details: details
) )
end end

View File

@ -615,6 +615,31 @@ describe Admin::UsersController do
expect(@reg_user).to be_silenced expect(@reg_user).to be_silenced
end end
it "can have an associated post" do
silence_post = Fabricate(:post, user: @reg_user)
put :silence, params: {
user_id: @reg_user.id,
post_id: silence_post.id,
post_action: 'edit',
post_edit: "this is the new contents for the post"
}, format: :json
expect(response).to be_success
silence_post.reload
expect(silence_post.raw).to eq("this is the new contents for the post")
log = UserHistory.where(
target_user_id: @reg_user.id,
action: UserHistory.actions[:silence_user]
).first
expect(log).to be_present
expect(log.post_id).to eq(silence_post.id)
@reg_user.reload
expect(@reg_user).to be_silenced
end
it "will set a length of time if provided" do it "will set a length of time if provided" do
future_date = 1.month.from_now.to_date future_date = 1.month.from_now.to_date
put( put(

View File

@ -60,7 +60,7 @@ describe UserSilencer do
end end
it "logs it with context" do it "logs it with context" do
SystemMessage.stubs(:create).returns(Fabricate.build(:post)) SystemMessage.stubs(:create)
expect { expect {
UserSilencer.silence(user, Fabricate(:admin)) UserSilencer.silence(user, Fabricate(:admin))
}.to change { UserHistory.count }.by(1) }.to change { UserHistory.count }.by(1)