annotate gpp/forums/admin.py @ 265:1ba2c6bf6eb7

Closing #98. Animated GIFs were losing their transparency and animated properties when saved as avatars. Reworked the avatar save process to only run the avatar through PIL if it is too big. This preserves the original uploaded file if it is within the desired size settings. This may still mangle big animated gifs. If this becomes a problem, then maybe look into calling the PIL Image.resize() method directly. Moved the PIL image specific functions from bio.forms to a new module: core.image for better reusability in the future.
author Brian Neal <bgneal@gmail.com>
date Fri, 24 Sep 2010 02:12:09 +0000
parents a46788862737
children 7e19180b128d
rev   line source
bgneal@75 1 """
bgneal@75 2 This file contains the admin definitions for the forums application.
bgneal@75 3 """
bgneal@75 4 from django.contrib import admin
bgneal@75 5
bgneal@75 6 from forums.models import Category
bgneal@75 7 from forums.models import Forum
bgneal@75 8 from forums.models import Topic
bgneal@75 9 from forums.models import Post
bgneal@98 10 from forums.models import FlaggedPost
bgneal@113 11 from forums.models import TopicLastVisit
bgneal@204 12 import bio.badges
bgneal@75 13
bgneal@75 14
bgneal@75 15 class CategoryAdmin(admin.ModelAdmin):
bgneal@75 16 list_display = ('name', 'position', )
bgneal@206 17 list_editable = ('position', )
bgneal@81 18 prepopulated_fields = { 'slug': ('name', ) }
bgneal@81 19 save_on_top = True
bgneal@75 20
bgneal@75 21
bgneal@75 22 class ForumAdmin(admin.ModelAdmin):
bgneal@75 23 list_display = ('name', 'category', 'position', 'topic_count', 'post_count')
bgneal@206 24 list_editable = ('position', )
bgneal@75 25 prepopulated_fields = { 'slug': ('name', ) }
bgneal@75 26 raw_id_fields = ('last_post', )
bgneal@206 27 ordering = ('category', )
bgneal@81 28 save_on_top = True
bgneal@81 29
bgneal@75 30
bgneal@75 31 class TopicAdmin(admin.ModelAdmin):
bgneal@102 32 list_display = ('name', 'forum', 'creation_date', 'update_date', 'user', 'sticky', 'locked',
bgneal@75 33 'post_count')
bgneal@232 34 raw_id_fields = ('user', 'last_post', 'subscribers', 'bookmarkers')
bgneal@75 35 search_fields = ('name', )
bgneal@75 36 date_hierarchy = 'creation_date'
bgneal@75 37 list_filter = ('creation_date', 'update_date', )
bgneal@81 38 save_on_top = True
bgneal@75 39
bgneal@75 40
bgneal@75 41 class PostAdmin(admin.ModelAdmin):
bgneal@75 42 list_display = ('topic', 'user', 'creation_date', 'update_date', 'summary')
bgneal@75 43 raw_id_fields = ('topic', 'user', )
bgneal@75 44 exclude = ('html', )
bgneal@75 45 search_fields = ('body', )
bgneal@75 46 date_hierarchy = 'creation_date'
bgneal@75 47 list_filter = ('creation_date', 'update_date', )
bgneal@97 48 ordering = ('-creation_date', )
bgneal@81 49 save_on_top = True
bgneal@75 50
bgneal@75 51
bgneal@98 52 class FlaggedPostAdmin(admin.ModelAdmin):
bgneal@98 53 list_display = ('__unicode__', 'flag_date', 'get_post_url')
bgneal@204 54 actions = ('accept_flags', )
bgneal@204 55
bgneal@204 56 def accept_flags(self, request, qs):
bgneal@204 57 """This admin action awards a security pin to the user who reported
bgneal@204 58 the post and then deletes the flagged post object.
bgneal@204 59 """
bgneal@204 60 for flag in qs:
bgneal@204 61 bio.badges.award_badge(bio.badges.SECURITY_PIN, flag.user)
bgneal@204 62 flag.delete()
bgneal@204 63
bgneal@204 64 accept_flags.short_description = "Accept selected flagged posts"
bgneal@98 65
bgneal@98 66
bgneal@113 67 class TopicLastVisitAdmin(admin.ModelAdmin):
bgneal@113 68 raw_id_fields = ('user', 'topic')
bgneal@113 69 list_display = ('user', 'topic', 'last_visit')
bgneal@113 70
bgneal@113 71
bgneal@75 72 admin.site.register(Category, CategoryAdmin)
bgneal@75 73 admin.site.register(Forum, ForumAdmin)
bgneal@75 74 admin.site.register(Topic, TopicAdmin)
bgneal@75 75 admin.site.register(Post, PostAdmin)
bgneal@98 76 admin.site.register(FlaggedPost, FlaggedPostAdmin)
bgneal@113 77 admin.site.register(TopicLastVisit, TopicLastVisitAdmin)