@ -14,6 +14,7 @@ class AccountFilter
email
ip
staff
order
) . freeze
attr_reader :params
@ -24,7 +25,7 @@ class AccountFilter
end
def results
scope = Account . recent. includes( :user )
scope = Account . includes( :user ) . reorder ( nil )
params . each do | key , value |
scope . merge! ( scope_for ( key , value . to_s . strip ) ) if value . present?
@ -38,6 +39,7 @@ class AccountFilter
def set_defaults!
params [ 'local' ] = '1' if params [ 'remote' ] . blank?
params [ 'active' ] = '1' if params [ 'suspended' ] . blank? && params [ 'silenced' ] . blank? && params [ 'pending' ] . blank?
params [ 'order' ] = 'recent' if params [ 'order' ] . blank?
end
def scope_for ( key , value )
@ -51,9 +53,9 @@ class AccountFilter
when 'active'
Account . without_suspended
when 'pending'
accounts_with_users . merge User . pending
accounts_with_users . merge ( User . pending )
when 'disabled'
accounts_with_users . merge User . disabled
accounts_with_users . merge ( User . disabled )
when 'silenced'
Account . silenced
when 'suspended'
@ -63,16 +65,31 @@ class AccountFilter
when 'display_name'
Account . matches_display_name ( value )
when 'email'
accounts_with_users . merge User . matches_email ( value )
accounts_with_users . merge ( User . matches_email ( value ) )
when 'ip'
valid_ip? ( value ) ? accounts_with_users . merge ( User . matches_ip ( value ) ) : Account . none
when 'staff'
accounts_with_users . merge User . staff
accounts_with_users . merge ( User . staff )
when 'order'
order_scope ( value )
else
raise " Unknown filter: #{ key } "
end
end
def order_scope ( value )
case value
when 'active'
params [ 'remote' ] ? Account . joins ( :account_stat ) . by_recent_status : Account . joins ( :user ) . by_recent_sign_in
when 'recent'
Account . recent
when 'alphabetic'
Account . alphabetic
else
raise " Unknown order: #{ value } "
end
end
def accounts_with_users
Account . joins ( :user )
end