Mercurial > public > sg101
view gpp/bio/admin.py @ 204:b4305e18d3af
Resolve ticket #74. Add user badges. Some extra credit was done here: also refactored how pending news, links, and downloads are handled.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 01 May 2010 21:53:59 +0000 |
parents | 152d77265da6 |
children | 8bbefaa3e408 |
line wrap: on
line source
""" This file contains the admin definitions for the bio application. """ import datetime from django.contrib import admin import bio.models from comments.models import Comment from forums.tools import delete_user_posts class BadgeOwnerInline(admin.TabularInline): model = bio.models.BadgeOwnership extra = 1 class UserProfileAdmin(admin.ModelAdmin): search_fields = ('user__username', 'user__first_name', 'user__last_name', 'user__email') exclude = ('profile_html', 'signature_html') list_display = ('__unicode__', 'get_status_display', 'status_date') list_filter = ('status', ) date_hierarchy = 'status_date' inlines = (BadgeOwnerInline, ) actions = ( 'mark_active', 'mark_resigned', 'mark_removed', 'mark_suspended', 'mark_spammer', ) def get_status_display(self, obj): return obj.get_status_display() get_status_display.short_description = 'Status' def mark_user_status(self, request, qs, status): """ Common code for the admin actions. Updates the status field in the profiles to 'status'. Updates the status_date. Sets the is_active field to True if the status is STA_ACTIVE and False otherwise. """ now = datetime.datetime.now() for profile in qs: profile.user.is_active = status == bio.models.STA_ACTIVE profile.user.save() profile.status = status profile.status_date = now profile.save() count = qs.count() msg = "1 user" if count == 1 else "%d users" % count self.message_user(request, "%s successfully marked as %s." % (msg, bio.models.USER_STATUS_CHOICES[status][1])) def mark_active(self, request, qs): """ Marks users as active. Updates their profile status to STA_ACTIVE. """ self.mark_user_status(request, qs, bio.models.STA_ACTIVE) mark_active.short_description = "Mark selected users as active" def mark_resigned(self, request, qs): """ Marks users as inactive. Updates their profile status to STA_RESIGNED. """ self.mark_user_status(request, qs, bio.models.STA_RESIGNED) mark_resigned.short_description = "Mark selected users as resigned" def mark_removed(self, request, qs): """ Marks users as inactive. Updates their profile status to STA_REMOVED. """ self.mark_user_status(request, qs, bio.models.STA_REMOVED) mark_removed.short_description = "Mark selected users as removed" def mark_suspended(self, request, qs): """ Marks users as inactive. Updates their profile status to STA_SUSPENDED. """ self.mark_user_status(request, qs, bio.models.STA_SUSPENDED) mark_suspended.short_description = "Mark selected users as suspended" def mark_spammer(self, request, qs): """ Marks users as inactive. Updates their profile status to STA_SPAMMER. Deletes all their comments and forum posts. """ self.mark_user_status(request, qs, bio.models.STA_SPAMMER) for profile in qs: Comment.objects.filter(user=profile.user).delete() delete_user_posts(profile.user) mark_spammer.short_description = "Mark selected users as spammers" class UserProfileFlagAdmin(admin.ModelAdmin): list_display = ('__unicode__', 'flag_date', 'get_profile_url') class BadgeAdmin(admin.ModelAdmin): list_display = ('name', 'html', 'order', 'numeric_id', 'description') list_editable = ('order', 'numeric_id') admin.site.register(bio.models.UserProfile, UserProfileAdmin) admin.site.register(bio.models.UserProfileFlag, UserProfileFlagAdmin) admin.site.register(bio.models.Badge, BadgeAdmin)