FIX: Stop register_topic_list_preload_user_ids from breaking old versions (#160)

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.

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
+
+    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)
+          end
+        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
+        super
+      end
 
-  module AddSolvedToTopicPostersSummary
-    def descriptions_by_id
-      if !defined? @descriptions_by_id
-        super(ids: old_user_ids)
+      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
-          @descriptions_by_id[id] ||= []
-          @descriptions_by_id[id] << I18n.t(:accepted_answer)
+          super.insert(1, id)
+        else
+          super
         end
       end
-
-      super
     end
 
-    def last_poster_is_topic_creator?
-      super || topic.accepted_answer_user_id == topic.last_post_user_id
-    end
+    TopicPostersSummary.class_eval do
+      alias :old_user_ids :user_ids
 
-    def user_ids
-      if id = topic.accepted_answer_user_id
-        super.insert(1, id)
-      else
-        super
-      end
+      prepend AddSolvedToTopicPostersSummary
     end
   end
-
-  TopicPostersSummary.class_eval do
-    alias :old_user_ids :user_ids
-
-    prepend AddSolvedToTopicPostersSummary
-  end
 end

GitHub sha: cf368c19cb858689a8e802557ab291772afe677e

This commit appears in #160 which was approved by tgxworld. It was merged by martin.