Fix #3941: Add ability to search users by inviter.
This commit is contained in:
@@ -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?
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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] %>
|
||||
|
||||
Reference in New Issue
Block a user