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:
parent
1cde276656
commit
a37d575d7d
10 changed files with 60 additions and 25 deletions
|
@ -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?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue