FIX: properly filter whispers in user stream
This commit is contained in:
parent
2ae032c9b0
commit
4f7140fb32
|
@ -96,17 +96,18 @@ class Post < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def publish_change_to_clients!(type)
|
||||
|
||||
channel = "/topic/#{topic_id}"
|
||||
msg = { id: id,
|
||||
post_number: post_number,
|
||||
updated_at: Time.now,
|
||||
type: type }
|
||||
|
||||
# special failsafe for posts missing topics consistency checks should fix, but message
|
||||
# is safe to skip
|
||||
return unless topic
|
||||
|
||||
channel = "/topic/#{topic_id}"
|
||||
msg = {
|
||||
id: id,
|
||||
post_number: post_number,
|
||||
updated_at: Time.now,
|
||||
type: type
|
||||
}
|
||||
|
||||
# Whispers should not be published to everyone
|
||||
if post_type == Post.types[:whisper]
|
||||
user_ids = User.where('admin or moderator or id = ?', user_id).pluck(:id)
|
||||
|
|
|
@ -218,7 +218,7 @@ class Topic < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def visible_post_types(viewed_by=nil)
|
||||
def self.visible_post_types(viewed_by=nil)
|
||||
types = Post.types
|
||||
result = [types[:regular], types[:moderator_action], types[:small_action]]
|
||||
result << types[:whisper] if viewed_by.try(:staff?)
|
||||
|
|
|
@ -305,7 +305,6 @@ SQL
|
|||
end
|
||||
|
||||
def self.apply_common_filters(builder,user_id,guardian,ignore_private_messages=false)
|
||||
|
||||
# We never return deleted topics in activity
|
||||
builder.where("t.deleted_at is null")
|
||||
|
||||
|
@ -318,6 +317,9 @@ SQL
|
|||
builder.where("NOT COALESCE(p.hidden, false) OR p.user_id = :current_user_id", current_user_id: current_user_id )
|
||||
end
|
||||
|
||||
visible_post_types = Topic.visible_post_types(guardian.user)
|
||||
builder.where("COALESCE(p.post_type, p2.post_type) IN (:visible_post_types)", visible_post_types: visible_post_types)
|
||||
|
||||
unless (guardian.user && guardian.user.id == user_id) || guardian.is_staff?
|
||||
builder.where("a.action_type not in (#{BOOKMARK})")
|
||||
builder.where("t.visible")
|
||||
|
|
|
@ -147,7 +147,7 @@ module PostGuardian
|
|||
return false if post.blank?
|
||||
return true if is_admin?
|
||||
return false unless can_see_topic?(post.topic)
|
||||
return false unless post.user == @user || post.topic.visible_post_types(@user).include?(post.post_type)
|
||||
return false unless post.user == @user || Topic.visible_post_types(@user).include?(post.post_type)
|
||||
return false if !is_moderator? && post.deleted_at.present?
|
||||
|
||||
true
|
||||
|
|
|
@ -331,7 +331,7 @@ class TopicView
|
|||
private
|
||||
|
||||
def filter_post_types(posts)
|
||||
visible_types = @topic.visible_post_types(@user)
|
||||
visible_types = Topic.visible_post_types(@user)
|
||||
|
||||
if @user.present?
|
||||
posts.where("user_id = ? OR post_type IN (?)", @user.id, visible_types)
|
||||
|
|
|
@ -2,6 +2,7 @@ Fabricator(:post) do
|
|||
user
|
||||
topic {|attrs| Fabricate(:topic, user: attrs[:user] ) }
|
||||
raw "Hello world"
|
||||
post_type Post.types[:regular]
|
||||
end
|
||||
|
||||
Fabricator(:post_with_long_raw_content, from: :post) do
|
||||
|
|
|
@ -15,8 +15,7 @@ describe Topic do
|
|||
let(:types) { Post.types }
|
||||
|
||||
it "returns the appropriate types for anonymous users" do
|
||||
topic = Fabricate.build(:topic)
|
||||
post_types = topic.visible_post_types
|
||||
post_types = Topic.visible_post_types
|
||||
|
||||
expect(post_types).to include(types[:regular])
|
||||
expect(post_types).to include(types[:moderator_action])
|
||||
|
@ -25,8 +24,7 @@ describe Topic do
|
|||
end
|
||||
|
||||
it "returns the appropriate types for regular users" do
|
||||
topic = Fabricate.build(:topic)
|
||||
post_types = topic.visible_post_types(Fabricate.build(:user))
|
||||
post_types = Topic.visible_post_types(Fabricate.build(:user))
|
||||
|
||||
expect(post_types).to include(types[:regular])
|
||||
expect(post_types).to include(types[:moderator_action])
|
||||
|
@ -35,8 +33,7 @@ describe Topic do
|
|||
end
|
||||
|
||||
it "returns the appropriate types for staff users" do
|
||||
topic = Fabricate.build(:topic)
|
||||
post_types = topic.visible_post_types(Fabricate.build(:moderator))
|
||||
post_types = Topic.visible_post_types(Fabricate.build(:moderator))
|
||||
|
||||
expect(post_types).to include(types[:regular])
|
||||
expect(post_types).to include(types[:moderator_action])
|
||||
|
|
Loading…
Reference in New Issue