2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-09-06 10:50:21 +08:00

FEATURE: new 'My Groups' messages filter in user page

This commit is contained in:
Régis Hanol 2015-12-07 18:37:03 +01:00
parent 1cde276656
commit a37d575d7d
10 changed files with 60 additions and 25 deletions

View file

@ -114,22 +114,27 @@ class TopicQuery
end
def list_private_messages(user)
list = private_messages_for(user)
list = private_messages_for(user, :user)
create_list(:private_messages, {}, list)
end
def list_private_messages_sent(user)
list = private_messages_for(user)
list = private_messages_for(user, :user)
list = list.where(user_id: user.id)
create_list(:private_messages, {}, list)
end
def list_private_messages_unread(user)
list = private_messages_for(user)
list = private_messages_for(user, :user)
list = list.where("tu.last_read_post_number IS NULL OR tu.last_read_post_number < topics.highest_post_number")
create_list(:private_messages, {}, list)
end
def list_private_messages_groups(user)
list = private_messages_for(user, :group)
create_list(:private_messages, {}, list)
end
def list_category_topic_ids(category)
query = default_results(category: category.id)
pinned_ids = query.where('pinned_at IS NOT NULL AND category_id = ?', category.id)
@ -227,17 +232,23 @@ class TopicQuery
@options[:slow_platform] ? 15 : 30
end
def private_messages_for(user)
def private_messages_for(user, type)
options = @options
options.reverse_merge!(per_page: per_page_setting)
# Start with a list of all topics
result = Topic.includes(:allowed_users)
.where("topics.id IN (SELECT topic_id FROM topic_allowed_users WHERE user_id = #{user.id.to_i})")
.joins("LEFT OUTER JOIN topic_users AS tu ON (topics.id = tu.topic_id AND tu.user_id = #{user.id.to_i})")
.order("topics.bumped_at DESC")
.private_messages
result = Topic
if type == :group
result = result.includes(:allowed_groups)
result = result.where("topics.id IN (SELECT topic_id FROM topic_allowed_groups WHERE group_id IN (SELECT group_id FROM group_users WHERE user_id = #{user.id.to_i}))")
elsif type == :user
result = result.includes(:allowed_users)
result = result.where("topics.id IN (SELECT topic_id FROM topic_allowed_users WHERE user_id = #{user.id.to_i})")
end
result = result.joins("LEFT OUTER JOIN topic_users AS tu ON (topics.id = tu.topic_id AND tu.user_id = #{user.id.to_i})")
.order("topics.bumped_at DESC")
.private_messages
result = result.limit(options[:per_page]) unless options[:limit] == false
result = result.visible if options[:visible] || @user.nil? || @user.regular?