From 3e936748c0b54989f71982d6ea0c53c42c3615fc Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 28 Dec 2017 19:33:50 -0600 Subject: [PATCH] Fix #3468: Approval queue should not show one's own uploads or previous approvals. --- app/models/post.rb | 9 ++++++--- app/models/user.rb | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 622997271..7507b0efd 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1646,11 +1646,14 @@ class Post < ApplicationRecord where("uploader_id = ?", user_id) end - def available_for_moderation(hidden) + def available_for_moderation(hidden, user = CurrentUser.user) + approved_posts = user.post_approvals.select(:post_id) + disapproved_posts = user.post_disapprovals.select(:post_id) + if hidden.present? - where("posts.id IN (SELECT pd.post_id FROM post_disapprovals pd WHERE pd.user_id = ?)", CurrentUser.id) + where("posts.uploader_id = ? OR posts.id IN (#{approved_posts.to_sql}) OR posts.id IN (#{disapproved_posts.to_sql})", user.id) else - where("posts.id NOT IN (SELECT pd.post_id FROM post_disapprovals pd WHERE pd.user_id = ?)", CurrentUser.id) + where.not(uploader: user).where.not(id: approved_posts).where.not(id: disapproved_posts) end end diff --git a/app/models/user.rb b/app/models/user.rb index 43ae19288..e03cb3874 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -91,6 +91,7 @@ class User < ApplicationRecord has_many :feedback, :class_name => "UserFeedback", :dependent => :destroy has_many :posts, :foreign_key => "uploader_id" has_many :post_approvals, :dependent => :destroy + has_many :post_disapprovals, :dependent => :destroy has_many :post_votes has_many :bans, lambda {order("bans.id desc")} has_one :recent_ban, lambda {order("bans.id desc")}, :class_name => "Ban"