From 3b37bb6142b536e9ec2e99f2f0f39ea459da0b27 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 4 May 2017 16:40:09 -0500 Subject: [PATCH] flags: add 3 day flagging cooldown period. --- app/models/post_flag.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/models/post_flag.rb b/app/models/post_flag.rb index 17a625653..a4f0ff31a 100644 --- a/app/models/post_flag.rb +++ b/app/models/post_flag.rb @@ -7,6 +7,8 @@ class PostFlag < ActiveRecord::Base BANNED = "Artist requested removal" end + COOLDOWN_PERIOD = 3.days + belongs_to :creator, :class_name => "User" belongs_to :post validates_presence_of :reason, :creator_id, :creator_ip_addr @@ -18,6 +20,10 @@ class PostFlag < ActiveRecord::Base attr_accessible :post, :post_id, :reason, :is_resolved, :is_deletion attr_accessor :is_deletion + scope :by_users, lambda { where.not(creator: User.system) } + scope :by_system, lambda { where(creator: User.system) } + scope :in_cooldown, lambda { by_users.where("created_at >= ?", COOLDOWN_PERIOD.ago) } + module SearchMethods def reason_matches(query) if query =~ /\*/ @@ -149,6 +155,11 @@ class PostFlag < ActiveRecord::Base def validate_post errors[:post] << "is locked and cannot be flagged" if post.is_status_locked? errors[:post] << "is deleted" if post.is_deleted? + + flag = post.flags.in_cooldown.last + if flag.present? + errors[:post] << "cannot be flagged more than once every #{COOLDOWN_PERIOD.inspect} (last flagged: #{flag.created_at.to_s(:long)})" + end end def initialize_creator