diff --git a/gnuviechadmin/managemails/admin.py b/gnuviechadmin/managemails/admin.py index f8d6f44..7034262 100644 --- a/gnuviechadmin/managemails/admin.py +++ b/gnuviechadmin/managemails/admin.py @@ -5,9 +5,11 @@ from django.forms.util import flatatt from django.utils.translation import ugettext as _ from .models import ( + MailAddress, + MailAddressForward, + MailAddressMailbox, MailDomain, Mailbox, - MailAddress ) PASSWORD_MISMATCH_ERROR = _("Passwords don't match") @@ -89,7 +91,18 @@ class MailboxChangeForm(forms.ModelForm): return self.initial['password'] -class MailboxAdmin(admin.ModelAdmin): +class ActivationChangeMixin(object): + def activate(self, request, queryset): + queryset.update(active=True) + + def deactivate(self, request, queryset): + queryset.update(active=False) + + activate.short_description = _('Activate') + deactivate.short_description = _('Deactivate') + + +class MailboxAdmin(ActivationChangeMixin, admin.ModelAdmin): """ Custom admin page for mailboxes. @@ -97,6 +110,8 @@ class MailboxAdmin(admin.ModelAdmin): form = MailboxChangeForm add_form = MailboxCreationForm + actions = ['activate', 'deactivate'] + list_display = ('username', 'active') list_filter = ('active',) fieldsets = ( @@ -134,6 +149,23 @@ class MailboxAdmin(admin.ModelAdmin): return super(MailboxAdmin, self).get_form(request, obj, **defaults) +class MailAddressMailboxInline(admin.TabularInline): + model = MailAddressMailbox + + +class MailAddressForwardInline(admin.TabularInline): + model = MailAddressForward + + +class MailAddressAdmin(ActivationChangeMixin, admin.ModelAdmin): + actions = ['activate', 'deactivate'] + + list_display = ('__str__', 'active') + list_filter = ('active',) + + inlines = [MailAddressMailboxInline, MailAddressForwardInline] + + admin.site.register(MailDomain) admin.site.register(Mailbox, MailboxAdmin) -admin.site.register(MailAddress) +admin.site.register(MailAddress, MailAddressAdmin) diff --git a/gnuviechadmin/managemails/models.py b/gnuviechadmin/managemails/models.py index 529afcc..72c6c81 100644 --- a/gnuviechadmin/managemails/models.py +++ b/gnuviechadmin/managemails/models.py @@ -16,13 +16,24 @@ class MailDomain(models.Model): return self.domain -class Mailbox(models.Model): +class ActivateAbleMixin(models.Model): + """ + Mixin for model classes that can be active or inactive. + + """ + active = models.BooleanField(default=True) + + class Meta: + abstract = True + + +@python_2_unicode_compatible +class Mailbox(ActivateAbleMixin, models.Model): username = models.CharField(max_length=128, unique=True) password = models.CharField(max_length=255) home = models.CharField(max_length=255) uid = models.PositiveSmallIntegerField() gid = models.PositiveSmallIntegerField() - active = models.BooleanField(default=True) class Meta: verbose_name = _('Mailbox') @@ -31,12 +42,14 @@ class Mailbox(models.Model): def set_password(self, password): self.password = sha512_crypt.encrypt(password) + def __str__(self): + return self.username + @python_2_unicode_compatible -class MailAddress(models.Model): +class MailAddress(ActivateAbleMixin, models.Model): localpart = models.CharField(max_length=128) domain = models.ForeignKey(MailDomain) - active = models.BooleanField(default=True) class Meta: unique_together = ('localpart', 'domain')