Add filter to AccountFilter (#2968)
This commit is contained in:
parent
abe0d9421f
commit
e89e4355eb
6 changed files with 55 additions and 10 deletions
|
@ -10,27 +10,49 @@ class AccountFilter
|
|||
def results
|
||||
scope = Account.alphabetic
|
||||
params.each do |key, value|
|
||||
scope = scope.merge scope_for(key, value)
|
||||
scope.merge!(scope_for(key, value)) if value.present?
|
||||
end
|
||||
scope
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def scope_for(key, value)
|
||||
case key
|
||||
when /local/
|
||||
accounts = Account.arel_table
|
||||
|
||||
case key.to_s
|
||||
when 'local'
|
||||
Account.local
|
||||
when /remote/
|
||||
when 'remote'
|
||||
Account.remote
|
||||
when /by_domain/
|
||||
when 'by_domain'
|
||||
Account.where(domain: value)
|
||||
when /silenced/
|
||||
when 'silenced'
|
||||
Account.silenced
|
||||
when /recent/
|
||||
when 'recent'
|
||||
Account.recent
|
||||
when /suspended/
|
||||
when 'suspended'
|
||||
Account.suspended
|
||||
when 'username'
|
||||
Account.where(accounts[:username].matches("#{value}%"))
|
||||
when 'display_name'
|
||||
Account.where(accounts[:display_name].matches("#{value}%"))
|
||||
when 'email'
|
||||
users = User.arel_table
|
||||
Account.joins(:user).merge(User.where(users[:email].matches("#{value}%")))
|
||||
when 'ip'
|
||||
return Account.default_scoped unless valid_ip?(value)
|
||||
matches_ip = User.where(current_sign_in_ip: value).or(User.where(last_sign_in_ip: value))
|
||||
Account.joins(:user).merge(matches_ip)
|
||||
else
|
||||
raise "Unknown filter: #{key}"
|
||||
end
|
||||
end
|
||||
|
||||
def valid_ip?(value)
|
||||
IPAddr.new(value)
|
||||
true
|
||||
rescue IPAddr::InvalidAddressError
|
||||
false
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue