gremmie@1: """
gremmie@1: This file contains the automatic admin site definitions for the comment models.
gremmie@1: """
gremmie@1: from django.contrib import admin
gremmie@1: from comments.models import Comment
gremmie@1: from comments.models import CommentFlag
bgneal@671: 
bgneal@671: import ftfy
bgneal@671: 
bgneal@204: import bio.badges
bgneal@204: 
gremmie@1: 
bgneal@671: 
gremmie@1: class CommentAdmin(admin.ModelAdmin):
bgneal@671:     fieldsets = [
bgneal@671:         (None, {'fields': ['content_type', 'object_id']}),
bgneal@671:         ('Content', {'fields': ['user', 'comment']}),
bgneal@671:         ('Metadata', {'fields': ['ip_address', 'is_public', 'is_removed']}),
bgneal@671:     ]
bgneal@671:     list_display = ['__unicode__', 'content_type', 'object_id', 'ip_address',
bgneal@671:             'creation_date', 'is_public', 'not_removed']
bgneal@671:     list_filter = ['creation_date', 'is_public', 'is_removed']
gremmie@1:     date_hierarchy = 'creation_date'
bgneal@671:     ordering = ['-creation_date']
bgneal@671:     search_fields = ['comment', 'user__username', 'ip_address']
bgneal@671:     raw_id_fields = ['user', 'content_type']
bgneal@671:     actions = ['fix_text']
bgneal@671: 
bgneal@671:     def fix_text(self, request, qs):
bgneal@671:         for comment in qs:
bgneal@671:             comment.comment = ftfy.fix_text(comment.comment)
bgneal@671:             comment.save()
bgneal@671: 
bgneal@671:         count = len(qs)
bgneal@671:         msg = "1 comment" if count == 1 else "%d comments" % count
bgneal@671:         self.message_user(request, "Text fixed on {}".format(msg))
bgneal@671: 
bgneal@671:     fix_text.short_description = "Fix text on selected comments"
gremmie@1: 
bgneal@204: 
gremmie@1: class CommentFlagAdmin(admin.ModelAdmin):
bgneal@13:     list_display = ('__unicode__', 'flag_date', 'get_comment_url')
bgneal@204:     actions = ('accept_flags', )
bgneal@365:     raw_id_fields = ('user', 'comment')
bgneal@204: 
bgneal@204:     def accept_flags(self, request, qs):
bgneal@204:         """This admin action awards a security pin to the user who reported
bgneal@204:         the comment and then deletes the flagged comment object.
bgneal@204:         """
bgneal@204:         for flag in qs:
bgneal@204:             bio.badges.award_badge(bio.badges.SECURITY_PIN, flag.user)
bgneal@204:             flag.delete()
bgneal@204: 
bgneal@204:     accept_flags.short_description = "Accept selected comment flags"
bgneal@204: 
gremmie@1: 
gremmie@1: admin.site.register(Comment, CommentAdmin)
gremmie@1: admin.site.register(CommentFlag, CommentFlagAdmin)