2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-03-31 08:32:21 +08:00
|
|
|
class DestroyTask
|
2019-07-18 02:41:13 +08:00
|
|
|
|
|
|
|
def initialize(io = $stdout)
|
|
|
|
@io = io
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy_topics(category, parent_category = nil, delete_system_topics = false)
|
2018-09-10 19:52:14 +08:00
|
|
|
c = Category.find_by_slug(category, parent_category)
|
|
|
|
descriptive_slug = parent_category ? "#{parent_category}/#{category}" : category
|
2019-07-18 02:41:13 +08:00
|
|
|
return @io.puts "A category with the slug: #{descriptive_slug} could not be found" if c.nil?
|
|
|
|
if delete_system_topics
|
|
|
|
topics = Topic.where(category_id: c.id, pinned_at: nil)
|
|
|
|
else
|
|
|
|
topics = Topic.where(category_id: c.id, pinned_at: nil).where.not(user_id: -1)
|
|
|
|
end
|
|
|
|
@io.puts "There are #{topics.count} topics to delete in #{descriptive_slug} category"
|
2018-03-31 08:32:21 +08:00
|
|
|
topics.each do |topic|
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts "Deleting #{topic.slug}..."
|
2018-03-31 08:32:21 +08:00
|
|
|
first_post = topic.ordered_posts.first
|
|
|
|
if first_post.nil?
|
2019-07-18 02:41:13 +08:00
|
|
|
return @io.puts "Topic.ordered_posts.first was nil"
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
|
|
|
system_user = User.find(-1)
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts PostDestroyer.new(system_user, first_post).destroy
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy_topics_in_category(category_id, delete_system_topics = false)
|
|
|
|
c = Category.find(category_id)
|
|
|
|
return @io.puts "A category with the id: #{category_id} could not be found" if c.nil?
|
|
|
|
if delete_system_topics
|
|
|
|
topics = Topic.where(category_id: c.id, pinned_at: nil)
|
|
|
|
else
|
|
|
|
topics = Topic.where(category_id: c.id, pinned_at: nil).where.not(user_id: -1)
|
|
|
|
end
|
|
|
|
@io.puts "There are #{topics.count} topics to delete in #{c.slug} category"
|
|
|
|
topics.each do |topic|
|
|
|
|
first_post = topic.ordered_posts.first
|
|
|
|
return @io.puts "Topic.ordered_posts.first was nil for topic: #{topic.id}" if first_post.nil?
|
|
|
|
system_user = User.find(-1)
|
|
|
|
PostDestroyer.new(system_user, first_post).destroy
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
2019-07-18 02:41:13 +08:00
|
|
|
topics = Topic.where(category_id: c.id, pinned_at: nil)
|
|
|
|
@io.puts "There are #{topics.count} topics that could not be deleted in #{c.slug} category"
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
|
|
|
|
2019-07-18 02:41:13 +08:00
|
|
|
def destroy_topics_all_categories
|
2018-03-31 08:32:21 +08:00
|
|
|
categories = Category.all
|
|
|
|
categories.each do |c|
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts destroy_topics(c.slug, c.parent_category&.slug)
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-07-18 02:41:13 +08:00
|
|
|
def destroy_private_messages
|
2018-03-31 08:32:21 +08:00
|
|
|
pms = Topic.where(archetype: "private_message")
|
|
|
|
current_user = User.find(-1) #system
|
|
|
|
pms.each do |pm|
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts "Destroying #{pm.slug} pm"
|
2018-03-31 08:32:21 +08:00
|
|
|
first_post = pm.ordered_posts.first
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts PostDestroyer.new(current_user, first_post).destroy
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy_category(category_id, destroy_system_topics = false)
|
|
|
|
c = Category.find_by_id(category_id)
|
|
|
|
return @io.puts "A category with the id: #{category_id} could not be found" if c.nil?
|
|
|
|
subcategories = Category.where(parent_category_id: c.id).pluck(:id)
|
|
|
|
@io.puts "There are #{subcategories.count} subcategories to delete" if subcategories
|
|
|
|
subcategories.each do |subcategory_id|
|
|
|
|
s = Category.find_by_id(subcategory_id)
|
|
|
|
category_topic_destroyer(s, destroy_system_topics)
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
2019-07-18 02:41:13 +08:00
|
|
|
category_topic_destroyer(c, destroy_system_topics)
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
|
|
|
|
2019-07-18 02:41:13 +08:00
|
|
|
def destroy_groups
|
2018-03-31 08:32:21 +08:00
|
|
|
groups = Group.where(automatic: false)
|
|
|
|
groups.each do |group|
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts "destroying group: #{group.id}"
|
|
|
|
@io.puts group.destroy
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-07-18 02:41:13 +08:00
|
|
|
def destroy_users
|
2018-03-31 08:32:21 +08:00
|
|
|
users = User.where(admin: false, id: 1..Float::INFINITY)
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts "There are #{users.count} users to delete"
|
2018-03-31 08:32:21 +08:00
|
|
|
options = {}
|
|
|
|
options[:delete_posts] = true
|
|
|
|
current_user = User.find(-1) #system
|
|
|
|
users.each do |user|
|
|
|
|
begin
|
|
|
|
if UserDestroyer.new(current_user).destroy(user, options)
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts "#{user.username} deleted"
|
2018-03-31 08:32:21 +08:00
|
|
|
else
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts "#{user.username} not deleted"
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
|
|
|
rescue UserDestroyer::PostsExistError
|
|
|
|
raise Discourse::InvalidAccess.new("User #{user.username} has #{user.post_count} posts, so can't be deleted.")
|
|
|
|
rescue NoMethodError
|
2019-07-18 02:41:13 +08:00
|
|
|
@io.puts "#{user.username} could not be deleted"
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-07-18 02:41:13 +08:00
|
|
|
def destroy_stats
|
2018-03-31 08:32:21 +08:00
|
|
|
ApplicationRequest.destroy_all
|
|
|
|
IncomingLink.destroy_all
|
|
|
|
UserVisit.destroy_all
|
|
|
|
UserProfileView.destroy_all
|
|
|
|
user_profiles = UserProfile.all
|
|
|
|
user_profiles.each do |user_profile|
|
|
|
|
user_profile.views = 0
|
|
|
|
user_profile.save!
|
|
|
|
end
|
|
|
|
PostAction.unscoped.destroy_all
|
|
|
|
EmailLog.destroy_all
|
|
|
|
end
|
2019-07-18 02:41:13 +08:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def category_topic_destroyer(category, destroy_system_topics = false)
|
|
|
|
destroy_topics_log = destroy_topics_in_category(category.id, destroy_system_topics)
|
|
|
|
@io.puts "Destroying #{category.slug} category"
|
|
|
|
category.destroy
|
|
|
|
end
|
|
|
|
|
2018-03-31 08:32:21 +08:00
|
|
|
end
|