diff --git a/aircox/admin/episode.py b/aircox/admin/episode.py index 2f459e0..526768e 100644 --- a/aircox/admin/episode.py +++ b/aircox/admin/episode.py @@ -1,3 +1,5 @@ +from copy import copy + from django import forms from django.contrib import admin from django.utils.translation import gettext as _ @@ -5,7 +7,7 @@ from django.utils.translation import gettext as _ from ..models import Episode, Diffusion from .page import PageAdmin -from .sound import SoundInline, TracksInline +from .sound import SoundInline, TrackInline class DiffusionBaseAdmin: @@ -14,7 +16,7 @@ class DiffusionBaseAdmin: def get_readonly_fields(self, request, obj=None): fields = super().get_readonly_fields(request, obj) if not request.user.has_perm('aircox_program.scheduling'): - fields += ('program', 'start', 'end') + fields = fields + ('program', 'start', 'end') return [field for field in fields if field in self.fields] @@ -59,6 +61,6 @@ class EpisodeAdmin(PageAdmin): search_fields = PageAdmin.search_fields + ('parent__title',) # readonly_fields = ('parent',) - inlines = [TracksInline, SoundInline, DiffusionInline] + inlines = [TrackInline, SoundInline, DiffusionInline] diff --git a/aircox/admin/page.py b/aircox/admin/page.py index c605ee4..5335603 100644 --- a/aircox/admin/page.py +++ b/aircox/admin/page.py @@ -33,13 +33,13 @@ class BasePageAdmin(admin.ModelAdmin): prepopulated_filters = ('parent',) search_fields = ('title',) + fieldsets = [ ('', { 'fields': ['title', 'slug', 'cover', 'content'], }), (_('Publication Settings'), { 'fields': ['status', 'parent'], - # 'classes': ('collapse',), }), ] @@ -55,12 +55,11 @@ class BasePageAdmin(admin.ModelAdmin): data['parent'] = filters.get('parent', None) return data - def get_common_context(self, query, extra_context=None): + def _get_common_context(self, query, extra_context=None): extra_context = extra_context or {} parent = query.get('parent', None) extra_context['parent'] = None if parent is None else \ Page.objects.get_subclass(id=parent) - return extra_context def render_change_form(self, request, context, *args, **kwargs): @@ -70,11 +69,11 @@ class BasePageAdmin(admin.ModelAdmin): def add_view(self, request, form_url='', extra_context=None): filters = QueryDict(request.GET.get('_changelist_filters', '')) - extra_context = self.get_common_context(filters, extra_context) + extra_context = self._get_common_context(filters, extra_context) return super().add_view(request, form_url, extra_context) def changelist_view(self, request, extra_context=None): - extra_context = self.get_common_context(request.GET, extra_context) + extra_context = self._get_common_context(request.GET, extra_context) return super().changelist_view(request, extra_context) diff --git a/aircox/admin/program.py b/aircox/admin/program.py index e7f1710..057dad3 100644 --- a/aircox/admin/program.py +++ b/aircox/admin/program.py @@ -1,4 +1,4 @@ -from copy import deepcopy +from copy import copy from django.contrib import admin from django.utils.translation import gettext_lazy as _ @@ -28,18 +28,21 @@ class ProgramAdmin(PageAdmin): list_display = PageAdmin.list_display + ('schedule', 'station', 'active') list_filter = PageAdmin.list_filter + ('station', 'active') - fieldsets = deepcopy(PageAdmin.fieldsets) + [ - (_('Program Settings'), { - 'fields': ['active', 'station', 'sync'], - 'classes': ('collapse',), - }) - ] - prepopulated_fields = {'slug': ('title',)} - search_fields = ['title'] + search_fields = ('title',) inlines = [ScheduleInline, StreamInline] + def get_fieldsets(self, request, obj=None): + fields = super().get_fieldsets(request, obj) + if request.user.has_perm('aircox.program.scheduling'): + fields = fields + [ + (_('Program Settings'), { + 'fields': ['active', 'station', 'sync'], + }) + ] + return fields + @admin.register(Schedule) class ScheduleAdmin(admin.ModelAdmin): diff --git a/aircox/admin/sound.py b/aircox/admin/sound.py index 9a03f53..cba8a8e 100644 --- a/aircox/admin/sound.py +++ b/aircox/admin/sound.py @@ -6,15 +6,18 @@ from adminsortable2.admin import SortableInlineAdminMixin from ..models import Sound, Track -class TracksInline(SortableInlineAdminMixin, admin.TabularInline): +class TrackInline(SortableInlineAdminMixin, admin.TabularInline): template = 'admin/aircox/playlist_inline.html' model = Track extra = 0 - fields = ('position', 'artist', 'title', 'info', 'timestamp', 'tags') + fields = ('position', 'artist', 'title', 'info', 'tags') list_display = ['artist', 'title', 'tags', 'related'] list_filter = ['artist', 'title', 'tags'] +class SoundTrackInline(TrackInline): + fields = TrackInline.fields + ('timestamp',) + class SoundInline(admin.TabularInline): model = Sound @@ -44,7 +47,7 @@ class SoundAdmin(admin.ModelAdmin): (None, {'fields': ['is_good_quality']}) ] readonly_fields = ('path', 'duration',) - inlines = [TracksInline] + inlines = [SoundTrackInline] @admin.register(Track) diff --git a/aircox/locale/fr/LC_MESSAGES/django.mo b/aircox/locale/fr/LC_MESSAGES/django.mo index 49c8a73..a2642ef 100644 Binary files a/aircox/locale/fr/LC_MESSAGES/django.mo and b/aircox/locale/fr/LC_MESSAGES/django.mo differ diff --git a/aircox/locale/fr/LC_MESSAGES/django.po b/aircox/locale/fr/LC_MESSAGES/django.po index 50955ca..be0a6bf 100644 --- a/aircox/locale/fr/LC_MESSAGES/django.po +++ b/aircox/locale/fr/LC_MESSAGES/django.po @@ -87,7 +87,7 @@ msgstr "Épisodes" #: models/episode.py:140 models/log.py:186 msgid "on air" -msgstr "a l'antenne" +msgstr "à l'antenne" #: models/episode.py:141 msgid "not confirmed" @@ -312,8 +312,7 @@ msgstr "synchroniser" #: models/program.py:63 msgid "update later diffusions according to schedule changes" -msgstr "" -"mettre à jour les diffusions suivantes selon les changements de l'horaire" +msgstr "met à jour les diffusions à venir lorsque l'horaire change" #: models/program.py:126 templates/admin/base.html:59 msgid "Programs" diff --git a/aircox/urls.py b/aircox/urls.py index c03997d..a538487 100755 --- a/aircox/urls.py +++ b/aircox/urls.py @@ -38,7 +38,7 @@ urls = [ # path('', views.PageDetailView.as_view(model=models.Article), # name='home'), path(_('articles/'), - views.ArticleListView.as_view(model=models.Article, is_static=False), + views.ArticleListView.as_view(model=models.Article), name='article-list'), path(_('articles//'), views.ArticleDetailView.as_view(), diff --git a/aircox/views/article.py b/aircox/views/article.py index 65d1ace..a2161a0 100644 --- a/aircox/views/article.py +++ b/aircox/views/article.py @@ -19,11 +19,7 @@ class ArticleDetailView(PageDetailView): class ArticleListView(PageListView): model = Article has_headline = True - is_static = False parent_model = Program attach_to_value = StaticPage.ATTACH_TO_ARTICLES - def get_queryset(self): - return super().get_queryset().filter(is_static=self.is_static) -