Files
danbooru/app/logical/reports/post_flags.rb
2018-07-05 16:59:28 -07:00

45 lines
1.2 KiB
Ruby

module Reports
class PostFlags
attr_reader :user_id, :date_range
def initialize(user_id:, date_range:)
@user_id = user_id
@date_range = date_range
end
def candidates
PostFlag.where("posts.uploader_id = ? and posts.created_at >= ? and post_flags.creator_id <> ?", user_id, date_range, User.system.id).joins(:post).pluck("post_flags.creator_id").uniq
end
def attackers
matches = []
build.each do |flagger, uploaders|
if uploaders[user_id].to_i > 50
matches << flagger
end
end
return matches
end
def build
flaggers = Hash.new {|h, k| h[k] = {}}
candidates.each do |candidate|
PostFlag.joins(:post).where("post_flags.creator_id = ? and posts.created_at >= ?", candidate, date_range).select("posts.uploader_id").group("posts.uploader_id").having("count(*) > 1").count.each do |uploader_id, count|
flaggers[candidate][uploader_id] = count
end
sum = flaggers[candidate].values.sum
flaggers[candidate].each_key do |user_id|
flaggers[candidate][user_id] = DanbooruMath.ci_lower_bound(flaggers[candidate][user_id], sum)
end
end
return flaggers
end
end
end