Added a admin action to cleanup personal data from inactive members.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -16,13 +16,14 @@ def activate_user(modeladmin, request, queryset):
|
||||
:param request: An HttpRequest representing the current request.
|
||||
:param queryset: A QuerySet containing the objects selected by the user.
|
||||
"""
|
||||
[activation.activate() for activation in queryset ]
|
||||
[activation.activate() for activation in 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},
|
||||
|
||||
Binary file not shown.
@@ -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"
|
||||
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user