diff forums/admin.py @ 581:ee87ea74d46b

For Django 1.4, rearranged project structure for new manage.py.
author Brian Neal <bgneal@gmail.com>
date Sat, 05 May 2012 17:10:48 -0500
parents gpp/forums/admin.py@98b373ca09f3
children 3e1905e523be
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/forums/admin.py	Sat May 05 17:10:48 2012 -0500
@@ -0,0 +1,109 @@
+"""
+This file contains the admin definitions for the forums application.
+"""
+from django.contrib import admin
+
+from forums.models import Category
+from forums.models import Forum
+from forums.models import Topic
+from forums.models import Post
+from forums.models import FlaggedPost
+from forums.models import ForumLastVisit
+from forums.models import TopicLastVisit
+from forums.signals import (notify_new_topic, notify_updated_topic,
+        notify_new_post, notify_updated_post)
+
+import bio.badges
+
+
+class CategoryAdmin(admin.ModelAdmin):
+    list_display = ('name', 'position', )
+    list_editable = ('position', )
+    prepopulated_fields = { 'slug': ('name', ) }
+    save_on_top = True
+
+
+class ForumAdmin(admin.ModelAdmin):
+    list_display = ('name', 'category', 'position', 'topic_count', 'post_count')
+    list_editable = ('position', )
+    prepopulated_fields = { 'slug': ('name', ) }
+    raw_id_fields = ('last_post', )
+    ordering = ('category', )
+    save_on_top = True
+
+
+class TopicAdmin(admin.ModelAdmin):
+    list_display = ('name', 'forum', 'creation_date', 'update_date', 'user', 'sticky', 'locked',
+            'post_count')
+    raw_id_fields = ('user', 'last_post', 'subscribers', 'bookmarkers')
+    search_fields = ('name', )
+    date_hierarchy = 'creation_date'
+    list_filter = ('creation_date', 'update_date', )
+    save_on_top = True
+
+    # override save_model() to update the search index 
+    def save_model(self, request, obj, form, change):
+        obj.save()
+
+        if change:
+            notify_updated_topic(obj)
+        else:
+            notify_new_topic(obj)
+
+
+class PostAdmin(admin.ModelAdmin):
+    list_display = ('user', 'creation_date', 'update_date', 'user_ip', 'summary')
+    raw_id_fields = ('topic', 'user', )
+    exclude = ('html', )
+    search_fields = ('body', )
+    date_hierarchy = 'creation_date'
+    list_filter = ('creation_date', 'update_date', )
+    ordering = ('-creation_date', )
+    save_on_top = True
+
+    def queryset(self, request):
+        return Post.objects.select_related('user')
+
+    # override save_model() to update the search index 
+    def save_model(self, request, obj, form, change):
+        obj.save()
+
+        if change:
+            notify_updated_post(obj)
+        else:
+            notify_new_post(obj)
+
+
+class FlaggedPostAdmin(admin.ModelAdmin):
+    list_display = ['__unicode__', 'flag_date', 'get_post_url']
+    actions = ['accept_flags']
+    raw_id_fields = ['post', 'user', ]
+
+    def accept_flags(self, request, qs):
+        """This admin action awards a security pin to the user who reported
+        the post and then deletes the flagged post object.
+        """
+        for flag in qs:
+            bio.badges.award_badge(bio.badges.SECURITY_PIN, flag.user)
+            flag.delete()
+
+    accept_flags.short_description = "Accept selected flagged posts"
+
+
+class ForumLastVisitAdmin(admin.ModelAdmin):
+    raw_id_fields = ('user', 'forum')
+    list_display = ('user', 'forum', 'begin_date', 'end_date')
+
+
+class TopicLastVisitAdmin(admin.ModelAdmin):
+    raw_id_fields = ('user', 'topic')
+    list_display = ('user', 'topic', 'last_visit')
+
+
+admin.site.register(Category, CategoryAdmin)
+admin.site.register(Forum, ForumAdmin)
+admin.site.register(Topic, TopicAdmin)
+admin.site.register(Post, PostAdmin)
+admin.site.register(FlaggedPost, FlaggedPostAdmin)
+admin.site.register(ForumLastVisit, ForumLastVisitAdmin)
+admin.site.register(TopicLastVisit, TopicLastVisitAdmin)