100 lines
3.5 KiB
Python
100 lines
3.5 KiB
Python
""" Admin Interface to manage the memberships."""
|
|
# import stuff we need from django
|
|
from django.contrib import admin
|
|
from django.contrib.auth.admin import UserAdmin, GroupAdmin
|
|
from django.contrib.auth.models import Group
|
|
from django.utils.translation import ugettext as _
|
|
from easy_thumbnails import fields, widgets
|
|
|
|
from membership.models import Membership, ActivationRequest
|
|
|
|
|
|
def activate_user(modeladmin, request, queryset):
|
|
"""Triggers activation of the selects actication requests by hand.
|
|
|
|
: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.
|
|
"""
|
|
[activation.activate() for activation in queryset ]
|
|
|
|
|
|
activate_user.short_description = _('Activate selected User')
|
|
|
|
|
|
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.
|
|
:param request: An HttpRequest representing the current request.
|
|
:param queryset: A QuerySet containing the objects selected by the user.
|
|
"""
|
|
for activation in queryset:
|
|
if activation.expired:
|
|
activation.user.delete()
|
|
|
|
|
|
cleanup_activation.short_description = _(
|
|
"Cleanup selected Activation Requests")
|
|
|
|
|
|
class ProxyGroup(Group):
|
|
"""A Proxy to list Usergroups from django.contrib.auth here."""
|
|
|
|
class Meta:
|
|
""" MetaData to localize this Proxy Group."""
|
|
proxy = True
|
|
verbose_name = _('Group')
|
|
verbose_name_plural = _('Groups')
|
|
|
|
|
|
class MembershipAdmin(UserAdmin):
|
|
"""Admin interface to manage membership. e.g. users."""
|
|
formfield_overrides = {
|
|
fields.ThumbnailerImageField: {
|
|
'widget': widgets.ImageClearableFileInput},
|
|
}
|
|
list_filter = ('is_active', 'membership', 'confirmed')
|
|
list_display = (
|
|
'username',
|
|
'first_name',
|
|
'last_name',
|
|
'is_active',
|
|
'membership',
|
|
'confirmed',
|
|
'paid_until',
|
|
)
|
|
list_editable = ('confirmed', 'paid_until',)
|
|
list_display_links = ('username',)
|
|
fieldsets = (
|
|
(None, {'fields': (('username', 'password'), 'gender', 'avatar',
|
|
('first_name', 'last_name'), ('email', 'website'))}),
|
|
(_('Membership'), {'classes': ('collapse',),
|
|
'fields': (
|
|
('membership', 'confirmed'), 'birthday',
|
|
'telephone',
|
|
'street_name', ('post_code', 'city'))}),
|
|
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
|
|
'groups', 'user_permissions')}),
|
|
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
|
|
)
|
|
ordering = ('username',)
|
|
search_fields = ('username', 'first_name', 'last_name',)
|
|
|
|
|
|
admin.site.register(Membership, MembershipAdmin)
|
|
|
|
|
|
class RegistrationAdmin(admin.ModelAdmin):
|
|
"""To administrag user activation requests.
|
|
Kasu uses an two factor registration via email."""
|
|
list_display = ('username', 'first_name', 'last_name', 'email',
|
|
'registration_date', 'expired')
|
|
search_fields = ('user__username', 'user__first_name')
|
|
actions = [cleanup_activation, activate_user]
|
|
|
|
|
|
admin.site.register(ActivationRequest, RegistrationAdmin)
|
|
admin.site.unregister(Group)
|
|
admin.site.register(ProxyGroup, GroupAdmin)
|