Added a admin action to cleanup personal data from inactive members.

This commit is contained in:
2018-05-03 09:45:06 +02:00
parent ac9b3e06c0
commit 121167f1fe
4 changed files with 64 additions and 18 deletions

View File

@@ -1,11 +1,11 @@
""" Admin Interface to manage the memberships."""
# import stuff we need from django
from django.contrib import admin
from django.contrib import admin, messages
from django.contrib.auth.admin import UserAdmin, GroupAdmin
from django.contrib.auth.models import Group
from django.core.exceptions import PermissionDenied
from django.utils.translation import ugettext as _
from easy_thumbnails import fields, widgets
from membership.models import Membership, ActivationRequest
@@ -22,7 +22,8 @@ def activate_user(modeladmin, request, queryset):
activate_user.short_description = _('Activate selected User')
def cleanup_activation(modeladmin, request, queryset): # Ignore PyLintBear (W0613)
def cleanup_activation(modeladmin, request,
queryset): # Ignore PyLintBear (W0613)
"""Delete every selected activation request that has been expired.
:param modeladmin: The ModelAdmin that triggered this action.
@@ -38,6 +39,33 @@ cleanup_activation.short_description = _(
"Cleanup selected Activation Requests")
def clear_personal_data(modeladmin, request, queryset):
"""deactivates the account and removes all personal user information.
:param modeladmin: The ModelAdmin that triggered this action.
:param request: An HttpRequest representing the current request.
:param queryset: A QuerySet containing the objects selected by the user.
"""
cleared_memberships = 0
if not modeladmin.has_delete_permission(request):
raise PermissionDenied
for membership in queryset:
if membership.membership == False:
[ setattr(membership, fieldname, None) for fieldname in membership.nullable_personal_data ]
[ setattr(membership, fieldname, "") for fieldname in membership.blankable_personal_data ]
membership.is_active = False
membership.confirmed = False
membership.membership = False
membership.save()
cleared_memberships += 1
else:
modeladmin.message_user(request, _("Can't remove personal data from active member %s.") % membership.username, messages.ERROR)
if cleared_memberships > 0:
modeladmin.message_user(request, _("Cleared %d personal data profiles.") % cleared_memberships, messages.INFO)
clear_personal_data.short_description = _("Clear personal Data")
class ProxyGroup(Group):
"""A Proxy to list Usergroups from django.contrib.auth here."""
@@ -50,6 +78,8 @@ class ProxyGroup(Group):
class MembershipAdmin(UserAdmin):
"""Admin interface to manage membership. e.g. users."""
actions = [clear_personal_data, ]
formfield_overrides = {
fields.ThumbnailerImageField: {
'widget': widgets.ImageClearableFileInput},

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.membership\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-30 10:57+0200\n"
"PO-Revision-Date: 2018-04-30 10:59+0105\n"
"POT-Creation-Date: 2018-05-03 09:36+0200\n"
"PO-Revision-Date: 2018-05-03 09:39+0105\n"
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
"Language-Team: Kasu <verein@kasu.at>\n"
"Language: de\n"
@@ -31,27 +31,42 @@ msgstr "Weiblich"
msgid "Activate selected User"
msgstr "Ausgewählte Benutzer freischalten"
#: admin.py:38
#: admin.py:39
msgid "Cleanup selected Activation Requests"
msgstr "Ausgewählte Aktivierungsanfragen bereinigen"
#: admin.py:47
#: admin.py:62
#, python-format
msgid "Can't remove personal data from active member %s."
msgstr ""
"Persönliche Daten von aktiven Mitglied %s können nicht entfernt werden."
#: admin.py:64
#, python-format
msgid "Cleared %d personal data profiles."
msgstr "Persönliche Daten in %d Profilen entfernt."
#: admin.py:66
msgid "Clear personal Data"
msgstr "Persönliche Daten bereinigen"
#: admin.py:75
msgid "Group"
msgstr "Gruppe"
#: admin.py:48
#: admin.py:76
msgid "Groups"
msgstr "Gruppen"
#: admin.py:72 models.py:163 models.py:216
#: admin.py:102 models.py:163 models.py:218
msgid "Membership"
msgstr "Mitgliedschaft"
#: admin.py:77
#: admin.py:107
msgid "Permissions"
msgstr "Berechtigung"
#: admin.py:79
#: admin.py:109
msgid "Important dates"
msgstr "Wichtige Daten"
@@ -159,7 +174,7 @@ msgstr "Bestätigt"
msgid "This person has paid the membership fee."
msgstr "Diese Person hat ihre Mitgliedschaft bezahlt"
#: models.py:217
#: models.py:219
msgid "Memberships"
msgstr "Mitgliedschaften"
@@ -388,7 +403,6 @@ msgid "login"
msgstr "Anmelden"
#: templates/membership/register_form.html:26
#| msgid "Membership"
msgid "Club membership"
msgstr "Vereinsmitgliedschaft"

View File

@@ -7,8 +7,8 @@ from os import path
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.urls import reverse
from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.utils.translation import ugettext as _
from easy_thumbnails.fields import ThumbnailerImageField
@@ -150,7 +150,7 @@ class Membership(AbstractUser):
max_length=1,
choices=GENDER_CHOICES,
blank=True,
null=True
null=True,
)
website = models.URLField(blank=True)
avatar = ThumbnailerImageField(
@@ -206,8 +206,10 @@ class Membership(AbstractUser):
help_text=_('This person has paid the membership fee.')
)
# comment = models.TextField(blank=True)
# objects = MembershipManager()
nullable_personal_data = (
'gender', 'birthday', 'telephone', 'street_name', 'post_code', 'city')
blankable_personal_data = (
'email', 'password', 'first_name', 'last_name', 'website',)
class Meta(object):
"""To manage object ordering and dispalynames on the admin interface."""