diff --git a/app/helpers/delayed_jobs_helper.rb b/app/helpers/delayed_jobs_helper.rb index 3667e228e..165673d84 100644 --- a/app/helpers/delayed_jobs_helper.rb +++ b/app/helpers/delayed_jobs_helper.rb @@ -2,31 +2,31 @@ module DelayedJobsHelper def print_handler(job) case job.name when "Class#expire_cache" - "expire post count cache: " + job.payload_object.args.flatten.join(" ") + "expire post count cache: " + h(job.payload_object.args.flatten.join(" ")) when "Upload#process!" 'upload post: record' when "Tag#update_related" - "update related tags: " + job.payload_object.name + "update related tags: " + h(job.payload_object.name) when "TagAlias#process!" - 'alias: ' + job.payload_object.antecedent_name + " -> " + job.payload_object.consequent_name + 'alias: ' + h(job.payload_object.antecedent_name) + " -> " + h(job.payload_object.consequent_name) when "TagImplication#process!" - 'implication: ' + job.payload_object.antecedent_name + " -> " + job.payload_object.consequent_name + 'implication: ' + h(job.payload_object.antecedent_name) + " -> " + h(job.payload_object.consequent_name) when "Class#clear_cache_for" - "expire tag alias cache: " + job.payload_object.args.flatten.join(" ") + "expire tag alias cache: " + h(job.payload_object.args.flatten.join(" ")) when "Tag#update_category_cache" - "update tag category cache: " + job.payload_object.name + "update tag category cache: " + h(job.payload_object.name) when "Tag#update_category_post_counts" - "update category post counts: " + job.payload_object.name + "update category post counts: " + h(job.payload_object.name) else - job.handler + h(job.handler) end end end diff --git a/app/logical/user_deletion.rb b/app/logical/user_deletion.rb index 87920bff4..9dfffa4b1 100644 --- a/app/logical/user_deletion.rb +++ b/app/logical/user_deletion.rb @@ -3,6 +3,13 @@ class UserDeletion attr_reader :user, :password + def self.remove_favorites_for(user_name, user_id) + user = User.find(user_id) + Post.tag_match("fav:#{user_name}").find_each do |post| + Favorite.remove(post, user) + end + end + def initialize(user, password) @user = user @password = password @@ -12,6 +19,7 @@ class UserDeletion validate clear_user_settings remove_favorites + clear_tag_subscriptions rename reset_password create_mod_action @@ -23,6 +31,9 @@ private ModAction.create(:description => "user ##{user.id} deleted") end + def clear_tag_subscriptions + TagSubscription.where(:creator_id => user.id).destroy_all + end def clear_user_settings user.email = nil @@ -45,9 +56,7 @@ private end def remove_favorites - Post.tag_match("fav:#{user.name}").find_each do |post| - Favorite.remove(post, user) - end + UserDeletion.delay.remove_favorites_for(user.name, user.id) end def rename diff --git a/app/models/post.rb b/app/models/post.rb index 8b63b976c..8aa59f457 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -30,7 +30,6 @@ class Post < ActiveRecord::Base has_many :children, :class_name => "Post", :foreign_key => "parent_id", :order => "posts.id" has_many :disapprovals, :class_name => "PostDisapproval", :dependent => :destroy validates_uniqueness_of :md5 - validates_presence_of :parent, :if => lambda {|rec| !rec.parent_id.nil?} validate :post_is_not_its_own_parent attr_accessible :source, :rating, :tag_string, :old_tag_string, :last_noted_at, :parent_id, :as => [:member, :builder, :gold, :platinum, :contributor, :janitor, :moderator, :admin, :default] attr_accessible :is_rating_locked, :is_note_locked, :as => [:builder, :contributor, :janitor, :moderator, :admin] diff --git a/app/models/tag_implication.rb b/app/models/tag_implication.rb index 865081b1a..414d14e34 100644 --- a/app/models/tag_implication.rb +++ b/app/models/tag_implication.rb @@ -2,7 +2,6 @@ class TagImplication < ActiveRecord::Base before_save :update_descendant_names after_save :update_descendant_names_for_parent after_destroy :update_descendant_names_for_parent - after_destroy :update_posts_for_destroy belongs_to :creator, :class_name => "User" before_validation :initialize_creator, :on => :create before_validation :normalize_names @@ -100,32 +99,9 @@ class TagImplication < ActiveRecord::Base end end - module DeletionMethods - extend ActiveSupport::Concern - - module ClassMethods - def update_posts_for_destroy(creator_id, creator_ip_addr, tag_name) - Post.tag_match("#{tag_name} status:any").find_each do |post| - escaped_tag_name = Regexp.escape(tag_name) - fixed_tags = post.tag_string.sub(/(?:\A| )#{escaped_tag_name}(?:\Z| )/, " ").strip - CurrentUser.scoped(User.find(creator_id), creator_ip_addr) do - post.update_attributes( - :tag_string => fixed_tags - ) - end - end - end - end - - def update_posts_for_destroy - TagImplication.delay(:queue => "default").update_posts_for_destroy(CurrentUser.user.id, CurrentUser.ip_addr, consequent_name) - end - end - include DescendantMethods include ParentMethods extend SearchMethods - include DeletionMethods def initialize_creator self.creator_id = CurrentUser.user.id diff --git a/app/views/artist_versions/index.html.erb b/app/views/artist_versions/index.html.erb index c2e8aee25..478a0d71c 100644 --- a/app/views/artist_versions/index.html.erb +++ b/app/views/artist_versions/index.html.erb @@ -25,7 +25,7 @@