diff --git a/app/controllers/dmails_controller.rb b/app/controllers/dmails_controller.rb index 8c01895e3..3a27011af 100644 --- a/app/controllers/dmails_controller.rb +++ b/app/controllers/dmails_controller.rb @@ -27,9 +27,6 @@ class DmailsController < ApplicationController end end - def search - end - def show @dmail = Dmail.find(params[:id]) check_privilege(@dmail) diff --git a/app/models/dmail.rb b/app/models/dmail.rb index 977a63e18..688e50c69 100644 --- a/app/models/dmail.rb +++ b/app/models/dmail.rb @@ -102,6 +102,11 @@ class Dmail < ActiveRecord::Base where("is_deleted = ?", true) end + def title_matches(query) + query = "*#{query}*" unless query =~ /\*/ + where("lower(dmails.title) LIKE ?", query.to_escaped_for_sql_like) + end + def search_message(query) if query =~ /\*/ && CurrentUser.user.is_builder? escaped_query = query.to_escaped_for_sql_like @@ -131,6 +136,10 @@ class Dmail < ActiveRecord::Base q = where("true") return q if params.blank? + if params[:title_matches].present? + q = q.title_matches(params[:title_matches]) + end + if params[:message_matches].present? q = q.search_message(params[:message_matches]) end diff --git a/app/views/dmails/_search.html.erb b/app/views/dmails/_search.html.erb new file mode 100644 index 000000000..969745d0a --- /dev/null +++ b/app/views/dmails/_search.html.erb @@ -0,0 +1,8 @@ +<%= simple_form_for(:search, url: dmails_path, method: :get, defaults: { required: false }, html: { class: "inline-form" }) do |f| %> + <%= f.hidden_field :folder, value: params[:folder] %> + <%= f.input :title_matches, label: "Title", hint: "Use * for wildcard", input_html: { value: params[:search][:title_matches] } %> + <%= f.input :message_matches, label: "Message", hint: "Use * for wildcard", input_html: { value: params[:search][:messages_matches] } %> + <%= f.input :to_name, label: "To", input_html: { value: params[:search][:to_name] } %> + <%= f.input :from_name, label: "From", input_html: { value: params[:search][:from_name] } %> + <%= f.submit "Search" %> +<% end %> diff --git a/app/views/dmails/_secondary_links.html.erb b/app/views/dmails/_secondary_links.html.erb index 06a9d39dd..59c205b62 100644 --- a/app/views/dmails/_secondary_links.html.erb +++ b/app/views/dmails/_secondary_links.html.erb @@ -6,7 +6,6 @@
  • <%= link_to "Sent", sent_dmails_path(set_default_folder: true) %>
  • |
  • <%= link_to "New", new_dmail_path %>
  • -
  • <%= link_to "Search", search_dmails_path %>
  • <%= link_to "Mark all as read", {:controller => "dmails", :action => "mark_all_as_read"}, :method => :post, :remote => true %>
  • |
  • <%= link_to "Help", wiki_pages_path(title: "help:dmail") %>
  • diff --git a/app/views/dmails/index.html.erb b/app/views/dmails/index.html.erb index df04ee581..eaaa09cce 100644 --- a/app/views/dmails/index.html.erb +++ b/app/views/dmails/index.html.erb @@ -8,6 +8,8 @@

    Messages

    <% end %> + <%= render "search" %> + diff --git a/app/views/dmails/search.html.erb b/app/views/dmails/search.html.erb deleted file mode 100644 index 9e3aa21d1..000000000 --- a/app/views/dmails/search.html.erb +++ /dev/null @@ -1,19 +0,0 @@ -
    - -
    - -<%= render "secondary_links" %> - -<% content_for(:page_title) do %> - Search Messages - <%= Danbooru.config.app_name %> -<% end %> diff --git a/test/unit/dmail_test.rb b/test/unit/dmail_test.rb index 4a6d6343f..ec89c655c 100644 --- a/test/unit/dmail_test.rb +++ b/test/unit/dmail_test.rb @@ -74,9 +74,14 @@ class DmailTest < ActiveSupport::TestCase context "search" do should "return results based on title contents" do dmail = FactoryGirl.create(:dmail, :title => "xxx", :owner => @user) - matches = Dmail.search_message("xxx") - assert(matches.any?) - matches = Dmail.search_message("aaa") + + matches = Dmail.search(title_matches: "x") + assert_equal([dmail.id], matches.map(&:id)) + + matches = Dmail.search(message_matches: "xxx") + assert_equal([dmail.id], matches.map(&:id)) + + matches = Dmail.search(message_matches: "aaa") assert(matches.empty?) end