diff --git a/app/controllers/user_feedbacks_controller.rb b/app/controllers/user_feedbacks_controller.rb index d23d5f0b9..dd50da64a 100644 --- a/app/controllers/user_feedbacks_controller.rb +++ b/app/controllers/user_feedbacks_controller.rb @@ -1,5 +1,6 @@ class UserFeedbacksController < ApplicationController before_action :gold_only, :only => [:new, :edit, :create, :update, :destroy] + before_action :check_no_feedback, only: [:new, :edit, :create, :update, :destroy] respond_to :html, :xml, :json def new @@ -53,6 +54,12 @@ class UserFeedbacksController < ApplicationController raise User::PrivilegeError unless user_feedback.editable_by?(CurrentUser.user) end + def check_no_feedback + if CurrentUser.no_feedback? + raise User::PrivilegeError + end + end + def user_feedback_params(context) permitted_params = %i[body category] permitted_params += %i[user_id user_name] if context == :create diff --git a/app/logical/popular_search_service.rb b/app/logical/popular_search_service.rb index f3fb29ebc..6136974e2 100644 --- a/app/logical/popular_search_service.rb +++ b/app/logical/popular_search_service.rb @@ -57,7 +57,9 @@ class PopularSearchService rescue => e Rails.logger.error(e.to_s) - NewRelic::Agent.notice_error(e) + if defined?(NewRelic) + NewRelic::Agent.notice_error(e) + end return [] end end diff --git a/app/logical/user_promotion.rb b/app/logical/user_promotion.rb index b3ff3ec89..216a7a41b 100644 --- a/app/logical/user_promotion.rb +++ b/app/logical/user_promotion.rb @@ -1,5 +1,5 @@ class UserPromotion - attr_reader :user, :promoter, :new_level, :options, :old_can_approve_posts, :old_can_upload_free + attr_reader :user, :promoter, :new_level, :options, :old_can_approve_posts, :old_can_upload_free, :old_no_flagging, :old_no_feedback def initialize(user, promoter, new_level, options = {}) @user = user @@ -13,6 +13,8 @@ class UserPromotion @old_can_approve_posts = user.can_approve_posts? @old_can_upload_free = user.can_upload_free? + @old_no_flagging = user.no_flagging? + @old_no_feedback = user.no_feedback? user.level = new_level @@ -23,6 +25,14 @@ class UserPromotion if options.has_key?(:can_upload_free) user.can_upload_free = options[:can_upload_free] end + + if options.has_key?(:no_feedback) + user.no_feedback = options[:no_feedback] + end + + if options.has_key?(:no_flagging) + user.no_flagging = options[:no_flagging] + end user.inviter_id = promoter.id @@ -44,6 +54,14 @@ private ModAction.log("\"#{promoter.name}\":/users/#{promoter.id} changed unlimited upload privileges for \"#{user.name}\":/users/#{user.id} from #{old_can_upload_free} to [b]#{user.can_upload_free?}[/b]",:user_upload_privilege) end + if old_no_flagging != user.no_flagging? + ModAction.log("\"#{promoter.name}\":/users/#{promoter.id} changed banned from flagging for \"#{user.name}\":/users/#{user.id} from #{old_no_flagging} to [b]#{user.no_flagging?}[/b]",:user_approval_privilege) + end + + if old_no_feedback != user.no_feedback? + ModAction.log("\"#{promoter.name}\":/users/#{promoter.id} changed banned from feedback for \"#{user.name}\":/users/#{user.id} from #{old_no_feedback} to [b]#{user.no_feedback?}[/b]",:user_approval_privilege) + end + if user.level_changed? category = options[:is_upgrade] ? :user_account_upgrade : :user_level_change ModAction.log(%{"#{user.name}":/users/#{user.id} level changed #{user.level_string_was} -> #{user.level_string}}, category) @@ -84,6 +102,18 @@ private messages << "You lost the ability to upload posts without limit." end + if user.no_feedback? && !old_no_feedback + messages << "You lost the ability to give user feedback." + elsif !user.no_feedback? && old_no_feedback + messages << "You gained the ability to give user feedback." + end + + if user.no_flagging? && !old_no_flagging + messages << "You lost the ability to flag posts." + elsif !user.no_flagging? && old_no_flagging + messages << "You gained the ability to flag posts." + end + messages.join("\n") end diff --git a/app/models/post_flag.rb b/app/models/post_flag.rb index 528cd57de..143433dcc 100644 --- a/app/models/post_flag.rb +++ b/app/models/post_flag.rb @@ -146,6 +146,10 @@ class PostFlag < ApplicationRecord def validate_creator_is_not_limited return if is_deletion + if creator.no_flagging? + errors[:creator] << "cannot flag posts" + end + if creator_id != User.system.id && PostFlag.for_creator(creator_id).where("created_at > ?", 30.days.ago).count >= CREATION_THRESHOLD report = Reports::PostFlags.new(user_id: post.uploader_id, date_range: 90.days.ago) diff --git a/app/models/user.rb b/app/models/user.rb index 5630123b0..dbeb8e09c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -61,6 +61,8 @@ class User < ApplicationRecord disable_post_tooltips enable_recommended_posts opt_out_mixpanel + no_flagging + no_feedback ) include Danbooru::HasBitFlags diff --git a/app/models/user_feedback.rb b/app/models/user_feedback.rb index 83e7bd755..b3930370b 100644 --- a/app/models/user_feedback.rb +++ b/app/models/user_feedback.rb @@ -101,6 +101,9 @@ class UserFeedback < ApplicationRecord if !creator.is_gold? errors[:creator] << "must be gold" return false + elsif creator.no_feedback? + errors[:creator] << "cannot submit feedback" + return false else return true end diff --git a/app/views/admin/users/edit.html.erb b/app/views/admin/users/edit.html.erb index c8c950a6b..d0dfe3a73 100644 --- a/app/views/admin/users/edit.html.erb +++ b/app/views/admin/users/edit.html.erb @@ -20,6 +20,16 @@ <%= select(:user, :can_approve_posts, [["Yes", true], ["No", false]]) %> +