fix #2239
This commit is contained in:
@@ -4,6 +4,7 @@ class Pool < ActiveRecord::Base
|
||||
validates_uniqueness_of :name, :case_sensitive => false
|
||||
validates_format_of :name, :with => /\A[^,]+\Z/, :message => "cannot have commas"
|
||||
validates_inclusion_of :category, :in => %w(series collection)
|
||||
validate :updater_can_change_category
|
||||
belongs_to :creator, :class_name => "User"
|
||||
belongs_to :updater, :class_name => "User"
|
||||
has_many :versions, lambda {order("pool_versions.id ASC")}, :class_name => "PoolVersion", :dependent => :destroy
|
||||
@@ -12,6 +13,7 @@ class Pool < ActiveRecord::Base
|
||||
before_validation :initialize_is_active, :on => :create
|
||||
before_validation :initialize_creator, :on => :create
|
||||
before_validation :strip_name
|
||||
after_save :update_category_pseudo_tags_for_posts_async
|
||||
after_save :create_version
|
||||
after_create :synchronize!
|
||||
before_destroy :create_mod_action_for_destroy
|
||||
@@ -262,7 +264,7 @@ class Pool < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
def synchronize!
|
||||
def synchronize
|
||||
added = post_id_array - post_id_array_was
|
||||
removed = post_id_array_was - post_id_array
|
||||
|
||||
@@ -279,6 +281,10 @@ class Pool < ActiveRecord::Base
|
||||
normalize_post_ids
|
||||
clear_post_id_array
|
||||
self.post_count = post_id_array.size
|
||||
end
|
||||
|
||||
def synchronize!
|
||||
synchronize
|
||||
save
|
||||
end
|
||||
|
||||
@@ -372,4 +378,31 @@ class Pool < ActiveRecord::Base
|
||||
"updated_at" => updated_at
|
||||
}
|
||||
end
|
||||
|
||||
def update_category_pseudo_tags_for_posts_async
|
||||
if category_changed?
|
||||
delay(:queue => "default").update_category_pseudo_tags_for_posts
|
||||
end
|
||||
end
|
||||
|
||||
def update_category_pseudo_tags_for_posts
|
||||
Post.where("id in (?)", post_id_array).find_each do |post|
|
||||
post.reload
|
||||
post.set_pool_category_pseudo_tags
|
||||
Post.where(:id => post.id).update_all(:pool_string => post.pool_string)
|
||||
end
|
||||
end
|
||||
|
||||
def category_changeable_by?(user)
|
||||
user.is_builder? || (user.is_member? && post_count <= 100)
|
||||
end
|
||||
|
||||
def updater_can_change_category
|
||||
if category_changed? && !category_changeable_by?(CurrentUser.user)
|
||||
errors[:base] << "You cannot change the category of pools with greater than 100 posts"
|
||||
false
|
||||
else
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user