diff messages/admin.py @ 810:4a4fa174a0ec

Private message refactor: adding ability to report PM's. See also Bitbucket issue #57.
author Brian Neal <bgneal@gmail.com>
date Sat, 06 Sep 2014 16:58:08 -0500
parents ee87ea74d46b
children
line wrap: on
line diff
--- a/messages/admin.py	Mon Sep 01 17:05:30 2014 -0500
+++ b/messages/admin.py	Sat Sep 06 16:58:08 2014 -0500
@@ -2,17 +2,53 @@
 This file contains the automatic admin site definitions for the Message models.
 """
 from django.contrib import admin
+from django.core.urlresolvers import reverse
 
-from messages.models import Message
-from messages.models import Options
+from messages.models import Flag, Message, Options
+import bio.badges
 
 
 class MessageAdmin(admin.ModelAdmin):
-    list_display = ('sender', 'receiver', 'send_date', 'subject')
-    raw_id_fields = ('sender', 'receiver')
-    exclude = ('html', )
+    list_display = ['sender', 'receiver', 'send_date', 'subject']
+    raw_id_fields = ['sender', 'receiver']
+    exclude = ['html']
     date_hierarchy = 'send_date'
-    list_display_links = ('subject', )
+    list_display_links = ['subject']
 
+
+class FlagAdmin(admin.ModelAdmin):
+    list_display = ['__unicode__', 'flag_date', 'message_link']
+    date_hierarchy = 'flag_date'
+    list_select_related = True
+    readonly_fields = ['message', 'flag_date', 'comments', 'message_text']
+    actions = ['accept_flags']
+
+    def message_link(self, obj):
+        return '<a href="{}">Message</a>'.format(
+                reverse('admin:messages_message_change', args=[obj.message.id]))
+    message_link.allow_tags = True
+    message_link.short_description = 'Message'
+
+    def message_text(self, obj):
+        return obj.message.html
+    message_text.allow_tags = True
+    message_text.short_description = 'Message text'
+
+    def accept_flags(self, request, qs):
+        """This admin action awards a security pin to the user who reported the
+        message and then deletes the flag object.
+
+        """
+        count = qs.count()
+        for flag in qs:
+            bio.badges.award_badge(bio.badges.SECURITY_PIN, flag.message.receiver)
+            flag.delete()
+
+        self.message_user(request,
+            "%s flag(s) acknowledged. You may want to mark users as spammers now." % count)
+
+    accept_flags.short_description = "Accept selected flags"
+
+admin.site.register(Flag, FlagAdmin)
 admin.site.register(Message, MessageAdmin)
 admin.site.register(Options)