Create the ability to send reports to moderators
- Limited to Builders+ -- Moderator+ can also use as they may be too busy ATM - Only on users, comments, and forum posts - Multiple reports can be generated per instance - Primarily posts to a moderator-only topic for viewability - Secondarily has a table for searchability -- Viewable only by moderators
This commit is contained in:
@@ -7,6 +7,7 @@ class Comment < ApplicationRecord
|
||||
belongs_to :post
|
||||
belongs_to_creator
|
||||
belongs_to_updater
|
||||
has_many :moderation_reports, as: :model
|
||||
has_many :votes, :class_name => "CommentVote", :dependent => :destroy
|
||||
after_create :update_last_commented_at_on_create
|
||||
after_update(:if => ->(rec) {(!rec.is_deleted? || !rec.saved_change_to_is_deleted?) && CurrentUser.id != rec.creator_id}) do |rec|
|
||||
@@ -127,6 +128,10 @@ class Comment < ApplicationRecord
|
||||
updater_id == user.id || user.is_moderator?
|
||||
end
|
||||
|
||||
def reportable_by?(user)
|
||||
user.is_builder? && creator_id != user.id && !creator.is_moderator?
|
||||
end
|
||||
|
||||
def voted_by?(user)
|
||||
return false if user.is_anonymous?
|
||||
user.id.in?(votes.map(&:user_id))
|
||||
|
||||
@@ -6,6 +6,7 @@ class ForumPost < ApplicationRecord
|
||||
belongs_to_updater
|
||||
belongs_to :topic, :class_name => "ForumTopic"
|
||||
has_many :dtext_links, as: :model, dependent: :destroy
|
||||
has_many :moderation_reports, as: :model
|
||||
has_many :votes, class_name: "ForumPostVote"
|
||||
has_one :tag_alias
|
||||
has_one :tag_implication
|
||||
@@ -93,6 +94,10 @@ class ForumPost < ApplicationRecord
|
||||
bulk_update_request || tag_alias || tag_implication
|
||||
end
|
||||
|
||||
def reportable_by?(user)
|
||||
user.is_builder? && creator_id != user.id && !creator.is_moderator?
|
||||
end
|
||||
|
||||
def votable?
|
||||
TagAlias.where(forum_post_id: id).exists? ||
|
||||
TagImplication.where(forum_post_id: id).exists? ||
|
||||
|
||||
57
app/models/moderation_report.rb
Normal file
57
app/models/moderation_report.rb
Normal file
@@ -0,0 +1,57 @@
|
||||
class ModerationReport < ApplicationRecord
|
||||
belongs_to :model, polymorphic: true
|
||||
belongs_to_creator
|
||||
|
||||
scope :user, -> { where(model_type: "User") }
|
||||
scope :comment, -> { where(model_type: "Comment") }
|
||||
scope :forum_post, -> { where(model_type: "ForumPost") }
|
||||
|
||||
def forum_topic_title
|
||||
"Reports requiring moderation"
|
||||
end
|
||||
|
||||
def forum_topic_body
|
||||
"This topic deals with moderation events as reported by Builders. Reports can be filed against users, comments, or forum posts."
|
||||
end
|
||||
|
||||
def forum_topic
|
||||
topic = ForumTopic.find_by_title(forum_topic_title)
|
||||
if topic.nil?
|
||||
topic = CurrentUser.as_system do
|
||||
ForumTopic.create(title: forum_topic_title, category_id: 0, min_level: User::Levels::MODERATOR, original_post_attributes: {body: forum_topic_body})
|
||||
end
|
||||
end
|
||||
topic
|
||||
end
|
||||
|
||||
def forum_post_message
|
||||
messages = ["[b]Submitted by:[/b] @#{creator.name}"]
|
||||
case model_type
|
||||
when "User"
|
||||
messages << "[b]Submitted against:[/b] @#{model.name}"
|
||||
when "Comment"
|
||||
messages << "[b]Submitted against[/b]: comment ##{model_id}"
|
||||
when "ForumPost"
|
||||
messages << "[b]Submitted against[/b]: forum ##{model_id}"
|
||||
end
|
||||
messages << ""
|
||||
messages << "[quote]"
|
||||
messages << "[b]Reason:[/b]"
|
||||
messages << ""
|
||||
messages << reason
|
||||
messages << "[/quote]"
|
||||
messages.join("\n")
|
||||
end
|
||||
|
||||
def create_forum_post!
|
||||
updater = ForumUpdater.new(forum_topic)
|
||||
updater.update(forum_post_message)
|
||||
end
|
||||
|
||||
def self.search(params)
|
||||
q = super
|
||||
q = q.search_attributes(params, :model_type, :model_id, :creator_id)
|
||||
|
||||
q.apply_default_order(params)
|
||||
end
|
||||
end
|
||||
@@ -93,6 +93,7 @@ class User < ApplicationRecord
|
||||
has_many :wiki_page_versions, foreign_key: :updater_id
|
||||
has_many :feedback, :class_name => "UserFeedback", :dependent => :destroy
|
||||
has_many :forum_post_votes, dependent: :destroy, foreign_key: :creator_id
|
||||
has_many :moderation_reports, as: :model
|
||||
has_many :posts, :foreign_key => "uploader_id"
|
||||
has_many :post_appeals, foreign_key: :creator_id
|
||||
has_many :post_approvals, :dependent => :destroy
|
||||
@@ -791,6 +792,10 @@ class User < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
def reportable_by?(user)
|
||||
user.is_builder? && id != user.id && !is_moderator?
|
||||
end
|
||||
|
||||
def hide_favorites?
|
||||
!CurrentUser.is_admin? && enable_private_favorites? && CurrentUser.user.id != id
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user