Merge pull request #3393 from evazion/feat-safe-mode

Fix #3392: Add safe mode account setting.
This commit is contained in:
Albert Yi
2017-11-21 10:55:57 -08:00
committed by GitHub
6 changed files with 26 additions and 6 deletions

View File

@@ -265,6 +265,10 @@ class AnonymousUser
false
end
def enable_safe_mode?
false
end
User::Roles.reject {|r| r == :anonymous}.each do |name|
define_method("is_#{name}?") do
false

View File

@@ -74,11 +74,7 @@ class CurrentUser
end
def self.set_safe_mode(req)
if req.host =~ /safe/ || req.params[:safe_mode]
Thread.current[:safe_mode] = true
else
Thread.current[:safe_mode] = false
end
Thread.current[:safe_mode] = Danbooru.config.enable_safe_mode?(req, CurrentUser.user)
end
def self.method_missing(method, *params, &block)

View File

@@ -56,13 +56,14 @@ class User < ApplicationRecord
enable_recent_searches
disable_cropped_thumbnails
disable_mobile_gestures
enable_safe_mode
)
include Danbooru::HasBitFlags
has_bit_flags BOOLEAN_ATTRIBUTES, :field => "bit_prefs"
attr_accessor :password, :old_password
attr_accessible :dmail_filter_attributes, :enable_privacy_mode, :enable_post_navigation, :new_post_navigation_layout, :password, :old_password, :password_confirmation, :password_hash, :email, :last_logged_in_at, :last_forum_read_at, :has_mail, :receive_email_notifications, :comment_threshold, :always_resize_images, :favorite_tags, :blacklisted_tags, :name, :ip_addr, :time_zone, :default_image_size, :enable_sequential_post_navigation, :per_page, :hide_deleted_posts, :style_usernames, :enable_auto_complete, :custom_style, :show_deleted_children, :disable_categorized_saved_searches, :disable_tagged_filenames, :enable_recent_searches, :disable_cropped_thumbnails, :disable_mobile_gestures, :as => [:moderator, :gold, :platinum, :member, :anonymous, :default, :builder, :admin]
attr_accessible :dmail_filter_attributes, :enable_privacy_mode, :enable_post_navigation, :new_post_navigation_layout, :password, :old_password, :password_confirmation, :password_hash, :email, :last_logged_in_at, :last_forum_read_at, :has_mail, :receive_email_notifications, :comment_threshold, :always_resize_images, :favorite_tags, :blacklisted_tags, :name, :ip_addr, :time_zone, :default_image_size, :enable_sequential_post_navigation, :per_page, :hide_deleted_posts, :style_usernames, :enable_auto_complete, :custom_style, :show_deleted_children, :disable_categorized_saved_searches, :disable_tagged_filenames, :enable_recent_searches, :disable_cropped_thumbnails, :disable_mobile_gestures, :enable_safe_mode, :as => [:moderator, :gold, :platinum, :member, :anonymous, :default, :builder, :admin]
attr_accessible :level, :as => :admin
validates :name, user_name: true, on: :create

View File

@@ -47,6 +47,8 @@
<% if CurrentUser.user.is_gold? %>
<%= f.input :per_page, :label => "Posts per page", :as => :select, :collection => (1..100), :include_blank => false %>
<% end %>
<%= f.input :enable_safe_mode, :label => "Safe mode", :hint => "Show only safe images. Hide questionable and explicit images.", :as => :select, :include_blank => false, :collection => [["Yes", "true"], ["No", "false"]] %>
<%= f.input :blacklisted_tags, :hint => "Put any tag combinations you never want to see here. Each combination should go on a separate line. <a href='/wiki_pages/help:blacklists'>View help.</a>".html_safe, :input_html => {:size => "40x5", :data => {:autocomplete => "tag-query"}} %>
</fieldset>

View File

@@ -151,6 +151,11 @@ module Danbooru
2
end
# Whether safe mode should be enabled. Safe mode hides all non-rating:safe posts from view.
def enable_safe_mode?(request, user)
!!(request.host =~ /safe/ || request.params[:safe_mode] || user.enable_safe_mode?)
end
# Determines who can see ads.
def can_see_ads?(user)
!user.is_gold?

View File

@@ -24,9 +24,21 @@ class CurrentUserTest < ActiveSupport::TestCase
req = mock()
req.stubs(:host).returns("danbooru")
req.stubs(:params).returns({})
CurrentUser.user = FactoryGirl.create(:user)
CurrentUser.set_safe_mode(req)
assert_equal(false, CurrentUser.safe_mode?)
end
should "return true if the user has enabled the safe mode account setting" do
req = mock
req.stubs(:host).returns("danbooru")
req.stubs(:params).returns({})
CurrentUser.user = FactoryGirl.create(:user, enable_safe_mode: true)
CurrentUser.set_safe_mode(req)
assert_equal(true, CurrentUser.safe_mode?)
end
end
context "The current user" do