discourse/plugins/discourse-solved/lib/discourse_solved/topic_extension.rb
Sérgio Saquetim dfc0798a6e
DEV: Enhance how the Solve plugin displays the accepted answer (#33757)
Enhanced the `solved` plugin with comprehensive improvements to solution
handling and UI components:

- Use the `PostQuotedContent` core component for rendering accepted
answers
- Added `@tracked` state management for solution acceptance UI
- Refactored `acceptPost` and `unacceptPost` functions with better error
handling
- Updated topic models to safely track accepted solutions
- Added MessageBus integration for secure message publishing
- Improved test coverage adding MessageBus verification and system tests
for accepting/unaccepting answers.
2025-07-23 12:01:35 -03:00

46 lines
1.1 KiB
Ruby

# frozen_string_literal: true
module DiscourseSolved::TopicExtension
extend ActiveSupport::Concern
prepended { has_one :solved, class_name: "DiscourseSolved::SolvedTopic", dependent: :destroy }
def accepted_answer_post_info
return nil unless 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,
excerpt:,
}
if SiteSetting.show_who_marked_solved
accepted_answer[:accepter_name] = accepter.name
accepted_answer[:accepter_username] = accepter.username
end
if !SiteSetting.enable_names || !SiteSetting.display_name_on_posts
accepted_answer[:name] = nil
accepted_answer[:accepter_name] = nil
end
accepted_answer
end
end