From 25069865b7560c80e7a7c95881f4d1f21bd857c0 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 17 Dec 2020 20:21:40 -0600 Subject: [PATCH] ip bans: add search form. * Add IP ban search form to /ip_bans page. * Make some attributes searchable that weren't previously searchable. --- app/models/ip_ban.rb | 12 ++++++++---- app/views/ip_bans/index.html.erb | 10 ++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/models/ip_ban.rb b/app/models/ip_ban.rb index 223539f43..d69f41bbf 100644 --- a/app/models/ip_ban.rb +++ b/app/models/ip_ban.rb @@ -25,14 +25,18 @@ class IpBan < ApplicationRecord end def self.search(params) - q = search_attributes(params, :id, :created_at, :updated_at, :reason, :creator) + q = search_attributes(params, :id, :created_at, :updated_at, :ip_addr, :reason, :is_deleted, :category, :hit_count, :last_hit_at, :creator) q = q.text_attribute_matches(:reason, params[:reason_matches]) - if params[:ip_addr].present? - q = q.where("ip_addr = ?", params[:ip_addr]) + case params[:order] + when /\A(created_at|updated_at|last_hit_at)(?:_(asc|desc))?\z/i + dir = $2 || :desc + q = q.order($1 => dir).order(id: :desc) + else + q = q.apply_default_order(params) end - q.apply_default_order(params) + q end def create_mod_action diff --git a/app/views/ip_bans/index.html.erb b/app/views/ip_bans/index.html.erb index 5a68e17f9..b3bdf29db 100644 --- a/app/views/ip_bans/index.html.erb +++ b/app/views/ip_bans/index.html.erb @@ -2,6 +2,16 @@

IP Bans

+ <%= search_form_for(ip_bans_path) do |f| %> + <%= f.input :ip_addr, label: "IP Addr", hint: "Use /24 for subnet", input_html: { value: params[:search][:ip_addr] } %> + <%= f.input :reason, input_html: { value: params[:search][:reason] } %> + <%= f.input :creator_name, label: "Creator", input_html: { value: params[:search][:creator_name], "data-autocomplete": "user" } %> + <%= f.input :category, collection: IpBan.categories, include_blank: true, selected: params[:search][:category] %> + <%= f.input :is_deleted, label: "Deleted?", collection: ["Yes", "No"], include_blank: true, input_html: { value: params[:search][:is_deleted] } %> + <%= f.input :order, collection: [%w[Newest created_at], %w[Oldest created_at_asc], %w[Last\ Seen last_hit_at]], include_blank: true, selected: params[:search][:order] %> + <%= f.submit "Search" %> + <% end %> + <%= table_for @ip_bans, class: "striped autofit", width: "100%" do |t| %> <% t.column "IP Address" do |ip_ban| %> <%= link_to_ip ip_ban.subnetted_ip %>