Class: AdminUserIndexQuery
- Inherits:
-
Object
- Object
- AdminUserIndexQuery
- Defined in:
- lib/admin_user_index_query.rb
Constant Summary collapse
- SORTABLE_MAPPING =
{ "created" => "created_at", "last_emailed" => "COALESCE(last_emailed_at, to_date('1970-01-01', 'YYYY-MM-DD'))", "seen" => "COALESCE(last_seen_at, to_date('1970-01-01', 'YYYY-MM-DD'))", "username" => "username", "email" => "email", "trust_level" => "trust_level", "days_visited" => "user_stats.days_visited", "posts_read" => "user_stats.posts_read_count", "topics_viewed" => "user_stats.topics_entered", "posts" => "user_stats.post_count", "read_time" => "user_stats.time_read", }
Instance Attribute Summary collapse
-
#params ⇒ Object
readonly
Returns the value of attribute params.
-
#trust_levels ⇒ Object
readonly
Returns the value of attribute trust_levels.
Instance Method Summary collapse
-
#append(active_relation) ⇒ Object
this might not be needed in rails 4 ?.
- #count_users ⇒ Object
- #filter_by_ip ⇒ Object
- #filter_by_query_classification ⇒ Object
- #filter_by_search ⇒ Object
- #filter_by_trust ⇒ Object
- #filter_exclude ⇒ Object
- #find_users(limit = 100) ⇒ Object
- #find_users_query ⇒ Object
-
#initialize(params = {}, klass = User, trust_levels = TrustLevel.levels) ⇒ AdminUserIndexQuery
constructor
A new instance of AdminUserIndexQuery.
- #initialize_query_with_order(klass) ⇒ Object
Constructor Details
#initialize(params = {}, klass = User, trust_levels = TrustLevel.levels) ⇒ AdminUserIndexQuery
Returns a new instance of AdminUserIndexQuery.
4 5 6 7 8 |
# File 'lib/admin_user_index_query.rb', line 4 def initialize(params = {}, klass = User, trust_levels = TrustLevel.levels) @params = params @query = initialize_query_with_order(klass) @trust_levels = trust_levels end |
Instance Attribute Details
#params ⇒ Object (readonly)
Returns the value of attribute params.
10 11 12 |
# File 'lib/admin_user_index_query.rb', line 10 def params @params end |
#trust_levels ⇒ Object (readonly)
Returns the value of attribute trust_levels.
10 11 12 |
# File 'lib/admin_user_index_query.rb', line 10 def trust_levels @trust_levels end |
Instance Method Details
#append(active_relation) ⇒ Object
this might not be needed in rails 4 ?
123 124 125 |
# File 'lib/admin_user_index_query.rb', line 123 def append(active_relation) @query = active_relation if active_relation end |
#count_users ⇒ Object
32 33 34 |
# File 'lib/admin_user_index_query.rb', line 32 def count_users find_users_query.count end |
#filter_by_ip ⇒ Object
112 113 114 115 116 |
# File 'lib/admin_user_index_query.rb', line 112 def filter_by_ip if params[:ip].present? @query.where("ip_address = :ip OR registration_ip_address = :ip", ip: params[:ip].strip) end end |
#filter_by_query_classification ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/admin_user_index_query.rb', line 72 def filter_by_query_classification case params[:query] when "staff" @query.where("admin or moderator") when "admins" @query.where(admin: true) when "moderators" @query.where(moderator: true) when "silenced" @query.silenced when "suspended" @query.suspended when "pending" @query.not_suspended.where(approved: false, active: true) when "staged" @query.where(staged: true) end end |
#filter_by_search ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/admin_user_index_query.rb', line 91 def filter_by_search if params[:email].present? return @query.joins(:primary_email).where("user_emails.email = ?", params[:email].downcase) end filter = params[:filter] if filter.present? filter = filter.strip if ip = begin IPAddr.new(filter) rescue StandardError nil end @query.where("ip_address <<= :ip OR registration_ip_address <<= :ip", ip: ip.to_cidr_s) else @query.filter_by_username_or_email(filter) end end end |
#filter_by_trust ⇒ Object
65 66 67 68 69 70 |
# File 'lib/admin_user_index_query.rb', line 65 def filter_by_trust levels = trust_levels.map { |key, _| key.to_s } if levels.include?(params[:query]) @query.where("trust_level = ?", trust_levels[params[:query].to_sym]) end end |
#filter_exclude ⇒ Object
118 119 120 |
# File 'lib/admin_user_index_query.rb', line 118 def filter_exclude @query.where("users.id != ?", params[:exclude]) if params[:exclude].present? end |
#find_users(limit = 100) ⇒ Object
26 27 28 29 30 |
# File 'lib/admin_user_index_query.rb', line 26 def find_users(limit = 100) page = params[:page].to_i - 1 page = 0 if page < 0 find_users_query.limit(limit).offset(page * limit) end |
#find_users_query ⇒ Object
127 128 129 130 131 132 133 134 |
# File 'lib/admin_user_index_query.rb', line 127 def find_users_query append filter_by_trust append filter_by_query_classification append filter_by_ip append filter_exclude append filter_by_search @query end |
#initialize_query_with_order(klass) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/admin_user_index_query.rb', line 36 def initialize_query_with_order(klass) order = [] custom_order = params[:order] custom_direction = params[:asc].present? ? "ASC" : "DESC" if custom_order.present? && without_dir = SORTABLE_MAPPING[custom_order.downcase.sub(/ (asc|desc)\z/, "")] order << "#{without_dir} #{custom_direction}" end if !custom_order.present? if params[:query] == "active" order << "users.last_seen_at DESC NULLS LAST" else order << "users.created_at DESC" end order << "users.username" end query = klass.includes(:totps).order(order.reject(&:blank?).join(",")) query = query.includes(:user_stat) unless params[:stats].present? && params[:stats] == false query = query.joins(:primary_email) if params[:show_emails] == "true" query end |