From b9a1e115fb88e1517126be7ef424212127cc08ec Mon Sep 17 00:00:00 2001 From: Albert Yi Date: Tue, 3 Jan 2017 16:02:36 -0800 Subject: [PATCH] add additional mod actions --- app/logical/bulk_revert.rb | 2 ++ app/models/comment.rb | 8 +++++++- app/models/forum_post.rb | 6 ++++++ app/models/ip_ban.rb | 8 +++++++- app/models/user_feedback.rb | 6 ++++++ test/factories/user.rb | 11 +++++++++++ test/unit/comment_test.rb | 16 +++++++++++++++- 7 files changed, 54 insertions(+), 3 deletions(-) diff --git a/app/logical/bulk_revert.rb b/app/logical/bulk_revert.rb index 932afda83..e95ea806a 100644 --- a/app/logical/bulk_revert.rb +++ b/app/logical/bulk_revert.rb @@ -7,6 +7,8 @@ class BulkRevert def self.process(constraints) obj = BulkRevert.new(constraints) + ModAction.log("#{CurrentUser.name} processed bulk revert for #{constraints.inspect}") + obj.find_post_versions.order("updated_at, id").each do |version| version.undo! end diff --git a/app/models/comment.rb b/app/models/comment.rb index 6a8cbbd35..5ab26a513 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -11,7 +11,13 @@ class Comment < ActiveRecord::Base before_validation :initialize_creator, :on => :create before_validation :initialize_updater after_create :update_last_commented_at_on_create + after_update(:if => lambda {|rec| CurrentUser.id != rec.creator_id}) do + ModAction.log("comment ##{rec.id} updated by #{CurrentUser.name}") + end after_destroy :update_last_commented_at_on_destroy + after_destroy(:if => lambda {|rec| CurrentUser.id != rec.creator_id}) do + ModAction.log("comment ##{rec.id} deleted by #{CurrentUser.name}") + end attr_accessible :body, :post_id, :do_not_bump_post, :is_deleted, :as => [:member, :gold, :platinum, :builder, :janitor, :moderator, :admin] attr_accessible :is_sticky, :as => [:moderator, :admin] mentionable( @@ -19,7 +25,7 @@ class Comment < ActiveRecord::Base :user_field => :creator_id, :title => "You were mentioned in a comment", :body => lambda {|rec, user_name| "You were mentioned in a \"comment\":/posts/#{rec.post_id}#comment-#{rec.id}\n\n---\n\n[i]#{rec.creator.name} said:[/i]\n\n#{ActionController::Base.helpers.excerpt(rec.body, user_name)}"} - ) + ) module SearchMethods def recent diff --git a/app/models/forum_post.rb b/app/models/forum_post.rb index ba9ba34c8..27b005499 100644 --- a/app/models/forum_post.rb +++ b/app/models/forum_post.rb @@ -19,6 +19,12 @@ class ForumPost < ActiveRecord::Base validate :topic_is_not_restricted, :on => :create before_destroy :validate_topic_is_unlocked after_save :delete_topic_if_original_post + after_update(:if => lambda {|rec| rec.updater_id != rec.creator_id}) do + ModAction.log("#{CurrentUser.name} updated forum post ##{rec.id}") + end + after_destroy(:if => lambda {|rec| rec.updater_id != rec.creator_id}) do + ModAction.log("#{CurrentUser.name} deleted forum post ##{rec.id}") + end mentionable( :message_field => :body, :user_field => :creator_id, diff --git a/app/models/ip_ban.rb b/app/models/ip_ban.rb index 38c5b7703..604809e5e 100644 --- a/app/models/ip_ban.rb +++ b/app/models/ip_ban.rb @@ -6,6 +6,12 @@ class IpBan < ActiveRecord::Base validates_format_of :ip_addr, :with => IP_ADDR_REGEX validates_uniqueness_of :ip_addr, :if => lambda {|rec| rec.ip_addr =~ IP_ADDR_REGEX} attr_accessible :ip_addr, :reason + after_create do + ModAction.log("#{CurrentUser.name} created ip ban for #{rec.ip_addr}") + end + after_destroy do + ModAction.log("#{CurrentUser.name} deleted ip ban for ##{rec.ip_addr}") + end def self.is_banned?(ip_addr) exists?(["ip_addr = ?", ip_addr]) @@ -31,7 +37,7 @@ class IpBan < ActiveRecord::Base return { "comments" => comments, "notes" => notes, - "pools" => pools, +# "pools" => pools, "wiki_pages" => wiki_pages } end diff --git a/app/models/user_feedback.rb b/app/models/user_feedback.rb index dc7536da4..92b02f1a7 100644 --- a/app/models/user_feedback.rb +++ b/app/models/user_feedback.rb @@ -10,6 +10,12 @@ class UserFeedback < ActiveRecord::Base validate :creator_is_gold validate :user_is_not_creator after_create :create_dmail + after_update(:if => lambda {|rec| rec.updater_id != rec.creator_id}) do + ModAction.log("#{CurrentUser.name} updated user feedback for #{rec.user_name}") + end + after_destroy(:if => lambda {|rec| rec.updater_id != rec.creator_id}) do + ModAction.log("#{CurrentUser.name} deleted user feedback for #{rec.user_name}") + end module SearchMethods def positive diff --git a/test/factories/user.rb b/test/factories/user.rb index 0bfa09fd5..5b8d5059b 100644 --- a/test/factories/user.rb +++ b/test/factories/user.rb @@ -38,6 +38,12 @@ FactoryGirl.define do bit_prefs User.flag_value_for("can_upload_free") end + factory(:contrib_user) do + level 32 + bit_prefs User.flag_value_for("can_upload_free") + end + + factory(:janitor_user) do level 35 can_approve_posts true @@ -48,6 +54,11 @@ FactoryGirl.define do can_approve_posts true end + factory(:mod_user) do + level 40 + can_approve_posts true + end + factory(:admin_user) do level 50 can_approve_posts true diff --git a/test/unit/comment_test.rb b/test/unit/comment_test.rb index 862b127ce..b133a1cdc 100644 --- a/test/unit/comment_test.rb +++ b/test/unit/comment_test.rb @@ -14,7 +14,6 @@ class CommentTest < ActiveSupport::TestCase CurrentUser.ip_addr = nil end - context "that mentions a user" do setup do @post = FactoryGirl.create(:post) @@ -206,6 +205,21 @@ class CommentTest < ActiveSupport::TestCase assert_equal(c1.id, matches.all[1].id) end + context "that is edited by a moderator" do + setup do + @post = FactoryGirl.create(:post) + @comment = FactoryGirl.create(:comment, :post_id => @post.id) + @mod = FactoryGirl.create(:moderator_user) + CurrentUser.user = @mod + end + + should "create a mod action" do + assert_difference("ModAction.count") do + @comment.update_attributes({:body => "nope"}, :as => :moderator) + end + end + end + context "that is below the score threshold" do should "be hidden if not stickied" do user = FactoryGirl.create(:user, :comment_threshold => 0)