posts: add "general" rating; rename "safe" rating to "sensitive".

* Add "general" rating.
* Rename "safe" rating to "sensitive".
* Change safe mode to include both rating:s and rating:g.
* Treat rating:safe as a synonym for rating:sensitive.
* Link "howto:rate" in the post edit form.
This commit is contained in:
evazion
2022-05-22 12:08:46 -05:00
parent d346adabc9
commit 81bd86d202
11 changed files with 62 additions and 25 deletions

View File

@@ -63,7 +63,7 @@ class DiscordSlashCommand
end
def is_censored?
(post.rating != "s" && !is_nsfw_channel?) || !post.visible?(User.anonymous) || censored_tags.any? { |tag| tag.in?(post.tag_array) }
(post.rating.in?(["q", "e"]) && !is_nsfw_channel?) || !post.visible?(User.anonymous) || censored_tags.any? { |tag| tag.in?(post.tag_array) }
end
def is_nsfw_channel?

View File

@@ -42,13 +42,13 @@ class DiscordSlashCommand
return nil if tag.nil? || tag.empty?
if tag.artist?
search = "#{tag.name} rating:safe"
search = "#{tag.name} is:sfw"
elsif tag.copyright?
search = "#{tag.name} rating:safe everyone copytags:<5 -parody -crossover"
search = "#{tag.name} is:sfw everyone copytags:<5 -parody -crossover"
elsif tag.character?
search = "#{tag.name} rating:safe solo chartags:<5"
search = "#{tag.name} is:sfw solo chartags:<5"
else # meta or general
search = "#{tag.name} rating:safe -animated -6+girls -comic"
search = "#{tag.name} is:sfw -animated -6+girls -comic"
end
Post.system_tag_match(search).limit(500).sort_by(&:score).last

View File

@@ -189,12 +189,12 @@ class PostQuery
TagAlias.aliases_for(tag_names)
end
# Implicit metatags are metatags added by the user's account settings. rating:s is implicit under safe mode.
# Implicit metatags are metatags added by the user's account settings. rating:g,s is implicit under safe mode.
def implicit_metatags
return [] unless safe_mode?
tags = Danbooru.config.safe_mode_restricted_tags.map { |tag| -AST.tag(tag) }
[AST.metatag("rating", "s"), *tags]
[AST.metatag("rating", "g,s"), *tags]
end
# XXX unify with PostSets::Post#show_deleted?

View File

@@ -11,11 +11,18 @@ class Post < ApplicationRecord
RESTRICTED_TAGS_REGEX = /(?:^| )(?:#{Danbooru.config.restricted_tags.join("|")})(?:$| )/o
RATINGS = {
s: "Safe",
g: "General",
s: "Sensitive",
q: "Questionable",
e: "Explicit",
}.with_indifferent_access
RATING_ALIASES = {
safe: ["s"],
nsfw: ["q", "e"],
sfw: ["g", "s"],
}.with_indifferent_access
deletable
has_bit_flags %w[has_embedded_notes _unused_has_cropped is_taken_down]
@@ -1064,16 +1071,14 @@ class Post < ApplicationRecord
where(has_children: true)
when "child"
where.not(parent: nil)
when "sfw"
where.not(rating: ["q", "e"])
when "nsfw"
where(rating: ["q", "e"])
when *AutocompleteService::POST_STATUSES
status_matches(value, current_user)
when *MediaAsset::FILE_TYPES
attribute_matches(value, :file_ext, :enum)
when *Post::RATINGS.values.map(&:downcase)
rating_matches(value)
when *Post::RATING_ALIASES.keys
where(rating: Post::RATING_ALIASES.fetch(value.downcase))
else
none
end

View File

@@ -21,7 +21,7 @@
<video:publication_date><%= post.created_at.iso8601 %></video:publication_date>
<video:title><%= "Post ##{post.id}" %></video:title>
<video:description><%= post.tag_string %></video:description>
<video:family_friendly><%= post.rating == "s" ? "yes" : "no" %></video:family_friendly>
<video:family_friendly><%= post.rating == "g" ? "yes" : "no" %></video:family_friendly>
</video:video>
<% end %>
<% end %>

View File

@@ -15,7 +15,7 @@
<%= f.input :old_source, as: :hidden, input_html: { value: post.source } %>
<%= f.input :old_rating, as: :hidden, input_html: { value: post.rating } %>
<%= f.input :rating, collection: Post::RATINGS.invert.reverse_each.to_h, as: :radio_buttons, boolean_style: :inline %>
<%= f.input :rating, label: "Rating (#{link_to_wiki "?", "howto:rate"})".html_safe, collection: Post::RATINGS.invert.reverse_each.to_h, as: :radio_buttons, boolean_style: :inline %>
<fieldset class="inline-fieldset post_has_embedded_notes_fieldset">
<label>Notes</label>

View File

@@ -46,7 +46,7 @@
<%= hidden_field_tag :upload_media_asset_id, upload_media_asset.id %>
<%= f.input :source, as: :string, input_html: { value: post.source } %>
<%= f.input :rating, collection: Post::RATINGS.invert.reverse_each.to_h, as: :radio_buttons, selected: post.rating %>
<%= f.input :rating, label: "Rating (#{link_to_wiki "?", "howto:rate"})".html_safe, collection: Post::RATINGS.invert.reverse_each.to_h, as: :radio_buttons, selected: post.rating %>
<%= f.input :parent_id, label: "Parent ID", as: :string, input_html: { value: post.parent_id } %>
<div class="input upload_artist_commentary_container">