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:
@@ -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?
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 %>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user