diff --git a/app/controllers/favorites_controller.rb b/app/controllers/favorites_controller.rb index 6322510e3..71a295585 100644 --- a/app/controllers/favorites_controller.rb +++ b/app/controllers/favorites_controller.rb @@ -8,6 +8,11 @@ class FavoritesController < ApplicationController else user_id = params[:user_id] || CurrentUser.user.id @user = User.find(user_id) + + if @user.hide_favorites? + raise User::PrivilegeError.new + end + @favorite_set = PostSets::Favorite.new(user_id, params[:page], params) respond_with(@favorite_set.posts) do |format| format.xml do diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index da7b5148a..baf6c2c17 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -350,6 +350,12 @@ class PostQueryBuilder if q[:ordfav].present? user_id = q[:ordfav].to_i + user = User.find(user_id) + + if user.hide_favorites? + raise User::PrivilegeError.new + end + relation = relation.joins("INNER JOIN favorites ON favorites.post_id = posts.id") relation = relation.where("favorites.user_id % 100 = ? and favorites.user_id = ?", user_id % 100, user_id).order("favorites.id DESC") end diff --git a/app/models/favorite_group.rb b/app/models/favorite_group.rb index 1d776d9d1..39e075f63 100644 --- a/app/models/favorite_group.rb +++ b/app/models/favorite_group.rb @@ -33,9 +33,21 @@ class FavoriteGroup < ActiveRecord::Base params = {} if params.blank? if params[:creator_id].present? - q = q.where("creator_id = ?", params[:creator_id].to_i) + user = User.find(params[:creator_id]) + + if user.hide_favorites? + raise User::PrivilegeError.new + end + + q = q.where("creator_id = ?", user.id) elsif params[:creator_name].present? - q = q.where("creator_id = (select _.id from users _ where lower(_.name) = ?)", params[:creator_name].tr(" ", "_").mb_chars.downcase) + user = User.find_by_name(params[:creator_name]) + + if user.hide_favorites? + raise User::PrivilegeError.new + end + + q = q.where("creator_id = ?", user.id) else q = q.where("creator_id = ?", CurrentUser.user.id) end diff --git a/app/models/post.rb b/app/models/post.rb index c2c37c373..c6b6a0ca8 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -855,7 +855,9 @@ class Post < ActiveRecord::Base end def favorited_users - favorited_user_ids.map {|id| User.find(id)} + favorited_user_ids.map {|id| User.find(id)}.select do |x| + !x.hide_favorites? + end end def favorite_groups(active_id=nil) diff --git a/app/models/user.rb b/app/models/user.rb index ceb3e43ff..0cfe94190 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -811,6 +811,10 @@ class User < ActiveRecord::Base end end + def hide_favorites? + enable_privacy_mode? && CurrentUser.user.id != id + end + def initialize_default_boolean_attributes self.enable_post_navigation = true self.new_post_navigation_layout = true diff --git a/app/presenters/user_similarity_presenter.rb b/app/presenters/user_similarity_presenter.rb index a4f814048..53d9c4a55 100644 --- a/app/presenters/user_similarity_presenter.rb +++ b/app/presenters/user_similarity_presenter.rb @@ -34,7 +34,11 @@ class UserSimilarityPresenter def each_user(&block) user_ids_with_scores.each do |user_id, score| - yield(User.find(user_id), 100 * score.to_f) + user = User.find(user_id) + + if !user.hide_favorites? + yield(user, 100 * score.to_f) + end end end diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index c748f570f..43b674254 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -70,6 +70,8 @@ <%= f.input :disable_categorized_saved_searches, :as => :select, :collection => [["No", "false"], ["Yes", "true"]], :include_blank => false %> + <%= f.input :enable_privacy_mode, :as => :select, :collection => [["No", "false"], ["Yes", "true"]], :include_blank => false %> +