From 40eb6f146c151bd4408c75bef9df1aa73252f427 Mon Sep 17 00:00:00 2001 From: detraz Date: Thu, 11 Oct 2018 15:15:16 +0200 Subject: [PATCH] Commande manage pour supprimer les users pas encore actifs --- .../0052_optionaluser_delete_notyetactive.py | 20 +++++++++++ preferences/models.py | 4 +++ .../preferences/display_preferences.html | 2 ++ .../management/commands/clean_notyetactive.py | 34 +++++++++++++++++++ users/migrations/0078_auto_20181011_1405.py | 22 ++++++++++++ users/models.py | 2 +- 6 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 preferences/migrations/0052_optionaluser_delete_notyetactive.py create mode 100644 users/management/commands/clean_notyetactive.py create mode 100644 users/migrations/0078_auto_20181011_1405.py diff --git a/preferences/migrations/0052_optionaluser_delete_notyetactive.py b/preferences/migrations/0052_optionaluser_delete_notyetactive.py new file mode 100644 index 00000000..589c6dc7 --- /dev/null +++ b/preferences/migrations/0052_optionaluser_delete_notyetactive.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2018-10-11 12:51 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('preferences', '0051_auto_20180919_2225'), + ] + + operations = [ + migrations.AddField( + model_name='optionaluser', + name='delete_notyetactive', + field=models.IntegerField(default=15, help_text='Inactive users will be deleted after this number of days'), + ), + ] diff --git a/preferences/models.py b/preferences/models.py index 234f94b6..d07bc3f0 100644 --- a/preferences/models.py +++ b/preferences/models.py @@ -107,6 +107,10 @@ class OptionalUser(AclMixin, PreferencesModel): help_text=_("Maximum number of local email addresses for a standard" " user") ) + delete_notyetactive = models.IntegerField( + default=15, + help_text=_("Inactive users will be deleted after this number of days") + ) class Meta: permissions = ( diff --git a/preferences/templates/preferences/display_preferences.html b/preferences/templates/preferences/display_preferences.html index 8083901c..56dfaf9f 100644 --- a/preferences/templates/preferences/display_preferences.html +++ b/preferences/templates/preferences/display_preferences.html @@ -58,6 +58,8 @@ with this program; if not, write to the Free Software Foundation, Inc., {% trans "GPG fingerprint field" %} {{ useroptions.gpg_fingerprint|tick }} + {% trans "Delete not yet active users after" %} + {{ useroptions.delete_notyetactive }} days
{% trans "Email accounts preferences" %} diff --git a/users/management/commands/clean_notyetactive.py b/users/management/commands/clean_notyetactive.py new file mode 100644 index 00000000..40f80c03 --- /dev/null +++ b/users/management/commands/clean_notyetactive.py @@ -0,0 +1,34 @@ +# Copyright © 2017 Gabriel Détraz +# Copyright © 2017 Goulven Kermarec +# Copyright © 2017 Augustin Lemesle +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +from django.core.management.base import BaseCommand, CommandError + +from users.models import User +from preferences.models import OptionalUser +from datetime import timedelta + +from django.utils import timezone + +class Command(BaseCommand): + help = "Delete non members users (not yet active)" + + def handle(self, *args, **options): + days = OptionalUser.get_cached_value('delete_notyetactive') + users = User.objects.filter(state=User.STATE_NOT_YET_ACTIVE).filter(registered__lte=timezone.now() - timedelta(days=days)) + print("Deleting " + str(users.count()) + " users") + users.delete() diff --git a/users/migrations/0078_auto_20181011_1405.py b/users/migrations/0078_auto_20181011_1405.py new file mode 100644 index 00000000..6046d2e4 --- /dev/null +++ b/users/migrations/0078_auto_20181011_1405.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2018-10-11 12:05 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0077_auto_20180824_1750'), + ] + + operations = [ + migrations.AlterField( + model_name='request', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/users/models.py b/users/models.py index f32bed03..41954e62 100755 --- a/users/models.py +++ b/users/models.py @@ -1568,7 +1568,7 @@ class Request(models.Model): ) type = models.CharField(max_length=2, choices=TYPE_CHOICES) token = models.CharField(max_length=32) - user = models.ForeignKey('User', on_delete=models.PROTECT) + user = models.ForeignKey('User', on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True, editable=False) expires_at = models.DateTimeField()