From 4adacd1f8084e8a5359b7f5c53d2363174aa34e2 Mon Sep 17 00:00:00 2001 From: Christophe Siraut Date: Thu, 19 Sep 2024 14:50:11 +0200 Subject: [PATCH] radiocampus: center selected date in timetables --- .../templates/aircox/timetable_list.html | 14 +----- radiocampus/urls.py | 28 ++++++++--- radiocampus/views.py | 48 ++++++++++++++++++- 3 files changed, 69 insertions(+), 21 deletions(-) diff --git a/radiocampus/templates/aircox/timetable_list.html b/radiocampus/templates/aircox/timetable_list.html index d73b87f..a383c3c 100644 --- a/radiocampus/templates/aircox/timetable_list.html +++ b/radiocampus/templates/aircox/timetable_list.html @@ -12,23 +12,13 @@ {% block breadcrumbs %} -{% if parent and model.list_url_name %} - {% include "./widgets/breadcrumbs.html" with page=parent %} - {{ model|verbose_name:True }} -{% elif page and model.list_url_name %} +{% if page and model.list_url_name %} {{ page.title }} {% if category %} {{ category.title }} {% endif %} -{% else %} - {{ model|verbose_name:True }} - {% if category %} - - {{ category.title }} - - {% endif %} {% endif %} {{ date|date:"l d F Y" }} {% endblock %} @@ -38,7 +28,7 @@ {% with list_class="grid" %}
-
+
{% block list %} {% with object_list=object_list timetable=True %} {% with widget|default:"item" as widget %} diff --git a/radiocampus/urls.py b/radiocampus/urls.py index bab3b3f..816f14f 100755 --- a/radiocampus/urls.py +++ b/radiocampus/urls.py @@ -2,25 +2,39 @@ from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import include, path +from django.utils.translation import gettext_lazy as _ -import aircox.urls +from aircox.urls import urls import aircox_streamer.urls -from radiocampus.views import TimeTableView +from radiocampus.views import HomeTimeTableView, TimeTableView urlpatterns = [ - *aircox.urls.urls, path("streamer/", include((aircox_streamer.urls.urls, "aircox_streamer"), namespace="streamer")), path("admin/", admin.site.urls), path("accounts/", include("django.contrib.auth.urls")), path("filer/", include("filer.urls")), ] -for i, pa in enumerate(urlpatterns): - if "name" in pa.__dict__.keys() and pa.name == "home": - urlpatterns.pop(i) +for url in urls: + if "name" in url.__dict__.keys(): + if url.name == "home" or url.name == "timetable-list": + continue + urlpatterns.append(url) -urlpatterns.append(path("", TimeTableView.as_view(), name="home")) + +urlpatterns.append(path("", HomeTimeTableView.as_view(), name="home")) + +urlpatterns.extend( + [ + path(_("timetable/"), TimeTableView.as_view(), name="timetable-list"), + path( + _("timetable//"), + TimeTableView.as_view(), + name="timetable-list", + ), + ] +) if settings.DEBUG: from debug_toolbar.toolbar import debug_toolbar_urls diff --git a/radiocampus/views.py b/radiocampus/views.py index eab19ea..f86225c 100644 --- a/radiocampus/views.py +++ b/radiocampus/views.py @@ -1,7 +1,51 @@ +import datetime + + +from django.urls import reverse + +from aircox.models import Diffusion, Log, StaticPage from aircox.views.diffusion import TimeTableView as AircoxTimeTableView +from aircox.views.diffusion import BaseDiffusionListView +from aircox.views.mixins import GetDateMixin +from aircox.views.page import attach -__all__ = "TimeTableView" +__all__ = ("HomeTimeTableView", "TimeTableView") -class TimeTableView(AircoxTimeTableView): +class HomeTimeTableView(AircoxTimeTableView): template_name = "aircox/home.html" + + +@attach +class TimeTableView(GetDateMixin, BaseDiffusionListView): + model = Diffusion + redirect_date_url = "timetable-list" + attach_to_value = StaticPage.Target.TIMETABLE + template_name = "aircox/timetable_list.html" + + def get_date(self, param="date"): + date = super().get_date(param) + return date if date is not None else datetime.date.today() + + def get_logs(self, date): + return Log.objects.on_air().date(self.date).filter(track__isnull=False) + + def get_queryset(self): + return super().get_queryset().date(self.date) + + @classmethod + def get_secondary_nav(cls): + date = datetime.date.today() + start = date - datetime.timedelta(days=3) + dates = [start + datetime.timedelta(days=i) for i in range(0, 7)] + return tuple((date.strftime("%A %d"), reverse("timetable-list", kwargs={"date": date})) for date in dates) + + def get_context_data(self, object_list=None, **kwargs): + start = self.date - datetime.timedelta(days=3) + dates = [start + datetime.timedelta(days=i) for i in range(0, 7)] + + if object_list is None: + logs = self.get_logs(self.date) + object_list = Log.merge_diffusions(logs, self.object_list, group_logs=True) + object_list = list(reversed(object_list)) + return super().get_context_data(date=self.date, dates=dates, object_list=object_list, **kwargs)