discourse-solved/lib/discourse_solved/topic_view_serializer_extension.rb
Natalie Tay 5a0c875885
FEATURE: Show 'marked solved by' in OP when topic is solved (#343)
Depends on: https://github.com/discourse/discourse-solved/pull/342

This feature adds the "Marked solved as" information to the solved post appended to OP.

Originally, I had moved the widget usage to a [component](39baa0be4a/assets/javascripts/discourse/components/solved-post.gjs), but due to "cooking quotes", after some internal discussion (t/95318/25) we will stick to widgets for now as the post-stream gets modernized.
2025-03-25 17:14:02 +08:00

52 lines
1.2 KiB
Ruby

# frozen_string_literal: true
module DiscourseSolved::TopicViewSerializerExtension
extend ActiveSupport::Concern
prepended { attributes :accepted_answer }
def include_accepted_answer?
SiteSetting.solved_enabled? && object.topic.solved.present?
end
def accepted_answer
accepted_answer_post_info
end
private
def accepted_answer_post_info
solved = object.topic.solved
answer_post = solved.answer_post
answer_post_user = answer_post.user
accepter = solved.accepter
excerpt =
if SiteSetting.solved_quote_length > 0
PrettyText.excerpt(
answer_post.cooked,
SiteSetting.solved_quote_length,
keep_emoji_images: true,
)
else
nil
end
accepted_answer = {
post_number: answer_post.post_number,
username: answer_post_user.username,
name: answer_post_user.name,
accepter_username: accepter.username,
accepter_name: accepter.name,
excerpt:,
}
if !SiteSetting.enable_names || !SiteSetting.display_name_on_posts
accepted_answer[:name] = nil
accepted_answer[:accepter_name] = nil
end
accepted_answer
end
end