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)