diff --git a/app/models/queued_post.rb b/app/models/queued_post.rb index 66e75e96012..9dd479a73c2 100644 --- a/app/models/queued_post.rb +++ b/app/models/queued_post.rb @@ -64,9 +64,7 @@ class QueuedPost < ActiveRecord::Base QueuedPost.transaction do change_to!(:approved, approved_by) - if user.blocked? - user.update_columns(blocked: false) - end + UserBlocker.unblock(user, approved_by) if user.blocked? creator = PostCreator.new(user, create_options.merge(skip_validations: true)) created_post = creator.create diff --git a/app/services/spam_rule/auto_block.rb b/app/services/spam_rule/auto_block.rb index 8a6cea9f308..6c5d5018728 100644 --- a/app/services/spam_rule/auto_block.rb +++ b/app/services/spam_rule/auto_block.rb @@ -38,7 +38,7 @@ class SpamRule::AutoBlock def block_user Post.transaction do - if UserBlocker.block(@user, nil, {message: :too_many_spam_flags}) and SiteSetting.notify_mods_when_user_blocked + if UserBlocker.block(@user, Discourse.system_user, message: :too_many_spam_flags) && SiteSetting.notify_mods_when_user_blocked GroupMessage.create(Group[:moderators].name, :user_automatically_blocked, {user: @user, limit_once_per: false}) end end diff --git a/app/services/user_blocker.rb b/app/services/user_blocker.rb index 1ff9983b7e7..ee9ee1b68ea 100644 --- a/app/services/user_blocker.rb +++ b/app/services/user_blocker.rb @@ -27,8 +27,8 @@ class UserBlocker def hide_posts Post.where(user_id: @user.id).update_all(["hidden = true, hidden_reason_id = COALESCE(hidden_reason_id, ?)", Post.hidden_reasons[:new_user_spam_threshold_reached]]) - topic_ids = Post.where('user_id = ? and post_number = ?', @user.id, 1).pluck(:topic_id) - Topic.where(id: topic_ids).update_all({ visible: false }) unless topic_ids.empty? + topic_ids = Post.where(user_id: @user.id, post_number: 1).pluck(:topic_id) + Topic.where(id: topic_ids).update_all(visible: false) unless topic_ids.empty? end def unblock diff --git a/lib/new_post_manager.rb b/lib/new_post_manager.rb index 923315d9150..f354a277ad1 100644 --- a/lib/new_post_manager.rb +++ b/lib/new_post_manager.rb @@ -82,14 +82,11 @@ class NewPostManager result = manager.enqueue('default') - block = is_fast_typer?(manager) - - block ||= matches_auto_block_regex?(manager) - - manager.user.update_columns(blocked: true) if block + if is_fast_typer?(manager) || matches_auto_block_regex?(manager) + UserBlocker.block(manager.user, Discourse.system_user, keep_posts: true) + end result - end end diff --git a/spec/services/auto_block_spec.rb b/spec/services/auto_block_spec.rb index dcecb04c8ec..d23738835a8 100644 --- a/spec/services/auto_block_spec.rb +++ b/spec/services/auto_block_spec.rb @@ -100,7 +100,7 @@ describe SpamRule::AutoBlock do context 'user is not blocked' do before do - UserBlocker.expects(:block).with(user, nil, has_entries(message: :too_many_spam_flags)).returns(true) + UserBlocker.expects(:block).with(user, Discourse.system_user, message: :too_many_spam_flags).returns(true) end it 'prevents the user from making new posts' do @@ -126,7 +126,7 @@ describe SpamRule::AutoBlock do context 'user is already blocked' do before do - UserBlocker.expects(:block).with(user, nil, has_entries(message: :too_many_spam_flags)).returns(false) + UserBlocker.expects(:block).with(user, Discourse.system_user, message: :too_many_spam_flags).returns(false) end it "doesn't send a pm to moderators if the user is already blocked" do