d8fcd9024ec89ac8b87afb82dce87e6c39d61ba7
[philo.git] / contrib / penfield / admin.py
1 from django.contrib import admin
2 from django import forms
3 from philo.admin import EntityAdmin, AddTagAdmin, COLLAPSE_CLASSES
4 from philo.contrib.penfield.models import BlogEntry, Blog, BlogView, Newsletter, NewsletterArticle, NewsletterIssue, NewsletterView
5
6
7 class DelayedDateForm(forms.ModelForm):
8         date_field = 'date'
9         
10         def __init__(self, *args, **kwargs):
11                 super(DelayedDateForm, self).__init__(*args, **kwargs)
12                 self.fields[self.date_field].required = False
13
14
15 class TitledAdmin(EntityAdmin):
16         prepopulated_fields = {'slug': ('title',)}
17         list_display = ('title', 'slug')
18
19
20 class BlogAdmin(TitledAdmin):
21         pass
22
23
24 class BlogEntryAdmin(TitledAdmin, AddTagAdmin):
25         form = DelayedDateForm
26         filter_horizontal = ['tags']
27         list_filter = ['author', 'blog']
28         date_hierarchy = 'date'
29         search_fields = ('content',)
30         list_display = ['title', 'date', 'author']
31         raw_id_fields = ('author',)
32         fieldsets = (
33                 (None, {
34                         'fields': ('title', 'author', 'blog')
35                 }),
36                 ('Content', {
37                         'fields': ('content', 'excerpt', 'tags'),
38                 }),
39                 ('Advanced', {
40                         'fields': ('slug', 'date'),
41                         'classes': COLLAPSE_CLASSES
42                 })
43         )
44
45
46 class BlogViewAdmin(EntityAdmin):
47         fieldsets = (
48                 (None, {
49                         'fields': ('blog',)
50                 }),
51                 ('Pages', {
52                         'fields': ('index_page', 'entry_page', 'tag_page')
53                 }),
54                 ('Archive Pages', {
55                         'fields': ('entry_archive_page', 'tag_archive_page')
56                 }),
57                 ('Permalinks', {
58                         'fields': ('entry_permalink_style', 'entry_permalink_base', 'tag_permalink_base'),
59                         'classes': COLLAPSE_CLASSES
60                 }),
61                 ('Feeds', {
62                         'fields': ('feed_suffix', 'feeds_enabled'),
63                         'classes': COLLAPSE_CLASSES
64                 })
65         )
66         raw_id_fields = ('index_page', 'entry_page', 'tag_page', 'entry_archive_page', 'tag_archive_page',)
67
68
69 class NewsletterAdmin(TitledAdmin):
70         pass
71
72
73 class NewsletterArticleAdmin(TitledAdmin, AddTagAdmin):
74         form = DelayedDateForm
75         filter_horizontal = ('tags', 'authors')
76         list_filter = ('newsletter',)
77         date_hierarchy = 'date'
78         search_fields = ('title', 'authors__name',)
79         list_display = ['title', 'date', 'author_names']
80         fieldsets = (
81                 (None, {
82                         'fields': ('title', 'authors', 'newsletter')
83                 }),
84                 ('Content', {
85                         'fields': ('full_text', 'lede', 'tags')
86                 }),
87                 ('Advanced', {
88                         'fields': ('slug', 'date'),
89                         'classes': COLLAPSE_CLASSES
90                 })
91         )
92         
93         def author_names(self, obj):
94                 return ', '.join([author.get_full_name() for author in obj.authors.all()])
95         author_names.short_description = "Authors"
96
97
98 class NewsletterIssueAdmin(TitledAdmin):
99         filter_horizontal = TitledAdmin.filter_horizontal + ('articles',)
100
101
102 class NewsletterViewAdmin(EntityAdmin):
103         fieldsets = (
104                 (None, {
105                         'fields': ('newsletter',)
106                 }),
107                 ('Pages', {
108                         'fields': ('index_page', 'article_page', 'issue_page')
109                 }),
110                 ('Archive Pages', {
111                         'fields': ('article_archive_page', 'issue_archive_page')
112                 }),
113                 ('Permalinks', {
114                         'fields': ('article_permalink_style', 'article_permalink_base', 'issue_permalink_base'),
115                         'classes': COLLAPSE_CLASSES
116                 }),
117                 ('Feeds', {
118                         'fields': ('feed_suffix', 'feeds_enabled'),
119                         'classes': COLLAPSE_CLASSES
120                 })
121         )
122         raw_id_fields = ('index_page', 'article_page', 'issue_page', 'article_archive_page', 'issue_archive_page',)
123
124
125 admin.site.register(Blog, BlogAdmin)
126 admin.site.register(BlogEntry, BlogEntryAdmin)
127 admin.site.register(BlogView, BlogViewAdmin)
128 admin.site.register(Newsletter, NewsletterAdmin)
129 admin.site.register(NewsletterArticle, NewsletterArticleAdmin)
130 admin.site.register(NewsletterIssue, NewsletterIssueAdmin)
131 admin.site.register(NewsletterView, NewsletterViewAdmin)