gremmie@1: """ gremmie@1: This file contains the admin definitions for the bio application. gremmie@1: """ bgneal@147: import datetime gremmie@1: gremmie@1: from django.contrib import admin gremmie@1: from bio.models import UserProfile bgneal@138: from bio.models import UserProfileFlag bgneal@147: import bio.models bgneal@147: from comments.models import Comment bgneal@147: from forums.tools import delete_user_posts bgneal@147: gremmie@1: gremmie@1: class UserProfileAdmin(admin.ModelAdmin): bgneal@138: search_fields = ('user__username', 'user__first_name', 'user__last_name', bgneal@138: 'user__email') gremmie@1: exclude = ('profile_html', 'signature_html') bgneal@147: list_display = ('__unicode__', 'get_status_display', 'status_date') bgneal@147: list_filter = ('status', ) bgneal@147: date_hierarchy = 'status_date' bgneal@147: actions = ( bgneal@147: 'mark_active', bgneal@147: 'mark_resigned', bgneal@147: 'mark_removed', bgneal@147: 'mark_suspended', bgneal@147: 'mark_spammer', bgneal@147: ) bgneal@147: bgneal@147: def get_status_display(self, obj): bgneal@147: return obj.get_status_display() bgneal@147: get_status_display.short_description = 'Status' bgneal@147: bgneal@147: def mark_user_status(self, request, qs, status): bgneal@147: """ bgneal@147: Common code for the admin actions. Updates the status field in the bgneal@147: profiles to 'status'. Updates the status_date. Sets the is_active bgneal@147: field to True if the status is STA_ACTIVE and False otherwise. bgneal@147: """ bgneal@147: now = datetime.datetime.now() bgneal@147: for profile in qs: bgneal@147: profile.user.is_active = status == bio.models.STA_ACTIVE bgneal@147: profile.user.save() bgneal@147: profile.status = status bgneal@147: profile.status_date = now bgneal@147: profile.save() bgneal@147: bgneal@147: count = qs.count() bgneal@147: msg = "1 user" if count == 1 else "%d users" % count bgneal@147: self.message_user(request, "%s successfully marked as %s." % (msg, bgneal@147: bio.models.USER_STATUS_CHOICES[status][1])) bgneal@147: bgneal@147: def mark_active(self, request, qs): bgneal@147: """ bgneal@147: Marks users as active. Updates their profile status to STA_ACTIVE. bgneal@147: """ bgneal@147: self.mark_user_status(request, qs, bio.models.STA_ACTIVE) bgneal@147: mark_active.short_description = "Mark selected users as active" bgneal@147: bgneal@147: def mark_resigned(self, request, qs): bgneal@147: """ bgneal@147: Marks users as inactive. Updates their profile status to STA_RESIGNED. bgneal@147: """ bgneal@147: self.mark_user_status(request, qs, bio.models.STA_RESIGNED) bgneal@147: mark_resigned.short_description = "Mark selected users as resigned" bgneal@147: bgneal@147: def mark_removed(self, request, qs): bgneal@147: """ bgneal@147: Marks users as inactive. Updates their profile status to STA_REMOVED. bgneal@147: """ bgneal@147: self.mark_user_status(request, qs, bio.models.STA_REMOVED) bgneal@147: mark_removed.short_description = "Mark selected users as removed" bgneal@147: bgneal@147: def mark_suspended(self, request, qs): bgneal@147: """ bgneal@147: Marks users as inactive. Updates their profile status to STA_SUSPENDED. bgneal@147: """ bgneal@147: self.mark_user_status(request, qs, bio.models.STA_SUSPENDED) bgneal@147: mark_suspended.short_description = "Mark selected users as suspended" bgneal@147: bgneal@147: def mark_spammer(self, request, qs): bgneal@147: """ bgneal@147: Marks users as inactive. Updates their profile status to STA_SPAMMER. bgneal@147: Deletes all their comments and forum posts. bgneal@147: """ bgneal@147: self.mark_user_status(request, qs, bio.models.STA_SPAMMER) bgneal@147: for profile in qs: bgneal@147: Comment.objects.filter(user=profile.user).delete() bgneal@147: delete_user_posts(profile.user) bgneal@147: mark_spammer.short_description = "Mark selected users as spammers" gremmie@1: bgneal@138: bgneal@138: class UserProfileFlagAdmin(admin.ModelAdmin): bgneal@138: list_display = ('__unicode__', 'flag_date', 'get_profile_url') bgneal@138: bgneal@138: gremmie@1: admin.site.register(UserProfile, UserProfileAdmin) bgneal@138: admin.site.register(UserProfileFlag, UserProfileFlagAdmin)