diff --git a/app/logical/post_sets/post.rb b/app/logical/post_sets/post.rb index c91f31c7d..80bd19450 100644 --- a/app/logical/post_sets/post.rb +++ b/app/logical/post_sets/post.rb @@ -87,11 +87,15 @@ module PostSets end def banned_posts - posts.select(&:is_banned?) + posts.select { |p| p.banblocked? } end def censored_posts - hidden_posts - banned_posts + posts.select { |p| p.levelblocked? && !p.banblocked? } + end + + def safe_posts + posts.select { |p| p.safeblocked? && !p.levelblocked? && !p.banblocked? } end def use_sequential_paginator? diff --git a/app/models/post.rb b/app/models/post.rb index c1dc4e217..9c9d28d30 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1812,11 +1812,22 @@ class Post < ApplicationRecord ) has_bit_flags BOOLEAN_ATTRIBUTES + def safeblocked? + CurrentUser.safe_mode? && (rating != "s" || has_tag?("toddlercon|toddler|diaper|tentacle|rape|bestiality|beastiality|lolita|loli|nude|shota|pussy|penis")) + end + + def levelblocked? + !Danbooru.config.can_user_see_post?(CurrentUser.user, self) + end + + def banblocked? + is_banned? && !CurrentUser.is_gold? + end + def visible? - return false if !Danbooru.config.can_user_see_post?(CurrentUser.user, self) - return false if CurrentUser.safe_mode? && rating != "s" - return false if CurrentUser.safe_mode? && has_tag?("toddlercon|toddler|diaper|tentacle|rape|bestiality|beastiality|lolita|loli|nude|shota|pussy|penis") - return false if is_banned? && !CurrentUser.is_gold? + return false if safeblocked? + return false if levelblocked? + return false if banblocked? return true end diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index a618c07fe..4fe901fbb 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -155,10 +155,19 @@ class PostPresenter < Presenter categorized_tag_groups.flatten.slice(0, 25).join(", ").tr("_", " ") end + def safe_mode_message(template) + html = ["This image is unavailable on safe mode (#{Danbooru.config.app_name}). Go to "] + html << template.link_to("Danbooru", "http://danbooru.donmai.us") + html << " or disable safe mode to view (" + html << template.link_to("learn more", template.wiki_pages_path(title: "help:user_settings")) + html << ")." + html.join.html_safe + end + def image_html(template) - return template.content_tag("p", "The artist requested removal of this image") if @post.is_banned? && !CurrentUser.user.is_gold? - return template.content_tag("p", template.link_to("You need a gold account to see this image.", template.new_user_upgrade_path)) if !Danbooru.config.can_user_see_post?(CurrentUser.user, @post) - return template.content_tag("p", "This image is unavailable") if !@post.visible? + return template.content_tag("p", "The artist requested removal of this image") if @post.banblocked? + return template.content_tag("p", template.link_to("You need a gold account to see this image.", template.new_user_upgrade_path)) if @post.levelblocked? + return template.content_tag("p", safe_mode_message(template)) if @post.safeblocked? if @post.is_flash? template.render("posts/partials/show/flash", :post => @post) diff --git a/app/views/posts/partials/index/_posts.html.erb b/app/views/posts/partials/index/_posts.html.erb index 9b831b80f..3322db011 100644 --- a/app/views/posts/partials/index/_posts.html.erb +++ b/app/views/posts/partials/index/_posts.html.erb @@ -6,11 +6,15 @@ <% if post_set.hidden_posts.present? %>
<% end %>