diff --git a/app/controllers/pool_versions_controller.rb b/app/controllers/pool_versions_controller.rb index 27b718fcd..392556196 100644 --- a/app/controllers/pool_versions_controller.rb +++ b/app/controllers/pool_versions_controller.rb @@ -12,6 +12,9 @@ class PoolVersionsController < ApplicationController respond_with(@pool_versions) end + def search + end + def diff @pool_version = PoolArchive.find(params[:id]) diff --git a/app/models/pool_archive.rb b/app/models/pool_archive.rb index 288f12588..96a397b53 100644 --- a/app/models/pool_archive.rb +++ b/app/models/pool_archive.rb @@ -21,14 +21,34 @@ class PoolArchive < ApplicationRecord where_array_includes_any(:added_post_ids, [post_id]).or(where_array_includes_any(:removed_post_ids, [post_id])) end + def name_matches(name) + name = normalize_name_for_search(name) + name = "*#{name}*" unless name =~ /\*/ + where_ilike(:name, name) + end + def search(params) q = super - q = q.search_attributes(params, :pool_id, :post_ids, :added_post_ids, :removed_post_ids, :updater, :description, :description_changed, :name, :name_changed, :version, :is_active, :is_deleted, :category) + q = q.search_attributes(params, :pool_id, :post_ids, :added_post_ids, :removed_post_ids, :updater_id, :description, :description_changed, :name, :name_changed, :version, :is_active, :is_deleted, :category) if params[:post_id] q = q.for_post_id(params[:post_id].to_i) end + if params[:name_matches].present? + q = q.name_matches(params[:name_matches]) + end + + if params[:updater_name].present? + q = q.where(updater_id: User.name_to_id(params[:updater_name])) + end + + if params[:is_new].to_s.truthy? + q = q.where(version: 1) + elsif params[:is_new].to_s.falsy? + q = q.where("version != 1") + end + q.apply_default_order(params) end end @@ -61,6 +81,14 @@ class PoolArchive < ApplicationRecord sqs_service.send_message(msg, message_group_id: "pool:#{pool.id}") end + def self.normalize_name(name) + name.gsub(/[_[:space:]]+/, "_").gsub(/\A_|_\z/, "") + end + + def self.normalize_name_for_search(name) + normalize_name(name).mb_chars.downcase + end + def build_diff(other = previous) diff = {} diff --git a/app/views/pool_versions/_secondary_links.html.erb b/app/views/pool_versions/_secondary_links.html.erb new file mode 100644 index 000000000..baecd6434 --- /dev/null +++ b/app/views/pool_versions/_secondary_links.html.erb @@ -0,0 +1,5 @@ +<% content_for(:secondary_links) do %> + <%= quick_search_form_for(:name_matches, pool_versions_path, "pools", autocomplete: "pool") %> + <%= subnav_link_to "Listing", pool_versions_path %> + <%= subnav_link_to "Search", search_pool_versions_path %> +<% end %> diff --git a/app/views/pool_versions/diff.html.erb b/app/views/pool_versions/diff.html.erb index 0bc5ca364..6da3c0ec9 100644 --- a/app/views/pool_versions/diff.html.erb +++ b/app/views/pool_versions/diff.html.erb @@ -32,7 +32,7 @@ -<%= render "pools/secondary_links" %> +<%= render "secondary_links" %> <% content_for(:page_title) do %> Pool Version Comparison - <%= @pool_version.name %> - <%= Danbooru.config.app_name %> diff --git a/app/views/pool_versions/index.html.erb b/app/views/pool_versions/index.html.erb index 988d2279e..ceba9f95c 100644 --- a/app/views/pool_versions/index.html.erb +++ b/app/views/pool_versions/index.html.erb @@ -8,4 +8,4 @@ -<%= render "pools/secondary_links" %> +<%= render "secondary_links" %> diff --git a/app/views/pool_versions/search.html.erb b/app/views/pool_versions/search.html.erb new file mode 100644 index 000000000..da689feba --- /dev/null +++ b/app/views/pool_versions/search.html.erb @@ -0,0 +1,19 @@ +
+ +
+ +<%= render "secondary_links" %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index b82a84b5a..03ebe37c9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -191,6 +191,9 @@ Rails.application.routes.draw do member do get :diff end + collection do + get :search + end end resources :post_replacements, :only => [:index, :new, :create, :update] resources :post_votes, only: [:index]