From 4848f184553d2e03e13dd92d95fadf74aed9fb36 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 12 Jan 2017 05:32:04 +0000 Subject: [PATCH] IpAddrSearch: fix pool_versions exception. Fix pool_versions exception if PoolArchive db isn't set up. Prefer ActiveRecord over raw sql so we can get real user objects so that the view can use link_to_user. --- app/logical/moderator/ip_addr_search.rb | 37 ++++++++----------- app/views/moderator/ip_addrs/_ip_listing.erb | 2 +- .../moderator/ip_addrs/_user_listing.erb | 10 ++--- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/app/logical/moderator/ip_addr_search.rb b/app/logical/moderator/ip_addr_search.rb index df28f73bf..490d217b7 100644 --- a/app/logical/moderator/ip_addr_search.rb +++ b/app/logical/moderator/ip_addr_search.rb @@ -19,20 +19,16 @@ module Moderator end private - def select_all_sql(sql, source, *params) - source.select_all_sql(sql, *params) - end - def search_by_ip_addr(ip_addrs) sums = Hash.new {|h, k| h[k] = 0} - add_row(sums, "select id as k, 1 as count from users where last_ip_addr in (?)", ip_addrs) - add_row(sums, "select creator_id as k, count(*) from comments where ip_addr in (?) group by k", ip_addrs) - add_row(sums, "select updater_id as k, count(*) from post_versions where updater_ip_addr in (?) group by k", ip_addrs) - add_row(sums, "select updater_id as k, count(*) from note_versions where updater_ip_addr in (?) group by k", ip_addrs) - add_row(sums, "select updater_id as k, count(*) from pool_versions where updater_ip_addr in (?) group by k", ip_addrs, PoolArchive) - add_row(sums, "select updater_id as k, count(*) from wiki_page_versions where updater_ip_addr in (?) group by k", ip_addrs) - add_row(sums, "select from_id as k, count(*) from dmails where creator_ip_addr in (?) group by k", ip_addrs) + add_row(sums, NoteVersion.where(updater_ip_addr: ip_addrs).group(:updater).count) + add_row(sums, PoolArchive.where(updater_ip_addr: ip_addrs).group(:updater).count) if PoolArchive.enabled? + add_row(sums, PostVersion.where(updater_ip_addr: ip_addrs).group(:updater).count) + add_row(sums, WikiPageVersion.where(updater_ip_addr: ip_addrs).group(:updater).count) + add_row(sums, Comment.where(ip_addr: ip_addrs).group(:creator).count) + add_row(sums, Dmail.where(creator_ip_addr: ip_addrs).group(:from).count) + add_row(sums, Hash[User.where(last_ip_addr: ip_addrs).collect { |user| [user, 1] }]) sums end @@ -44,21 +40,20 @@ module Moderator def search_by_user_id(user_ids) sums = Hash.new {|h, k| h[k] = 0} + users = User.find(user_ids) - add_row(sums, "select ip_addr as k, count(*) from comments where creator_id in (?) group by k", user_ids) - add_row(sums, "select updater_ip_addr as k, count(*) from post_versions where updater_id in (?) group by k", user_ids) - add_row(sums, "select updater_ip_addr as k, count(*) from note_versions where updater_id in (?) group by k", user_ids) - add_row(sums, "select updater_ip_addr as k, count(*) from pool_versions where updater_id in (?) group by k", user_ids, PoolArchive) - add_row(sums, "select updater_ip_addr as k, count(*) from wiki_page_versions where updater_id in (?) group by k", user_ids) - add_row(sums, "select creator_ip_addr as k, count(*) from dmails where from_id in (?) group by k", user_ids) + add_row(sums, NoteVersion.where(updater: users).group(:updater_ip_addr).count) + add_row(sums, PoolArchive.where(updater: users).group(:updater_ip_addr).count) if PoolArchive.enabled? + add_row(sums, PostVersion.where(updater: users).group(:updater_ip_addr).count) + add_row(sums, WikiPageVersion.where(updater: users).group(:updater_ip_addr).count) + add_row(sums, Comment.where(creator: users).group(:ip_addr).count) + add_row(sums, Dmail.where(from: users).group(:creator_ip_addr).count) sums end - def add_row(sums, sql, ip_addrs, source = ActiveRecord::Base) - select_all_sql(sql, source, ip_addrs).each do |row| - sums[row["k"]] += row["count"].to_i - end + def add_row(sums, counts) + sums.merge!(counts) { |key, oldcount, newcount| oldcount + newcount } end end end diff --git a/app/views/moderator/ip_addrs/_ip_listing.erb b/app/views/moderator/ip_addrs/_ip_listing.erb index 2dca3e295..4c9f00714 100644 --- a/app/views/moderator/ip_addrs/_ip_listing.erb +++ b/app/views/moderator/ip_addrs/_ip_listing.erb @@ -1,4 +1,4 @@ -

<%= link_to "Search for users with these IP addresses", moderator_ip_addrs_path(:search => {:ip_addr => @results.map {|k, count| k}.reject{|ip| ip == "127.0.0.1"}.join(",")}) %>

+

<%= link_to "Search for users with these IP addresses", moderator_ip_addrs_path(:search => {:ip_addr => @results.keys.reject{|ip| ip == "127.0.0.1"}.join(",")}) %>

diff --git a/app/views/moderator/ip_addrs/_user_listing.erb b/app/views/moderator/ip_addrs/_user_listing.erb index 094e80b01..4bea2dee7 100644 --- a/app/views/moderator/ip_addrs/_user_listing.erb +++ b/app/views/moderator/ip_addrs/_user_listing.erb @@ -1,4 +1,4 @@ -

<%= link_to "Search for IP addresses with these users", moderator_ip_addrs_path(:search => {:user_id => @results.map{|k, count| k}.join(",")}) %>

+

<%= link_to "Search for IP addresses with these users", moderator_ip_addrs_path(:search => {:user_id => @results.map{|user, count| user.id}.join(",")}) %>

@@ -9,12 +9,12 @@ - <% @results.each do |user_id, count| %> + <% @results.each do |user, count| %> - + - + <% end %> -
<%= link_to User.id_to_name(user_id), user_path(user_id) %><%= link_to_user user %> <%= count %><%= link_to "Show IP addresses", moderator_ip_addrs_path(:search => {:user_id => user_id}) %><%= link_to "Show IP addresses", moderator_ip_addrs_path(:search => {:user_id => user.id}) %>
\ No newline at end of file +