diff --git a/app/models/user.rb b/app/models/user.rb index cc1841a61..5d847872a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -887,6 +887,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 2bebaf18c..b22490022 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 c395bb310..931a793ff 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -1313,6 +1313,16 @@ class UserTest < ActiveSupport::TestCase assert_equal [], User.find(2).bookmarked_project_ids end + def test_prune_should_destroy_not_activated_old_users + User.generate!(:status => User::STATUS_REGISTERED, :created_on => 8.days.ago) + User.generate!(:status => User::STATUS_REGISTERED, :created_on => 7.days.ago) + User.generate!(:status => User::STATUS_REGISTERED, :created_on => 6.days.ago) + + assert_difference 'User.count', -2 do + User.prune + end + end + if Object.const_defined?(:OpenID) def test_setting_identity_url normalized_open_id_url = 'http://example.com/'