From 13210e06977a9d7250c15f878c9dae313fcc7a35 Mon Sep 17 00:00:00 2001
From: Helge Jung <hej@c3pb.de>
Date: Thu, 19 Dec 2024 00:58:05 +0100
Subject: [PATCH] introduce new template filter 'conference_time'

---
 src/core/locale/de/LC_MESSAGES/django.po |  3 +++
 src/core/locale/en/LC_MESSAGES/django.po |  3 +++
 src/core/templatetags/conference_time.py | 29 ++++++++++++++++++++++++
 src/plainui/jinja2.py                    |  2 ++
 4 files changed, 37 insertions(+)

diff --git a/src/core/locale/de/LC_MESSAGES/django.po b/src/core/locale/de/LC_MESSAGES/django.po
index 2590c4530..c392c9da1 100644
--- a/src/core/locale/de/LC_MESSAGES/django.po
+++ b/src/core/locale/de/LC_MESSAGES/django.po
@@ -2466,6 +2466,9 @@ msgstr ""
 msgid "Activate your %(safe_site_name)s account"
 msgstr "Aktiviere dein %(safe_site_name)s Konto"
 
+msgid "Conference-day"
+msgstr "Tag"
+
 #, python-format
 msgid "Validation__error_file_size_MB_exceeded %(max_size)d"
 msgstr "Die Datei darf nicht größer als %(max_size)dMb sein"
diff --git a/src/core/locale/en/LC_MESSAGES/django.po b/src/core/locale/en/LC_MESSAGES/django.po
index 608a666a7..95eeb5c3b 100644
--- a/src/core/locale/en/LC_MESSAGES/django.po
+++ b/src/core/locale/en/LC_MESSAGES/django.po
@@ -2448,6 +2448,9 @@ msgstr ""
 msgid "Activate your %(safe_site_name)s account"
 msgstr ""
 
+msgid "Conference-day"
+msgstr "day"
+
 #, python-format
 msgid "Validation__error_file_size_MB_exceeded %(max_size)d"
 msgstr "You aren't allowed to upload a file larger than %(max_size)dMb"
diff --git a/src/core/templatetags/conference_time.py b/src/core/templatetags/conference_time.py
index e69de29bb..8bac3e6a1 100644
--- a/src/core/templatetags/conference_time.py
+++ b/src/core/templatetags/conference_time.py
@@ -0,0 +1,29 @@
+from datetime import datetime
+
+from django.template.defaulttags import register
+from django.utils import timezone
+from django.utils.translation import gettext_lazy as _
+
+from core.models import Conference
+
+
+@register.filter
+def conference_time(timestamp: datetime, conf: Conference):
+    if timestamp is None:
+        return ''
+
+    # derive conference day from given timestamp
+    day = conf.get_conference_day(timestamp)
+    day_i18n = _('Conference-day')
+
+    # convert timestamp to current timezone
+    local_ts = timezone.localtime(timestamp)
+
+    # convert midnight to 24:00
+    h = local_ts.hour
+    if h == 0:
+        h = 24
+    m = local_ts.minute
+
+    # return formatted string
+    return f'{day_i18n} {day} @ {h:02d}:{m:02d}'
diff --git a/src/plainui/jinja2.py b/src/plainui/jinja2.py
index 2677ce6ce..7365c3a32 100644
--- a/src/plainui/jinja2.py
+++ b/src/plainui/jinja2.py
@@ -22,6 +22,7 @@ from modeltranslation.fields import build_localized_fieldname
 from modeltranslation.settings import AVAILABLE_LANGUAGES
 
 from core.models import PlatformUser, UserBadge
+from core.templatetags.conference_time import conference_time
 from core.templatetags.hub_absolute import hub_absolute, hub_absolute_self
 from core.templatetags.update_parameters import update_parameters
 
@@ -302,6 +303,7 @@ def environment(**options):
             'link_icon': link_icon,
         }
     )
+    env.filters['conference_time'] = conference_time
     env.filters['strftdelta'] = custom_timedelta
     env.filters['strftdelta_short'] = custom_timedelta_short
     env.filters['strftimehm'] = custom_strftimehm
-- 
GitLab