Skip to content
Snippets Groups Projects
Commit d137f477 authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

AKDashboard: Handle long lists of events better

Feature all active events and additionally a specified number of recent events
The other events are displayed smaller
This implements #160
Furthermore, display event dates and places above the button rows
parent ce778dad
No related branches found
No related tags found
No related merge requests found
Pipeline #267168 failed
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-16 16:30+0200\n"
"POT-Creation-Date: 2025-01-01 17:28+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -61,17 +61,22 @@ msgstr "Veranstaltung"
msgid "Event this button belongs to"
msgstr "Veranstaltung, zu der dieser Button gehört"
#: AKDashboard/templates/AKDashboard/dashboard.html:17
#: AKDashboard/templates/AKDashboard/dashboard.html:18
#: AKDashboard/templates/AKDashboard/dashboard_event.html:29
#: AKDashboard/templates/AKDashboard/dashboard_row_old_event.html:53
msgid "Write to organizers of this event for questions and comments"
msgstr ""
"Kontaktiere die Organisator*innen des Events bei Fragen oder Kommentaren"
#: AKDashboard/templates/AKDashboard/dashboard.html:24
msgid "Old events"
msgstr "Frühere Veranstaltungen"
#: AKDashboard/templates/AKDashboard/dashboard.html:34
msgid "Currently, there are no Events!"
msgstr "Aktuell gibt es keine Events!"
#: AKDashboard/templates/AKDashboard/dashboard.html:27
#: AKDashboard/templates/AKDashboard/dashboard.html:37
msgid "Please contact an administrator if you want to use AKPlanning."
msgstr ""
"Bitte kontaktiere eine*n Administrator*in, falls du AKPlanning verwenden "
......@@ -81,46 +86,49 @@ msgstr ""
msgid "Recent"
msgstr "Kürzlich"
#: AKDashboard/templates/AKDashboard/dashboard_row.html:12
#: AKDashboard/templates/AKDashboard/dashboard_row.html:18
#: AKDashboard/templates/AKDashboard/dashboard_row_old_event.html:20
msgid "AK List"
msgstr "AK-Liste"
#: AKDashboard/templates/AKDashboard/dashboard_row.html:23
#: AKDashboard/templates/AKDashboard/dashboard_row.html:29
msgid "Current AKs"
msgstr "Aktuelle AKs"
#: AKDashboard/templates/AKDashboard/dashboard_row.html:30
#: AKDashboard/templates/AKDashboard/dashboard_row.html:36
msgid "AK Wall"
msgstr "AK-Wall"
#: AKDashboard/templates/AKDashboard/dashboard_row.html:38
#: AKDashboard/templates/AKDashboard/dashboard_row.html:44
#: AKDashboard/templates/AKDashboard/dashboard_row_old_event.html:30
msgid "Schedule"
msgstr "AK-Plan"
#: AKDashboard/templates/AKDashboard/dashboard_row.html:49
#: AKDashboard/templates/AKDashboard/dashboard_row.html:55
msgid "AK Submission"
msgstr "AK-Einreichung"
#: AKDashboard/templates/AKDashboard/dashboard_row.html:57
#: AKDashboard/templates/AKDashboard/dashboard_row.html:63
#: AKDashboard/templates/AKDashboard/dashboard_row_old_event.html:39
msgid "AK History"
msgstr "AK-Verlauf"
#: AKDashboard/views.py:59
#: AKDashboard/views.py:69
#, python-format
msgid "New AK: %(ak)s."
msgstr "Neuer AK: %(ak)s."
#: AKDashboard/views.py:62
#: AKDashboard/views.py:72
#, python-format
msgid "AK \"%(ak)s\" edited."
msgstr "AK \"%(ak)s\" bearbeitet."
#: AKDashboard/views.py:65
#: AKDashboard/views.py:75
#, python-format
msgid "AK \"%(ak)s\" deleted."
msgstr "AK \"%(ak)s\" gelöscht."
#: AKDashboard/views.py:80
#: AKDashboard/views.py:90
#, python-format
msgid "AK \"%(ak)s\" (re-)scheduled."
msgstr "AK \"%(ak)s\" (um-)geplant."
......@@ -2,6 +2,10 @@
margin-bottom: 5em;
}
.dashboard-row-small {
margin-bottom: 3em;
}
.dashboard-row > .row {
margin-left: 0;
padding-bottom: 1em;
......
......@@ -9,16 +9,26 @@
{% endblock %}
{% block content %}
{% for event in events %}
<div class="dashboard-row">
{% include "AKDashboard/dashboard_row.html" %}
{% if event.contact_email %}
<p>
<a href="mailto:{{ event.contact_email }}">{% fa6_icon "envelope" "fas" %} {% trans "Write to organizers of this event for questions and comments" %}</a>
</p>
{% endif %}
</div>
{% empty %}
{% if total_event_count > 0 %}
{% for event in active_and_current_events %}
<div class="dashboard-row">
{% include "AKDashboard/dashboard_row.html" %}
{% if event.contact_email %}
<p>
<a href="mailto:{{ event.contact_email }}">{% fa6_icon "envelope" "fas" %} {% trans "Write to organizers of this event for questions and comments" %}</a>
</p>
{% endif %}
</div>
{% endfor %}
{% if old_event_count > 0 %}
<h2 class="mb-3">{% trans "Old events" %}</h2>
{% for event in old_events %}
<div class="dashboard-row-small">
{% include "AKDashboard/dashboard_row_old_event.html" %}
</div>
{% endfor %}
{% endif %}
{% else %}
<div class="jumbotron">
<h2 class="display-4">
{% trans 'Currently, there are no Events!' %}
......@@ -27,5 +37,5 @@
{% trans 'Please contact an administrator if you want to use AKPlanning.' %}
</p>
</div>
{% endfor %}
{% endif %}
{% endblock %}
......@@ -3,6 +3,12 @@
{% load fontawesome_6 %}
<h2><a href="{% url 'dashboard:dashboard_event' slug=event.slug %}">{{ event.name }}</a></h2>
<h4 class="text-muted">
{% if event.place %}
<b>{{ event.place }} &middot;</b>
{% endif %}
{{ event | event_month_year }}
</h4>
<div class="mt-2">
{% if 'AKSubmission'|check_app_installed %}
<a class="dashboard-box btn btn-primary"
......
{% load i18n %}
{% load tags_AKModel %}
{% load fontawesome_6 %}
<h3><a href="{% url 'dashboard:dashboard_event' slug=event.slug %}">{{ event.name }}</a>
<span class="text-muted">
&middot;
{% if event.place %}
{{ event.place }} &middot;
{% endif %}
{{ event | event_month_year }}
</span>
</h3>
<div class="mt-2">
{% if 'AKSubmission'|check_app_installed %}
<a class="btn btn-primary"
href="{% url 'submit:ak_list' event_slug=event.slug %}">
<div class="col-sm-12 col-md-3 col-lg-2 dashboard-button">
<span class="fa fa-list-ul"></span>
<span class='text'>{% trans 'AK List' %}</span>
</div>
</a>
{% endif %}
{% if 'AKPlan'|check_app_installed %}
{% if not event.plan_hidden or user.is_staff %}
<a class="btn btn-primary"
href="{% url 'plan:plan_overview' event_slug=event.slug %}">
<div class="col-sm-12 col-md-3 col-lg-2 dashboard-button">
<span class="fa fa-calendar-alt"></span>
<span class='text'>{% trans 'Schedule' %}</span>
</div>
</a>
{% endif %}
{% endif %}
<a class="btn btn-primary"
href="{% url 'dashboard:dashboard_event' slug=event.slug %}#history">
<div class="col-sm-12 col-md-3 col-lg-2 dashboard-button">
<span class="fa fa-history"></span>
<span class='text'>{% trans 'AK History' %}</span>
</div>
</a>
{% for button in event.dashboardbutton_set.all %}
<a class="btn btn-{{ button.get_color_display }}"
href="{{ button.url }}">
<div class="col-sm-12 col-md-3 col-lg-2 dashboard-button">
{% if button.icon %}<span class="fa">{{ button.icon.as_html }}</span>{% endif %}
<span class='text'>{{ button.text }}</span>
</div>
</a>
{% endfor %}
<a class="btn btn-info"
href=mailto:{{ event.contact_email }}"
title="{% trans 'Write to organizers of this event for questions and comments' %}">
{% fa6_icon "envelope" "fas" %}
</a>
</div>
......@@ -90,7 +90,8 @@ class DashboardTests(TestCase):
self.event.save()
response = self.client.get(url_dashboard_index)
self.assertEqual(response.status_code, 200)
self.assertFalse(self.event in response.context["events"])
self.assertFalse(self.event in response.context["active_and_current_events"])
self.assertFalse(self.event in response.context["old_events"])
response = self.client.get(url_event_dashboard)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context["event"], self.event)
......@@ -100,7 +101,7 @@ class DashboardTests(TestCase):
self.event.save()
response = self.client.get(url_dashboard_index)
self.assertEqual(response.status_code, 200)
self.assertTrue(self.event in response.context["events"])
self.assertTrue(self.event in response.context["active_and_current_events"])
def test_active(self):
"""
......
......@@ -22,7 +22,17 @@ class DashboardView(TemplateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['events'] = Event.objects.filter(public=True).prefetch_related('dashboardbutton_set')
# Load events and split between active and current/featured events and those that should show smaller below
context["active_and_current_events"] = []
context["old_events"] = []
for event in Event.objects.filter(public=True).order_by("-active", "-pk").prefetch_related('dashboardbutton_set'):
if event.active or len(context["active_and_current_events"]) < settings.DASHBOARD_MAX_FEATURED_EVENTS:
context["active_and_current_events"].append(event)
else:
context["old_events"].append(event)
context["active_event_count"] = len(context["active_and_current_events"])
context["old_event_count"] = len(context["old_events"])
context["total_event_count"] = context["active_event_count"] + context["old_event_count"]
return context
......
......@@ -4,6 +4,9 @@ from django.conf import settings
from django.utils.html import format_html, mark_safe, conditional_escape
from django.templatetags.static import static
from fontawesome_6.app_settings import get_css
from django.template.defaultfilters import date
from AKModel.models import Event
register = template.Library()
......@@ -71,6 +74,21 @@ def wiki_owners_export(owners, event):
return ", ".join(to_link(owner) for owner in owners.all())
@register.filter
def event_month_year(event:Event):
"""
Print rough event date (month and year)
:param event: event to print the date for
:return: string containing rough date information for event
"""
if event.start.month == event.end.month:
return f"{date(event.start, 'F')} {event.start.year}"
event_start_string = date(event.start, 'F')
if event.start.year != event.end.year:
event_start_string = f"{event_start_string} {event.start.year}"
return f"{event_start_string} - {date(event.end, 'F')} {event.end.year}"
# get list of relevant css fontawesome css files for this instance
css = get_css()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment