FEATURE: Add site setting to disable staged user cleanup

... and disabled the cleanup during imports, otherwise a running Sidekiq might delete users before posts are created
This commit is contained in:
Gerhard Schlager 2020-03-07 23:34:28 +01:00
parent 60b47d622e
commit edc8d58ac3
5 changed files with 17 additions and 2 deletions

View File

@ -6,12 +6,15 @@ module Jobs
every 1.day every 1.day
def execute(args) def execute(args)
clean_up_after_days = SiteSetting.clean_up_unused_staged_users_after_days
return if clean_up_after_days <= 0
destroyer = UserDestroyer.new(Discourse.system_user) destroyer = UserDestroyer.new(Discourse.system_user)
User.joins("LEFT JOIN posts ON posts.user_id = users.id") User.joins("LEFT JOIN posts ON posts.user_id = users.id")
.where("posts.user_id IS NULL") .where("posts.user_id IS NULL")
.where(staged: true, admin: false, moderator: false) .where(staged: true, admin: false, moderator: false)
.where("users.created_at < ?", 1.year.ago) .where("users.created_at < ?", clean_up_after_days.days.ago)
.find_each do |user| .find_each do |user|
begin begin

View File

@ -1992,6 +1992,7 @@ en:
ignored_users_message_gap_days: "How long to wait before notifying moderators again about a user who has been ignored by many others." ignored_users_message_gap_days: "How long to wait before notifying moderators again about a user who has been ignored by many others."
clean_up_inactive_users_after_days: "Number of days before an inactive user (trust level 0 without any posts) is removed. To disable clean up set to 0." clean_up_inactive_users_after_days: "Number of days before an inactive user (trust level 0 without any posts) is removed. To disable clean up set to 0."
clean_up_unused_staged_users_after_days: "Number of days before an unused staged user (without any posts) is removed. To disable clean up set to 0."
user_selected_primary_groups: "Allow users to set their own primary group" user_selected_primary_groups: "Allow users to set their own primary group"

View File

@ -589,6 +589,10 @@ users:
default: 730 default: 730
min: 0 min: 0
max: 3650 max: 3650
clean_up_unused_staged_users_after_days:
default: 365
min: 0
max: 3650
user_selected_primary_groups: user_selected_primary_groups:
default: false default: false
client: true client: true

View File

@ -81,7 +81,9 @@ class ImportScripts::Base
disable_emails: 'yes', disable_emails: 'yes',
max_attachment_size_kb: 102400, max_attachment_size_kb: 102400,
max_image_size_kb: 102400, max_image_size_kb: 102400,
authorized_extensions: '*' authorized_extensions: '*',
clean_up_inactive_users_after_days: 0,
clean_up_unused_staged_users_after_days: 0
} }
end end

View File

@ -32,6 +32,11 @@ RSpec.describe Jobs::CleanUpUnusedStagedUsers do
before { staged_user.update!(moderator: true) } before { staged_user.update!(moderator: true) }
include_examples "does not delete" include_examples "does not delete"
end end
context "when job is disabled" do
before { SiteSetting.clean_up_unused_staged_users_after_days = 0 }
include_examples "does not delete"
end
end end
context 'when staged user is not old enough' do context 'when staged user is not old enough' do