diff --git a/app/models/user.rb b/app/models/user.rb index 9c8e0f02a..8b2e96afa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -866,6 +866,10 @@ class User < Principal project_ids.map(&:to_i) end + def self.prune(age=7.days) + User.where("created_on < ? AND status = ?", Time.now - age, STATUS_REGISTERED).destroy_all + end + protected def validate_password_length diff --git a/lib/tasks/redmine.rake b/lib/tasks/redmine.rake index c7c257bfc..574444767 100644 --- a/lib/tasks/redmine.rake +++ b/lib/tasks/redmine.rake @@ -40,6 +40,13 @@ namespace :redmine do end end + namespace :users do + desc 'Removes registered users that have not been activated after seven days.' + task :prune => :environment do + User.prune + end + end + namespace :watchers do desc 'Removes watchers from what they can no longer view.' task :prune => :environment do diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 32f4dd200..8b6ee5ccb 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -1348,4 +1348,14 @@ class UserTest < ActiveSupport::TestCase cv2a.reload assert_equal @dlopper.id.to_s, cv2a.value end + + def test_prune_should_destroy_unactivated_old_users + User.generate!(:status => User::STATUS_REGISTERED, :created_on => 6.days.ago) + User.generate!(:status => User::STATUS_REGISTERED, :created_on => 7.day.ago) + User.generate!(:status => User::STATUS_REGISTERED) + + assert_difference 'User.count', -2 do + User.prune + end + end end