1 # -*- coding: utf-8 -*-
2 # This file is part of PrawoKultury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 from django.conf import settings
6 from django.contrib import admin
7 from django.utils.translation import ugettext_lazy as _
8 from migdal.models import Entry, Attachment
9 from migdal import app_settings
10 from fnpdjango.utils.models import filtered_model
11 from fnpdjango.utils.models.translation import translated_fields
14 class AttachmentInline(admin.TabularInline):
16 readonly_fields = ['url']
19 def filtered_entry_admin(typ):
20 class EntryAdmin(admin.ModelAdmin):
21 def queryset(self, request):
22 return self.model.objects.filter(type=typ.db)
24 def has_add_permission(self, request):
25 return request.user.has_perm('migdal.add_entry')
27 def has_change_permission(self, request, obj=None):
28 return request.user.has_perm('migdal.change_entry')
30 def has_delete_permission(self, request, obj=None):
31 return request.user.has_perm('migdal.delete_entry')
33 def formfield_for_dbfield(self, db_field, **kwargs):
34 field = super(EntryAdmin, self).formfield_for_dbfield(db_field, **kwargs)
35 if db_field.name == 'categories':
36 field.widget.attrs['style'] = 'height: 10em'
39 date_hierarchy = 'date'
40 readonly_fields = ('date', 'changed_at', 'first_published_at') + \
41 translated_fields(('published_at',))
42 _promo_if_necessary = ('promo',) if typ.promotable else ()
46 'fields': _promo_if_necessary + (
47 'in_stream', 'author', 'author_email', 'canonical_url', 'image',
48 'date', 'first_published_at', 'changed_at')
52 ('published_%s' % lc),
53 'published_at_%s' % lc,
59 for lc, ln in app_settings.OBLIGATORY_LANGUAGES
62 ('needed_%s' % lc, 'published_%s' % lc),
63 'published_at_%s' % lc,
69 for lc, ln in app_settings.OPTIONAL_LANGUAGES
74 (_('Categories'), {'fields': ('categories',)}),
76 prepopulated_fields = dict([
77 ("slug_%s" % lang_code, ("title_%s" % lang_code,))
78 for lang_code, lang_name in settings.LANGUAGES
81 list_display = translated_fields(('title',), app_settings.OBLIGATORY_LANGUAGES) + \
82 ('date', 'author') + \
83 _promo_if_necessary + \
84 ('in_stream', 'first_published_at',) + \
85 translated_fields(('published_at',)) + \
86 translated_fields(('needed',), app_settings.OPTIONAL_LANGUAGES)
87 list_filter = _promo_if_necessary + \
88 translated_fields(('published',)) + \
89 translated_fields(('needed',), app_settings.OPTIONAL_LANGUAGES)
90 inlines = (AttachmentInline,)
91 search_fields = ('title_pl', 'title_en')
95 for typ in app_settings.TYPES:
96 newmodel = filtered_model("Entry_%s" % typ.db, Entry, 'type', typ.db, typ.slug)
97 admin.site.register(newmodel, filtered_entry_admin(typ))
100 if app_settings.TAXONOMIES:
101 from migdal.models import Category
103 class CategoryAdmin(admin.ModelAdmin):
104 list_display = translated_fields(('title', 'slug')) + ('taxonomy',)
105 prepopulated_fields = dict([
106 ("slug_%s" % lang_code, ("title_%s" % lang_code,))
107 for lang_code, lang_name in settings.LANGUAGES
109 admin.site.register(Category, CategoryAdmin)