diff --git a/app/controllers/v1/feed_controller.rb b/app/controllers/v1/feed_controller.rb index 98892dbb38a345b005d38689b62bf4651b4250bb..e33e03b62ddeba8b4211a90be0c61a22357e4b85 100644 --- a/app/controllers/v1/feed_controller.rb +++ b/app/controllers/v1/feed_controller.rb @@ -33,24 +33,22 @@ class V1::FeedController < ApplicationController private def activities_followed - query = "" + query = "privacy = 'public' and (" values = [""] # builds a query string to find all relevant activities current_user.watching.each do |watching| - if !watching.respond_to?(:state) || watching.state == "published" - # Activities that are made by, owned by, or change the object you follow should be found - query += " (trackable_type = ? and trackable_id = ?) or (owner_type = ? and owner_id = ?) or (recipient_type = ? and recipient_id = ?) or" - values << watching.class.to_s - values << watching.id - values << watching.class.to_s - values << watching.id + if !watching.respond_to?(:state) || watching.state == "published" + # Activities that are made by, owned by, or change the object you follow should be found + query += " (trackable_type = ? and trackable_id = ?) or (owner_type = ? and owner_id = ?) or (recipient_type = ? and recipient_id = ?) or" + 3.times do values << watching.class.to_s values << watching.id end + end end - values[0] = query[0..-3] # remove trailing "or" on the query + values[0] = query[0..-3]+")" # remove trailing "or" on the query return PublicActivity::Activity.where(key: activities_filter).where(values).order(created_at: :desc) end diff --git a/app/models/concerns/trackable.rb b/app/models/concerns/trackable.rb index 44289aee76f8b232ca12bd9869e4ffa3d8a9ae7a..346e46a7e3973a4519deb96fa8478af8af151bed 100644 --- a/app/models/concerns/trackable.rb +++ b/app/models/concerns/trackable.rb @@ -69,6 +69,7 @@ module Trackable end def activity_privacy - proc { |_controller, model| model.try(:privacy) || 'public' } + proc { |_controller, model| model.try(:privacy) || model.try(:recipient).try(:privacy) || 'public' } end + end diff --git a/app/policies/activity_policy.rb b/app/policies/activity_policy.rb index 8d98a493fbc40a7072d9bf09132ee9f7b35d18f7..2d1b16d69fb23d79aba973baff1b2f5db799b38c 100644 --- a/app/policies/activity_policy.rb +++ b/app/policies/activity_policy.rb @@ -31,7 +31,7 @@ class ActivityPolicy < ApplicationPolicy if user_can_edit? scope.includes(:owner,:recipient).order('created_at DESC').all else - scope.includes(:owner,:recipient).where("privacy = 'public'").where(key: activities_filter).order('created_at DESC').all + scope.includes(:owner,:recipient).where(privacy: 'public').where(key: activities_filter).order('created_at DESC').all end end