mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 13:25:24 +08:00
filter out closed/archived/invisible topics from suggested
This commit is contained in:
parent
ba238f92c2
commit
bb1156cee1
|
@ -25,7 +25,11 @@ class TopicQuery
|
||||||
return TopicList.new(@user, random_suggested_results_for(topic, SiteSetting.suggested_topics, exclude_topic_ids))
|
return TopicList.new(@user, random_suggested_results_for(topic, SiteSetting.suggested_topics, exclude_topic_ids))
|
||||||
end
|
end
|
||||||
|
|
||||||
results = unread_results(per_page: SiteSetting.suggested_topics).where('topics.id NOT IN (?)', exclude_topic_ids).all
|
results = unread_results(per_page: SiteSetting.suggested_topics)
|
||||||
|
.where('topics.id NOT IN (?)', exclude_topic_ids)
|
||||||
|
.where(closed: false, archived: false, visible: true)
|
||||||
|
.all
|
||||||
|
|
||||||
results_left = SiteSetting.suggested_topics - results.size
|
results_left = SiteSetting.suggested_topics - results.size
|
||||||
|
|
||||||
# If we don't have enough results, go to new posts
|
# If we don't have enough results, go to new posts
|
||||||
|
@ -33,7 +37,11 @@ class TopicQuery
|
||||||
exclude_topic_ids << results.map {|t| t.id}
|
exclude_topic_ids << results.map {|t| t.id}
|
||||||
exclude_topic_ids.flatten!
|
exclude_topic_ids.flatten!
|
||||||
|
|
||||||
results << new_results(per_page: results_left).where('topics.id NOT IN (?)', exclude_topic_ids).all
|
results << new_results(per_page: results_left)
|
||||||
|
.where('topics.id NOT IN (?)', exclude_topic_ids)
|
||||||
|
.where(closed: false, archived: false, visible: true)
|
||||||
|
.all
|
||||||
|
|
||||||
results.flatten!
|
results.flatten!
|
||||||
|
|
||||||
results_left = SiteSetting.suggested_topics - results.size
|
results_left = SiteSetting.suggested_topics - results.size
|
||||||
|
@ -43,7 +51,10 @@ class TopicQuery
|
||||||
exclude_topic_ids << results.map {|t| t.id}
|
exclude_topic_ids << results.map {|t| t.id}
|
||||||
exclude_topic_ids.flatten!
|
exclude_topic_ids.flatten!
|
||||||
|
|
||||||
results << random_suggested_results_for(topic, results_left, exclude_topic_ids).all
|
results << random_suggested_results_for(topic, results_left, exclude_topic_ids)
|
||||||
|
.where(closed: false, archived: false, visible: true)
|
||||||
|
.all
|
||||||
|
|
||||||
results.flatten!
|
results.flatten!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -145,6 +156,7 @@ class TopicQuery
|
||||||
def random_suggested_results_for(topic, count, exclude_topic_ids)
|
def random_suggested_results_for(topic, count, exclude_topic_ids)
|
||||||
results = default_list(unordered: true, per_page: count)
|
results = default_list(unordered: true, per_page: count)
|
||||||
.where('topics.id NOT IN (?)', exclude_topic_ids)
|
.where('topics.id NOT IN (?)', exclude_topic_ids)
|
||||||
|
.where(closed: false, archived: false, visible: true)
|
||||||
.order('RANDOM()')
|
.order('RANDOM()')
|
||||||
|
|
||||||
results = results.where('category_id = ?', topic.category_id) if topic.category_id.present?
|
results = results.where('category_id = ?', topic.category_id) if topic.category_id.present?
|
||||||
|
|
|
@ -221,7 +221,18 @@ describe TopicQuery do
|
||||||
it "should return the new topic" do
|
it "should return the new topic" do
|
||||||
TopicQuery.new.list_suggested_for(topic).topics.should == [new_topic]
|
TopicQuery.new.list_suggested_for(topic).topics.should == [new_topic]
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "anonymously browswing with invisible, closed and archived" do
|
||||||
|
let!(:topic) { Fabricate(:topic) }
|
||||||
|
let!(:regular_topic) { Fabricate(:post, user: creator).topic }
|
||||||
|
let!(:closed_topic) { Fabricate(:topic, user: creator, closed: true) }
|
||||||
|
let!(:archived_topic) { Fabricate(:topic, user: creator, archived: true) }
|
||||||
|
let!(:invisible_topic) { Fabricate(:topic, user: creator, visible: false) }
|
||||||
|
|
||||||
|
it "should omit the closed/archived/invisbiel topics from suggested" do
|
||||||
|
TopicQuery.new.list_suggested_for(topic).topics.should == [regular_topic]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when logged in' do
|
context 'when logged in' do
|
||||||
|
@ -237,6 +248,9 @@ describe TopicQuery do
|
||||||
let!(:partially_read) { Fabricate(:post, user: creator).topic }
|
let!(:partially_read) { Fabricate(:post, user: creator).topic }
|
||||||
let!(:new_topic) { Fabricate(:post, user: creator).topic }
|
let!(:new_topic) { Fabricate(:post, user: creator).topic }
|
||||||
let!(:fully_read) { Fabricate(:post, user: creator).topic }
|
let!(:fully_read) { Fabricate(:post, user: creator).topic }
|
||||||
|
let!(:closed_topic) { Fabricate(:topic, user: creator, closed: true) }
|
||||||
|
let!(:archived_topic) { Fabricate(:topic, user: creator, archived: true) }
|
||||||
|
let!(:invisible_topic) { Fabricate(:topic, user: creator, visible: false) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
user.auto_track_topics_after_msecs = 0
|
user.auto_track_topics_after_msecs = 0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user