mirror of
https://github.com/discourse/discourse.git
synced 2025-05-24 03:36:18 +08:00
Add ability to destroy a user with 0 posts
This commit is contained in:
27
lib/user_destroyer.rb
Normal file
27
lib/user_destroyer.rb
Normal file
@ -0,0 +1,27 @@
|
||||
require_dependency 'admin_logger'
|
||||
|
||||
# Responsible for destroying a User record
|
||||
class UserDestroyer
|
||||
|
||||
class PostsExistError < RuntimeError; end
|
||||
|
||||
def initialize(admin)
|
||||
@admin = admin
|
||||
raise Discourse::InvalidParameters.new('admin is nil') unless @admin and @admin.is_a?(User)
|
||||
raise Discourse::InvalidAccess unless @admin.admin?
|
||||
end
|
||||
|
||||
# Returns false if the user failed to be deleted.
|
||||
# Returns a frozen instance of the User if the delete succeeded.
|
||||
def destroy(user)
|
||||
raise Discourse::InvalidParameters.new('user is nil') unless user and user.is_a?(User)
|
||||
raise PostsExistError if user.post_count != 0
|
||||
user.destroy.tap do |u|
|
||||
if u
|
||||
AdminLogger.new(@admin).log_user_deletion(user)
|
||||
MessageBus.publish "/file-change", ["refresh"], user_ids: [user.id]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
Reference in New Issue
Block a user