From d20b5ccdda4bdb4b18e8c31bb1c52d60e6d820b7 Mon Sep 17 00:00:00 2001 From: bkfox Date: Fri, 22 Jul 2016 13:09:58 +0200 Subject: [PATCH] add timetable --- cms/models.py | 79 +++++++++++++++++++++------ cms/templates/cms/logs_page.html | 2 +- cms/templates/cms/timetable_page.html | 7 +++ 3 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 cms/templates/cms/timetable_page.html diff --git a/cms/models.py b/cms/models.py index 03f373a..d67abdb 100644 --- a/cms/models.py +++ b/cms/models.py @@ -514,7 +514,7 @@ class EventPage(Publication): # -# Indexes +# Lists # class BaseDateList(models.Model): nav_days = models.SmallIntegerField( @@ -530,6 +530,16 @@ class BaseDateList(models.Model): 'of show days equally around the current date') ) + class Meta: + abstract = True + + panels = [ + MultiFieldPanel([ + FieldPanel('nav_days'), + FieldPanel('nav_per_week'), + ], heading=_('Navigation')), + ] + @staticmethod def str_to_date(date): """ @@ -590,9 +600,6 @@ class BaseDateList(models.Model): } } - class Meta: - abstract = True - class ListPage(Page): """ @@ -711,6 +718,8 @@ class LogsPage(BaseDateList,Page): '0 means no limit') ) + class Meta: + verbose_name = _('Logs Page') content_panels = [ FieldPanel('title'), @@ -718,8 +727,7 @@ class LogsPage(BaseDateList,Page): FieldPanel('station'), FieldPanel('max_days'), ], heading=_('Configuration')), - ] - + ] + BaseDateList.panels def as_item(cl, log): """ @@ -740,6 +748,20 @@ class LogsPage(BaseDateList,Page): ) def get_queryset(self, request, context): + logs = [] + for date in context['nav_dates']['dates']: + items = self.station.get_on_air(date) + items = [ self.as_item(item) for item in items ] + logs.append((date, items)) + return logs + + def get_context(self, request, *args, **kwargs): + """ + note: context is updated using self.get_date_context + """ + context = super().get_context(request, *args, **kwargs) + + # date navigation if 'date' in request.GET: date = request.GET.get('date') date = self.str_to_date(date) @@ -753,20 +775,43 @@ class LogsPage(BaseDateList,Page): date = tz.now().date() context.update(self.get_date_context(date, date_max=tz.now().date())) - r = [] - for date in context['nav_dates']['dates']: - logs = self.station.get_on_air(date) - logs = [ self.as_item(log) for log in logs ] - r.append((date, logs)) - return r - - def get_context(self, request, *args, **kwargs): - context = super().get_context(request, *args, **kwargs) - qs = self.get_queryset(request, context) - context['object_list'] = qs + # queryset + context['object_list'] = self.get_queryset(request, context) return context +class TimetablePage(BaseDateList,Page): + class Meta: + verbose_name = _('Timetable') + + content_panels = Page.content_panels + BaseDateList.panels + + def get_queryset(self, request, context): + diffs = [] + for date in context['nav_dates']['dates']: + items = programs.Diffusion.objects.get_at(date).order_by('start') + items = [ DiffusionPage.as_item(item) for item in items ] + diffs.append((date, items)) + return diffs + + def get_context(self, request, *args, **kwargs): + """ + note: context is updated using self.get_date_context + """ + context = super().get_context(request, *args, **kwargs) + + # date navigation + if 'date' in request.GET: + date = request.GET.get('date') + date = self.str_to_date(date) + else: + date = tz.now().date() + context.update(self.get_date_context(date)) + + # queryset + context['object_list'] = self.get_queryset(request, context) + return context + # # Menus and Sections # diff --git a/cms/templates/cms/logs_page.html b/cms/templates/cms/logs_page.html index 08c4a3d..2eac152 100644 --- a/cms/templates/cms/logs_page.html +++ b/cms/templates/cms/logs_page.html @@ -1,5 +1,5 @@ {% extends "cms/base_site.html" %} -{# generic page to display list of articles #} +{# display logs of what happened on air %} {% block content %} {% include "cms/snippets/date_list.html" %} diff --git a/cms/templates/cms/timetable_page.html b/cms/templates/cms/timetable_page.html new file mode 100644 index 0000000..66adf98 --- /dev/null +++ b/cms/templates/cms/timetable_page.html @@ -0,0 +1,7 @@ +{% extends "cms/base_site.html" %} +{# display a timetable of planified diffusions by days #} + +{% block content %} +{% include "cms/snippets/date_list.html" %} +{% endblock %} +