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)
|
where("lower(name) = ?", name)
|
||||||
end
|
end
|
||||||
|
|
||||||
def name_matches(name)
|
|
||||||
where("lower(name) like ? escape E'\\\\'", name.to_escaped_for_sql_like)
|
|
||||||
end
|
|
||||||
|
|
||||||
def admins
|
def admins
|
||||||
where("level = ?", Levels::ADMIN)
|
where("level = ?", Levels::ADMIN)
|
||||||
end
|
end
|
||||||
@@ -794,12 +790,15 @@ class User < ApplicationRecord
|
|||||||
def search(params)
|
def search(params)
|
||||||
q = super
|
q = super
|
||||||
|
|
||||||
if params[:name].present?
|
params = params.dup
|
||||||
q = q.name_matches(params[:name].mb_chars.downcase.strip.tr(" ", "_"))
|
params[:name_matches] = params.delete(:name) if params[:name].present?
|
||||||
end
|
|
||||||
|
|
||||||
if params[:name_matches].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
|
end
|
||||||
|
|
||||||
if params[:min_level].present?
|
if params[:min_level].present?
|
||||||
|
|||||||
@@ -141,14 +141,6 @@ class UserPresenter
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def inviter(template)
|
|
||||||
if user.inviter_id
|
|
||||||
template.link_to_user(user.inviter)
|
|
||||||
else
|
|
||||||
"None"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def appeal_count(template)
|
def appeal_count(template)
|
||||||
template.link_to(user.appeal_count, template.post_appeals_path(:search => {:creator_name => user.name}))
|
template.link_to(user.appeal_count, template.post_appeals_path(:search => {:creator_name => user.name}))
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,7 +9,11 @@
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>Inviter</th>
|
<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>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
<div id="a-search">
|
<div id="a-search">
|
||||||
<%= simple_form_for(:search, url: users_path, method: :get, defaults: { required: false }, html: { class: "inline-form" }) do |f| %>
|
<%= 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.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 :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] %>
|
<%= 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