mirror of
https://github.com/discourse/discourse-solved.git
synced 2025-07-04 12:52:17 +00:00
Introduce real-time message bus updates for accepted and unaccepted solutions, ensuring live synchronization across users. Key changes: - Publish solution acceptance/unacceptance updates via MessageBus. - Refactor `accepted_answer_post_info` and related logic for cleaner handling of accepted answer data. - Update both backend and frontend to support reactive updates when solutions are toggled. - Add loading states for Accept/Unaccept buttons to enhance UX during async operations.
39 lines
1.3 KiB
Ruby
39 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseSolved
|
|
module GuardianExtensions
|
|
def allow_accepted_answers?(category_id, tag_names = [])
|
|
return true if SiteSetting.allow_solved_on_all_topics
|
|
|
|
if SiteSetting.enable_solved_tags.present? && tag_names.present?
|
|
allowed_tags = SiteSetting.enable_solved_tags.split("|")
|
|
is_allowed = (tag_names & allowed_tags).present?
|
|
|
|
return true if is_allowed
|
|
end
|
|
|
|
return false if category_id.blank?
|
|
if !::DiscourseSolved::AcceptedAnswerCache.allowed
|
|
::DiscourseSolved::AcceptedAnswerCache.reset_accepted_answer_cache
|
|
end
|
|
::DiscourseSolved::AcceptedAnswerCache.allowed.include?(category_id)
|
|
end
|
|
|
|
def can_accept_answer?(topic, post)
|
|
return false if !authenticated?
|
|
if !topic || topic.private_message? || !post || post.post_number <= 1 || post.whisper?
|
|
return false
|
|
end
|
|
return false if !allow_accepted_answers?(topic.category_id, topic.tags.map(&:name))
|
|
|
|
return true if is_staff?
|
|
if current_user.in_any_groups?(SiteSetting.accept_all_solutions_allowed_groups_map)
|
|
return true
|
|
end
|
|
return true if is_category_group_moderator?(topic.category)
|
|
|
|
topic.user_id == current_user.id && !topic.closed && SiteSetting.accept_solutions_topic_author
|
|
end
|
|
end
|
|
end
|