diff --git a/app/models/user.rb b/app/models/user.rb index d86a1f6aa..d57db6b9d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -759,33 +759,28 @@ 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| + [:can_approve_posts, :can_upload_free, :is_super_voter, :is_banned].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' + bitprefs_include ||= [] + bitprefs_include << attr_idx elsif params[x] == "false" - bitprefs_exclude ||= "0"*bitprefs_length - bitprefs_exclude[attr_idx] = '1' + bitprefs_exclude ||= 0 + bitprefs_exclude |= (1 << attr_idx) 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}) + q = q.where("bit_position_array(bit_prefs) @> ARRAY[?]::integer[]", 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}) + q = q.where("bit_prefs & ? = 0", bitprefs_exclude) end if params[:current_user_first] == "true" && !CurrentUser.is_anonymous? diff --git a/app/views/users/search.html.erb b/app/views/users/search.html.erb index d4cb0264c..62c66c2bb 100644 --- a/app/views/users/search.html.erb +++ b/app/views/users/search.html.erb @@ -18,6 +18,26 @@ <%= select("search", "max_level", [""] + User.level_hash.to_a) %> +