FEATURE: watch title for automatic tagging (#12782)

Previously watched words ignored topic titles when applying auto tagging rules.

Also copy has been improved to reflect how the system behaves.

The text hints that we are only watching first post now
This commit is contained in:
Sam 2021-04-22 01:16:25 +10:00 committed by GitHub
parent 3e6c39228d
commit e4f1760bab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 5 deletions

View File

@ -63,7 +63,7 @@ module Jobs
end
def auto_tag(post)
word_watcher = WordWatcher.new(post.raw)
word_watcher = WordWatcher.new("#{post.topic.title} #{post.raw}")
old_tags = post.topic.tags.pluck(:name).to_set
new_tags = old_tags.dup

View File

@ -46,7 +46,7 @@ class WordWatcher
end
Regexp.new(regexp, Regexp::IGNORECASE)
end
rescue RegexpError => e
rescue RegexpError
raise if raise_errors
nil # Admin will be alerted via admin_dashboard_data.rb
end

View File

@ -4684,16 +4684,16 @@ en:
require_approval: "Require Approval"
flag: "Flag"
replace: "Replace"
tag: "Auto-tag"
tag: "Tag"
action_descriptions:
block: "Prevent posts containing these words from being posted. The user will see an error message when they try to submit their post."
censor: "Allow posts containing these words, but replace them with characters that hide the censored words."
require_approval: "Posts containing these words will require approval by staff before they can be seen."
flag: "Allow posts containing these words, but flag them as inappropriate so moderators can review them."
replace: "Replace words in posts with other words or links"
tag: "Automatically tag posts with these words"
tag: "Automatically tag topics based on first post"
form:
label: "New Word"
label: "Has the word"
placeholder: "full word or * as wildcard"
placeholder_regexp: "regular expression"
replacement_label: "Replacement"

View File

@ -106,6 +106,12 @@ describe Jobs::ProcessPost do
post = Fabricate(:post, raw: "Greetings?", cooked: "")
Jobs::ProcessPost.new.execute(post_id: post.id)
expect(post.topic.reload.tags.pluck(:name)).to contain_exactly("hello", "world")
topic = Fabricate(:topic, title: "Greetings? People")
post = Fabricate(:post, topic: topic, raw: "nothing yet", cooked: "")
Jobs::ProcessPost.new.execute(post_id: post.id)
expect(post.topic.reload.tags.pluck(:name)).to contain_exactly("hello", "world")
end
it "automatically tags first posts (regex)" do