2013-07-30 17:36:34 +10:00
require_dependency 'trust_level'
2013-06-19 09:11:04 -07:00
class AdminUserIndexQuery
def initialize ( params = { } , klass = User , trust_levels = TrustLevel . levels )
@params = params
@query = initialize_query_with_order ( klass )
@trust_levels = trust_levels
end
attr_reader :params , :trust_levels
def initialize_query_with_order ( klass )
if params [ :query ] == " active "
klass . order ( " COALESCE(last_seen_at, to_date('1970-01-01', 'YYYY-MM-DD')) DESC, username " )
else
klass . order ( " created_at DESC, username " )
end
end
def filter_by_trust
2014-08-15 03:24:55 +05:30
levels = trust_levels . map { | key , _ | key . to_s }
2013-06-19 09:11:04 -07:00
if levels . include? ( params [ :query ] )
@query . where ( 'trust_level = ?' , trust_levels [ params [ :query ] . to_sym ] )
end
end
def filter_by_query_classification
case params [ :query ]
2014-09-29 22:31:05 +02:00
when 'admins' then @query . where ( admin : true )
when 'moderators' then @query . where ( moderator : true )
2013-06-19 09:11:04 -07:00
when 'blocked' then @query . blocked
2013-11-07 13:53:32 -05:00
when 'suspended' then @query . suspended
2014-09-29 22:31:05 +02:00
when 'pending' then @query . not_suspended . where ( approved : false )
2013-06-19 09:11:04 -07:00
end
end
def filter_by_search
if params [ :filter ] . present?
2014-10-07 12:05:38 +02:00
if params [ :admin ] == true
2014-10-23 07:58:01 +05:30
if params [ :filter ] =~ Resolv :: IPv4 :: Regex || params [ :filter ] =~ Resolv :: IPv6 :: Regex
@query . where ( 'ip_address = :ip OR registration_ip_address = :ip' , ip : params [ :filter ] )
else
@query . where ( 'username_lower ILIKE :filter OR email ILIKE :filter' , filter : " % #{ params [ :filter ] } % " )
end
2014-10-07 12:05:38 +02:00
else
@query . where ( 'username_lower ILIKE :filter' , filter : " % #{ params [ :filter ] } % " )
end
2013-06-19 09:11:04 -07:00
end
end
2014-06-15 18:14:19 +02:00
def filter_by_ip
if params [ :ip ] . present?
2014-10-07 12:05:38 +02:00
@query . where ( 'ip_address = :ip OR registration_ip_address = :ip' , ip : params [ :ip ] )
2014-06-15 18:14:19 +02:00
end
end
def filter_exclude
if params [ :exclude ] . present?
@query . where ( 'id != ?' , params [ :exclude ] )
end
end
2013-06-19 09:11:04 -07:00
# this might not be needed in rails 4 ?
def append ( active_relation )
@query = active_relation if active_relation
end
def find_users_query
append filter_by_trust
append filter_by_query_classification
2014-06-15 18:14:19 +02:00
append filter_by_ip
append filter_exclude
2013-06-19 09:11:04 -07:00
append filter_by_search
@query
end
def find_users
2014-09-29 22:31:05 +02:00
find_users_query . includes ( :user_stat )
. includes ( :single_sign_on_record )
. includes ( :facebook_user_info )
. includes ( :twitter_user_info )
. includes ( :github_user_info )
. includes ( :google_user_info )
. includes ( :oauth2_user_info )
. take ( 100 )
2013-06-19 09:11:04 -07:00
end
2013-07-30 17:36:34 +10:00
end