Revert "Index and form for bit preferences"
This commit is contained in:
@@ -759,28 +759,33 @@ 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, :is_banned].each do |x|
|
||||
[: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 ||= []
|
||||
bitprefs_include << attr_idx
|
||||
bitprefs_include ||= "0"*bitprefs_length
|
||||
bitprefs_include[attr_idx] = '1'
|
||||
elsif params[x] == "false"
|
||||
bitprefs_exclude ||= 0
|
||||
bitprefs_exclude |= (1 << attr_idx)
|
||||
bitprefs_exclude ||= "0"*bitprefs_length
|
||||
bitprefs_exclude[attr_idx] = '1'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if bitprefs_include
|
||||
q = q.where("bit_position_array(bit_prefs) @> ARRAY[?]::integer[]", 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
|
||||
q = q.where("bit_prefs & ? = 0", 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?
|
||||
|
||||
@@ -18,26 +18,6 @@
|
||||
<%= select("search", "max_level", [""] + User.level_hash.to_a) %>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<label for="search_can_approve_posts">Can approve posts</label>
|
||||
<%= select("search", "can_approve_posts", [[""], ["Yes", "true"], ["No", "false"]]) %>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<label for="search_can_upload_free">Unrestricted uploads</label>
|
||||
<%= select("search", "can_upload_free", [[""], ["Yes", "true"], ["No", "false"]]) %>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<label for="search_is_super_voter">Supervoter</label>
|
||||
<%= select("search", "is_super_voter", [[""], ["Yes", "true"], ["No", "false"]]) %>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<label for="search_is_banned">Banned</label>
|
||||
<%= select("search", "is_banned", [[""], ["Yes", "true"], ["No", "false"]]) %>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<label for="search_order">Order</label>
|
||||
<%= select("search", "order", [["Join date", "date"], ["Name", "name"], ["Upload count", "post_upload_count"], ["Note count", "note_count"], ["Post update count", "post_update_count"]]) %>
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
class AddIndexToUsersBitPrefs < ActiveRecord::Migration
|
||||
def up
|
||||
execute "set statement_timeout = 0"
|
||||
execute <<-'SQL'
|
||||
CREATE OR REPLACE FUNCTION bit_position_array(x bigint)
|
||||
RETURNS integer[] AS $BODY$
|
||||
select array_agg(i)
|
||||
from generate_series(0, floor(log(2, x))::integer) i
|
||||
where (x & (1::bigint << i)) > 0;
|
||||
$BODY$ LANGUAGE sql IMMUTABLE
|
||||
SQL
|
||||
|
||||
execute <<-'SQL'
|
||||
CREATE INDEX index_users_on_bit_prefs_array
|
||||
ON users USING gin (bit_position_array(bit_prefs) _int4_ops)
|
||||
SQL
|
||||
end
|
||||
|
||||
def down
|
||||
execute "set statement_timeout = 0"
|
||||
execute "DROP INDEX index_users_on_bit_prefs_array"
|
||||
execute "DROP FUNCTION bit_position_array(x bigint)"
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user