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.
This commit is contained in:
Martin Brennan 2021-08-31 13:30:17 +10:00 committed by GitHub
parent 6b6d5978a2
commit cf368c19cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 42 additions and 40 deletions

View File

@ -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