diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index 4cc773931..d279e3894 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -523,10 +523,15 @@ Danbooru.Post.initialize_saved_searches = function() { $("#save-search").click(function() { + var input = null; + if (Danbooru.meta("enable-categorized-saved-searches") === "true") { + input = window.prompt("Category for this saved search (optional):"); + } $.post( "/saved_searches.js", { - "tags": $("#tags").attr("value") + "tags": $("#tags").attr("value"), + "category": input } ); }); diff --git a/app/logical/anonymous_user.rb b/app/logical/anonymous_user.rb index accfadd24..5390c6f94 100644 --- a/app/logical/anonymous_user.rb +++ b/app/logical/anonymous_user.rb @@ -237,6 +237,10 @@ class AnonymousUser false end + def enable_categorized_saved_searches? + false + end + %w(member banned gold builder platinum janitor moderator admin).each do |name| define_method("is_#{name}?") do false diff --git a/app/models/saved_search.rb b/app/models/saved_search.rb index 6ef423e7a..e78996989 100644 --- a/app/models/saved_search.rb +++ b/app/models/saved_search.rb @@ -3,24 +3,30 @@ class SavedSearch < ActiveRecord::Base extend ActiveSupport::Concern module ClassMethods - def refresh_listbooru(user_id) + def refresh_listbooru(user_id, name) return unless Danbooru.config.listbooru_auth_key - uri = URI.parse("#{Danbooru.config.listbooru_server}/users/#{user_id}") + params = { + :user_id => user_id, + :name => name, + :key => Danbooru.config.listbooru_auth_key + } + uri = URI.parse("#{Danbooru.config.listbooru_server}/users") + uri.query = URI.encode_www_form(params) Net::HTTP.get_response(uri) end - def update_listbooru_on_create(user_id, query) + def update_listbooru_on_create(user_id, name, query) return unless Danbooru.config.listbooru_auth_key uri = URI.parse("#{Danbooru.config.listbooru_server}/searches") - Net::HTTP.post_form(uri, {"user_id" => user_id, "query" => query, "key" => Danbooru.config.listbooru_auth_key}) + Net::HTTP.post_form(uri, {"user_id" => user_id, "name" => name.try(:downcase), "query" => query, "key" => Danbooru.config.listbooru_auth_key}) end - def update_listbooru_on_destroy(user_id, query) + def update_listbooru_on_destroy(user_id, name, query) return unless Danbooru.config.listbooru_auth_key uri = URI.parse("#{Danbooru.config.listbooru_server}/searches") Net::HTTP.start(uri.host, uri.port) do |http| req = Net::HTTP::Delete.new("/searches") - req.set_form_data("user_id" => user_id, "query" => query, "key" => Danbooru.config.listbooru_auth_key) + req.set_form_data("user_id" => user_id, "name" => name.try(:downcase), "query" => query, "key" => Danbooru.config.listbooru_auth_key) http.request(req) end end @@ -28,12 +34,12 @@ class SavedSearch < ActiveRecord::Base def update_listbooru_on_create return unless Danbooru.config.listbooru_auth_key - SavedSearch.delay(:queue => "default").update_listbooru_on_create(user_id, tag_query) + SavedSearch.delay(:queue => "default").update_listbooru_on_create(user_id, category, tag_query) end def update_listbooru_on_destroy return unless Danbooru.config.listbooru_auth_key - SavedSearch.delay(:queue => "default").update_listbooru_on_destroy(user_id, tag_query) + SavedSearch.delay(:queue => "default").update_listbooru_on_destroy(user_id, category, tag_query) end end diff --git a/app/models/user.rb b/app/models/user.rb index ba94c6d49..e2dcd41f5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -32,13 +32,14 @@ class User < ActiveRecord::Base has_saved_searches can_approve_posts can_upload_free + enable_categorized_saved_searches ) include Danbooru::HasBitFlags has_bit_flags BOOLEAN_ATTRIBUTES, :field => "bit_prefs" attr_accessor :password, :old_password - attr_accessible :dmail_filter_attributes, :enable_privacy_mode, :enable_post_navigation, :new_post_navigation_layout, :password, :old_password, :password_confirmation, :password_hash, :email, :last_logged_in_at, :last_forum_read_at, :has_mail, :receive_email_notifications, :comment_threshold, :always_resize_images, :favorite_tags, :blacklisted_tags, :name, :ip_addr, :time_zone, :default_image_size, :enable_sequential_post_navigation, :per_page, :hide_deleted_posts, :style_usernames, :enable_auto_complete, :custom_style, :show_deleted_children, :as => [:moderator, :janitor, :gold, :member, :anonymous, :default, :builder, :admin] + attr_accessible :dmail_filter_attributes, :enable_privacy_mode, :enable_post_navigation, :new_post_navigation_layout, :password, :old_password, :password_confirmation, :password_hash, :email, :last_logged_in_at, :last_forum_read_at, :has_mail, :receive_email_notifications, :comment_threshold, :always_resize_images, :favorite_tags, :blacklisted_tags, :name, :ip_addr, :time_zone, :default_image_size, :enable_sequential_post_navigation, :per_page, :hide_deleted_posts, :style_usernames, :enable_auto_complete, :custom_style, :show_deleted_children, :enable_categorized_saved_searches, :as => [:moderator, :janitor, :gold, :member, :anonymous, :default, :builder, :admin] attr_accessible :level, :as => :admin validates_length_of :name, :within => 2..100, :on => :create validates_format_of :name, :with => /\A[^\s:]+\Z/, :on => :create, :message => "cannot have whitespace or colons" diff --git a/app/views/layouts/default.html.erb b/app/views/layouts/default.html.erb index 5bc4a5d48..afbecf5e7 100644 --- a/app/views/layouts/default.html.erb +++ b/app/views/layouts/default.html.erb @@ -22,6 +22,7 @@ + <%= auto_discovery_link_tag :atom, posts_path(:format => "atom", :tags => params[:tags]) %> <%= stylesheet_link_tag "application", :media => "screen" %> <% if CurrentUser.user.custom_style.present? %> diff --git a/app/views/saved_searches/_interface.html.erb b/app/views/saved_searches/_interface.html.erb index 491c4272e..ae8967098 100644 --- a/app/views/saved_searches/_interface.html.erb +++ b/app/views/saved_searches/_interface.html.erb @@ -1,9 +1,3 @@ -<% if CurrentUser.user.show_saved_searches? %> - - <% if CurrentUser.user.has_saved_searches? && saved_searches.tagged(params[:tags]) %> - <%= button_to "Remove this saved search", saved_search_path(saved_searches.tagged(params[:tags]), :tags => params[:tags]), :remote => true, :method => :delete %> - <% elsif CurrentUser.user.is_member? %> - <%= button_tag "Save this search", :id => "save-search" %> - <% end %> - -<% end %> \ No newline at end of file +<% if CurrentUser.show_saved_searches? %> + <%= button_tag "Save search", :id => "save-search" %> +<% end %> diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index c439a40d1..09e84bb8a 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -68,6 +68,8 @@ <%= f.input :enable_auto_complete, :as => :select, :collection => [["Yes", "true"], ["No", "false"]], :include_blank => false %> + <%= f.input :enable_categorized_saved_searches, :as => :select, :collection => [["No", "false"], ["Yes", "true"]], :include_blank => false %> +