FIX: Process tag synonyms when approving reviewable queued post (#30810)

Followup 72c4709a5ab26f00e32b65d874b3a206d679181e

Previously we made a fix to allow skip validations when tagging
a topic via TopicCreator. However, this flow also skips a lot of
the more in-depth work on tags we do when creating a topic, like
processing tag synonyms. When approving reviewable queued posts,
we skip validations, so this would cause an issue where a topic
was approved and the tag synonyms weren't applied.

This commit changes the logic so we attempt the more complete
`DiscourseTagging.tag_topic_by_names` call first and if this fails
and skip validations is on, then we do
`DiscourseTagging.add_or_create_tags_by_name`.
This at least gives a chance for the full workflow to work first.
This commit is contained in:
Martin Brennan
2025-01-16 11:01:45 +10:00
committed by GitHub
parent 99f5670c30
commit 35507d4090
2 changed files with 18 additions and 5 deletions

View File

@ -192,11 +192,14 @@ class TopicCreator
def setup_tags(topic)
if @opts[:tags].present?
if @opts[:skip_validations]
DiscourseTagging.add_or_create_tags_by_name(topic, @opts[:tags])
else
valid_tags = DiscourseTagging.tag_topic_by_names(topic, @guardian, @opts[:tags])
unless valid_tags
# We can try the full tagging workflow which does validations and other
# things like replacing synonyms first, but if this fails then we can try
# the simple workflow if validations are skipped.
valid_tags = DiscourseTagging.tag_topic_by_names(topic, @guardian, @opts[:tags])
if !valid_tags
if @opts[:skip_validations]
DiscourseTagging.add_or_create_tags_by_name(topic, @opts[:tags])
else
topic.errors.add(:base, :unable_to_tag)
rollback_from_errors!(topic)
end