[Core] remove unused classes
[mygpo.git] / mygpo / podcasts / admin.py
blobc284fcfdc4adaeb91180d0bd83703430d36ebcd8
1 from __future__ import unicode_literals
3 from django.utils.html import format_html
4 from django.utils.translation import ugettext as _
5 from django.contrib import admin
6 from django.contrib.contenttypes.admin import GenericTabularInline
7 from mygpo.podcasts.models import (Podcast, Episode, URL, Slug, Tag,
8 MergedUUID, PodcastGroup)
9 from mygpo.utils import edit_link
12 class AdminLinkMixin(object):
13 """ Adds an Admin link """
15 def admin_link(self, instance):
16 """ Link to the admin page """
18 if not instance.pk:
19 return ''
21 url = edit_link(instance)
22 return format_html('<a href="{}">{}</a>', url, _('Edit'))
24 readonly_fields = ('admin_link',)
27 class AdminLinkInline(AdminLinkMixin, admin.TabularInline):
28 """ TabularInline that adds an Admin link for the inlined model """
31 class GenericAdminLinkInline(AdminLinkMixin, GenericTabularInline):
32 """ TabularInline that adds an Admin link for the inlined model """
35 @admin.register(URL)
36 class URLAdmin(admin.ModelAdmin):
37 model = URL
38 list_display = ('url', 'content_type', 'object_id')
39 list_filter = ('content_type', )
42 class URLInline(GenericAdminLinkInline):
43 model = URL
44 fields = ('order', 'url', 'admin_link', )
47 class SlugInline(GenericTabularInline):
48 model = Slug
51 class TagInline(GenericTabularInline):
52 model = Tag
55 class MergedUUIDInline(GenericTabularInline):
56 model = MergedUUID
59 class PodcastInline(AdminLinkInline):
60 model = Podcast
62 fields = ('id', 'title', 'group_member_name', 'admin_link')
64 readonly_fields = ('id', ) + AdminLinkInline.readonly_fields
66 can_delete = False
68 def has_add_permission(self, request):
69 """ Podcasts must be created and then added to the group """
70 return False
73 @admin.register(Podcast)
74 class PodcastAdmin(admin.ModelAdmin):
75 """ Admin page for podcasts """
77 # configuration for the list view
78 list_display = ('title', 'main_url', )
80 # fetch the podcast's URL for the fields in list_display
81 list_select_related = ('urls', )
83 list_filter = ('language', )
84 search_fields = ('title', 'twitter', '^urls__url', )
86 # configuration for the create / edit view
87 fieldsets = (
88 (None, {
89 'fields': ('id', 'title', 'subtitle', 'description', 'link',
90 'language')
91 }),
92 ('Additional information', {
93 'fields': ('created', 'license', 'flattr_url', 'author', 'twitter',
94 'related_podcasts', )
95 }),
96 ('Podcast Group', {
97 'fields': ('group', 'group_member_name',)
98 }),
99 ('Episodes', {
100 'fields': ('common_episode_title', 'latest_episode_timestamp',
101 'content_types', )
103 ('Feed updates', {
104 'fields': ('outdated', 'new_location', 'last_update', )
106 ('Admin', {
107 'fields': ('restrictions', 'hub', )
111 inlines = [
112 URLInline,
113 SlugInline,
114 TagInline,
115 MergedUUIDInline,
118 raw_id_fields = ('related_podcasts', )
120 readonly_fields = ('id', 'created', 'last_update', )
122 def main_url(self, podcast):
123 url = podcast.urls.first()
124 if url is None:
125 return ''
127 return url.url
130 @admin.register(Episode)
131 class EpisodeAdmin(admin.ModelAdmin):
132 """ Admin page for episodes """
134 # configuration for the list view
135 list_display = ('title', 'podcast_title', 'main_url', )
137 # fetch the episode's podcast and URL for the fields in list_display
138 list_select_related = ('podcast', 'urls', )
140 list_filter = ('language', )
141 search_fields = ('title', '^urls__url')
143 # configuration for the create / edit view
144 fieldsets = (
145 (None, {
146 'fields': ('id', 'title', 'subtitle', 'description', 'link',
147 'language', 'guid', 'released', 'podcast', )
149 ('Additional information', {
150 'fields': ('created', 'license', 'flattr_url', 'author', 'content',
151 'listeners', )
153 ('Media file', {
154 'fields': ('duration', 'filesize', 'content_types', 'mimetypes', )
156 ('Feed updates', {
157 'fields': ('outdated', 'last_update', )
161 inlines = [
162 URLInline,
163 SlugInline,
164 MergedUUIDInline,
167 raw_id_fields = ('podcast', )
169 readonly_fields = ('id', 'created', 'last_update', )
171 def podcast_title(self, episode):
172 return episode.podcast.title
174 def main_url(self, episode):
175 return episode.urls.first().url
178 @admin.register(PodcastGroup)
179 class PodcastGroupAdmin(admin.ModelAdmin):
180 """ Admin page for podcast groups """
182 # configuration for the list view
183 list_display = ('title', )
185 search_fields = ('title', )
187 inlines = [
188 PodcastInline,
192 @admin.register(Tag)
193 class TagAdmin(admin.ModelAdmin):
194 """ Admin page for tags """
196 list_display = ('tag', 'content_object', 'source', 'user', )
198 list_select_related = ('user', )
200 list_filter = ('source', )