From 42f3a4a554499a54309b53a656d2e61e148395f2 Mon Sep 17 00:00:00 2001 From: Type-kun Date: Sun, 11 Sep 2016 01:06:27 +0500 Subject: [PATCH] Initial support for #2644 --- app/models/user.rb | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/app/models/user.rb b/app/models/user.rb index a1c439aed..0d17a32c1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -759,6 +759,35 @@ class User < ActiveRecord::Base q = q.where("id in (?)", params[:id].split(",").map(&:to_i)) end + bitprefs_length = BOOLEAN_ATTRIBUTES.length + bitprefs_include = nil + bitprefs_exclude = nil + + [:can_approve_posts, :can_upload_free, :is_super_voter].each do |x| + if params[x].present? + attr_idx = BOOLEAN_ATTRIBUTES.index(x.to_s) + if params[x] == "true" + bitprefs_include ||= "0"*bitprefs_length + bitprefs_include[attr_idx] = '1' + elsif params[x] == "false" + bitprefs_exclude ||= "0"*bitprefs_length + bitprefs_exclude[attr_idx] = '1' + end + end + end + + if bitprefs_include + bitprefs_include.reverse! + q = q.where("bit_prefs::bit(:len) & :bits::bit(:len) = :bits::bit(:len)", + {:len => bitprefs_length, :bits => bitprefs_include}) + end + + if bitprefs_exclude + bitprefs_exclude.reverse! + q = q.where("bit_prefs::bit(:len) & :bits::bit(:len) = 0::bit(:len)", + {:len => bitprefs_length, :bits => bitprefs_exclude}) + end + if params[:current_user_first] == "true" && !CurrentUser.is_anonymous? q = q.order("id = #{CurrentUser.user.id.to_i} desc") end