From cf368c19cb858689a8e802557ab291772afe677e Mon Sep 17 00:00:00 2001 From: Martin Brennan Date: Tue, 31 Aug 2021 13:30:17 +1000 Subject: [PATCH] FIX: Stop register_topic_list_preload_user_ids from breaking old versions (#160) We need a proper fix, but this stops the bleeding for now. Wrapped code related to `register_topic_list_preload_user_ids` in a `respond_to?(:register_topic_list_preload_user_ids)` block because this API is not available in beta or stable versions of Discourse. --- plugin.rb | 82 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/plugin.rb b/plugin.rb index 6f714e5..9f6c902 100644 --- a/plugin.rb +++ b/plugin.rb @@ -695,53 +695,55 @@ SQL .count end - class ::Topic - attr_accessor :accepted_answer_user_id - end + if respond_to?(:register_topic_list_preload_user_ids) + class ::Topic + attr_accessor :accepted_answer_user_id + end - register_topic_list_preload_user_ids do |topics, user_ids, topic_list| - answer_post_ids = TopicCustomField - .select('value::INTEGER') - .where(name: 'accepted_answer_post_id') - .where(topic_id: topics.map(&:id)) - answer_user_ids = Post - .where(id: answer_post_ids) - .pluck(:topic_id, :user_id) - .to_h - topics.each { |topic| topic.accepted_answer_user_id = answer_user_ids[topic.id] } - user_ids.concat(answer_user_ids.values) - end + register_topic_list_preload_user_ids do |topics, user_ids, topic_list| + answer_post_ids = TopicCustomField + .select('value::INTEGER') + .where(name: 'accepted_answer_post_id') + .where(topic_id: topics.map(&:id)) + answer_user_ids = Post + .where(id: answer_post_ids) + .pluck(:topic_id, :user_id) + .to_h + topics.each { |topic| topic.accepted_answer_user_id = answer_user_ids[topic.id] } + user_ids.concat(answer_user_ids.values) + end - module AddSolvedToTopicPostersSummary - def descriptions_by_id - if !defined? @descriptions_by_id - super(ids: old_user_ids) + module AddSolvedToTopicPostersSummary + def descriptions_by_id + if !defined? @descriptions_by_id + super(ids: old_user_ids) - if id = topic.accepted_answer_user_id - @descriptions_by_id[id] ||= [] - @descriptions_by_id[id] << I18n.t(:accepted_answer) + if id = topic.accepted_answer_user_id + @descriptions_by_id[id] ||= [] + @descriptions_by_id[id] << I18n.t(:accepted_answer) + end end - end - super - end - - def last_poster_is_topic_creator? - super || topic.accepted_answer_user_id == topic.last_post_user_id - end - - def user_ids - if id = topic.accepted_answer_user_id - super.insert(1, id) - else super end + + def last_poster_is_topic_creator? + super || topic.accepted_answer_user_id == topic.last_post_user_id + end + + def user_ids + if id = topic.accepted_answer_user_id + super.insert(1, id) + else + super + end + end + end + + TopicPostersSummary.class_eval do + alias :old_user_ids :user_ids + + prepend AddSolvedToTopicPostersSummary end end - - TopicPostersSummary.class_eval do - alias :old_user_ids :user_ids - - prepend AddSolvedToTopicPostersSummary - end end