Fix #3941: Add ability to search users by inviter.

This commit is contained in:
evazion
2018-10-02 19:38:55 -05:00
parent abbe181de6
commit 0966a290e4
4 changed files with 15 additions and 17 deletions

View File

@@ -757,10 +757,6 @@ class User < ApplicationRecord
where("lower(name) = ?", name)
end
def name_matches(name)
where("lower(name) like ? escape E'\\\\'", name.to_escaped_for_sql_like)
end
def admins
where("level = ?", Levels::ADMIN)
end
@@ -794,12 +790,15 @@ class User < ApplicationRecord
def search(params)
q = super
if params[:name].present?
q = q.name_matches(params[:name].mb_chars.downcase.strip.tr(" ", "_"))
end
params = params.dup
params[:name_matches] = params.delete(:name) if params[:name].present?
if params[:name_matches].present?
q = q.name_matches(params[:name_matches].mb_chars.downcase.strip.tr(" ", "_"))
q = q.where_ilike(:name, normalize_name(params[:name_matches]))
end
if params[:inviter].present?
q = q.where(inviter_id: search(params[:inviter]))
end
if params[:min_level].present?

View File

@@ -141,14 +141,6 @@ class UserPresenter
end
end
def inviter(template)
if user.inviter_id
template.link_to_user(user.inviter)
else
"None"
end
end
def appeal_count(template)
template.link_to(user.appeal_count, template.post_appeals_path(:search => {:creator_name => user.name}))
end

View File

@@ -9,7 +9,11 @@
<tr>
<th>Inviter</th>
<td><%= presenter.inviter(self) %></td>
<% if user.inviter %>
<td><%= link_to_user user.inviter %> <%= link_to "»", users_path(search: { inviter: { name: user.inviter.name }}) %></td>
<% else %>
<td>None</td>
<% end %>
</tr>
<tr>

View File

@@ -2,6 +2,9 @@
<div id="a-search">
<%= simple_form_for(:search, url: users_path, method: :get, defaults: { required: false }, html: { class: "inline-form" }) do |f| %>
<%= f.input :name_matches, label: "Name", hint: "Use * for wildcard", input_html: { value: params[:search][:name_matches] } %>
<%= f.simple_fields_for :inviter do |sub| %>
<%= sub.input :name_matches, label: "Inviter Name", hint: "Use * for wildcard", input_html: { value: params.dig(:search, :inviter, :name_matches) } %>
<% end %>
<%= f.input :level, collection: User.level_hash.to_a, include_blank: true, selected: params[:search][:level] %>
<%= f.input :min_level, collection: User.level_hash.to_a, include_blank: true, selected: params[:search][:min_level] %>