Skip to content
Snippets Groups Projects
Commit b05c4e90 authored by Roang's avatar Roang
Browse files

Merge branch 'fix/time_display' into 'develop'

fix time display and ordering

Closes #602

See merge request hub/hub!1101
parents d7e3b78a 7c074fdc
No related branches found
No related tags found
No related merge requests found
......@@ -36,8 +36,12 @@
<tbody>
{% for event in events %}
<tr class="{% if not event.is_public %}text-muted{% endif %}">
<td>{{ event.schedule_start }}</td>
<td>{{ event.schedule_duration }}</td>
<td data-order="{{ event.schedule_start|date:"U" }}">
<abbr title="{{ event.schedule_start|date:"c" }}">{{ event.schedule_start|conference_time:conference }}</abbr>
</td>
<td data-order="{{ event.schedule_duration.total_seconds|default:"0" }}">
{{ event.schedule_duration|naturaltimespan }}
</td>
<td>
{% if user_list and event.kind == 'sos' %}
<a href="{% url 'backoffice:sos-edit' pk=event.pk %}">{{ event.name }}</a>
......
......@@ -45,8 +45,11 @@ def get_language_item(dictionary):
@register.filter
def naturaltimespan(x):
assert isinstance(x, timedelta), str.format('Expected a timedelta object: {0!r}', x)
def naturaltimespan(x: timedelta) -> str or None:
if x is None:
return ''
if not isinstance(x, timedelta):
raise ValueError('Expected a timedelta object.')
seconds = x.total_seconds()
......
......@@ -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"
......
......@@ -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"
......
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}'
......@@ -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
......
......@@ -126,10 +126,12 @@ class TagView(ConferenceRequiredMixin, TemplateView):
context['tag'] = tag
# TODO other types. What should we link here?
# TODO: consider using views.utils.event_filter() here
context['events'] = (
Event.objects.conference_accessible(self.conf)
.filter(id__in=TagItem.objects.filter(tag=tag, target_type=ContentType.objects.get_for_model(Event)).values_list('target_id'))
.filter(schedule_start__isnull=False, schedule_end__isnull=False)
.order_by('schedule_start', 'schedule_end')
)
context['my_favorite_events'] = session_get_favorite_events(self.request.session, self.request.user)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment