Forked from
KIF / AKPlanning
593 commits behind the upstream repository.
-
Implements #72 Adapt dashboard layout to show feed Add logic to get a list of recent changes Add link to dashboard detail view on start page Introduce settings to disable and control feed Add translation
Implements #72 Adapt dashboard layout to show feed Add logic to get a list of recent changes Add link to dashboard detail view on start page Introduce settings to disable and control feed Add translation
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
views.py 2.93 KiB
from django.apps import apps
from django.urls import reverse_lazy
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import ensure_csrf_cookie
from django.views.generic import TemplateView, DetailView
from django.utils.translation import gettext_lazy as _
from AKModel.models import Event, AK, AKSlot
from AKPlanning import settings
class DashboardView(TemplateView):
template_name = 'AKDashboard/dashboard.html'
@method_decorator(ensure_csrf_cookie)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['events'] = Event.objects.filter(public=True)
return context
class DashboardEventView(DetailView):
template_name = 'AKDashboard/dashboard_event.html'
context_object_name = 'event'
model = Event
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# Show feed of recent changes (if activated)
if settings.DASHBOARD_SHOW_RECENT:
recent_changes = []
# Newest AKs
if apps.is_installed("AKSubmission"):
submission_changes = AK.history.filter(event=context['event'])[:50]
for s in submission_changes:
if s.history_type == '+':
text = _('New AK: %(ak)s.') % {'ak': s.name}
icon = ('plus-square', 'far')
elif s.history_type == '~':
text = _('AK "%(ak)s" edited.') % {'ak': s.name}
icon = ('pen-square', 'fas')
else:
text = _('AK "%(ak)s" deleted.') % {'ak': s.name}
icon = ('times', 'fas')
recent_changes.append({'icon': icon, 'text': text, 'link': reverse_lazy('submit:ak_detail', kwargs={'event_slug': context['event'].slug, 'pk': s.id}), 'timestamp': s.history_date})
# Changes in plan
if apps.is_installed("AKPlan"):
if not context['event'].plan_hidden:
last_changed_slots = AKSlot.objects.filter(event=context['event']).order_by('-updated')[:50]
for changed_slot in last_changed_slots:
recent_changes.append({'icon': ('clock', 'far'), 'text': _('AK "%(ak)s" (re-)scheduled.') % {'ak': changed_slot.ak.name}, 'link': reverse_lazy('submit:ak_detail', kwargs={
'event_slug': context['event'].slug, 'pk': changed_slot.ak.id}), 'timestamp': changed_slot.updated})
# Sort by change date...
recent_changes.sort(key=lambda x: x['timestamp'], reverse=True)
# ... and restrict to the latest 25 changes
context['recent_changes'] = recent_changes[:settings.DASHBOARD_RECENT_MAX]
else:
context['recent_changes'] = []
return context