From 886b938f08d3806e96cfeb1a8c1ddbdfd02788f6 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 14 Jul 2018 15:07:35 +0200 Subject: [PATCH] Allow plugins to add sub navigation points --- src/pretix/control/navigation.py | 23 ++++++++++++++++------- src/pretix/plugins/pretixdroid/signals.py | 4 ++++ src/pretix/plugins/statistics/signals.py | 4 ++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/pretix/control/navigation.py b/src/pretix/control/navigation.py index f57e9aefd4..411ccf7716 100644 --- a/src/pretix/control/navigation.py +++ b/src/pretix/control/navigation.py @@ -261,10 +261,10 @@ def get_event_navigation(request: HttpRequest): ] }) - nav += sorted( + merge_in(nav, sorted( sum((list(a[1]) for a in nav_event.send(request.event, request=request)), []), key=lambda r: r['label'] - ) + )) return nav @@ -336,11 +336,10 @@ def get_global_navigation(request): ] }) - nav += sorted( + merge_in(nav, sorted( sum((list(a[1]) for a in nav_global.send(request, request=request)), []), key=lambda r: r['label'] - ) - + )) return nav @@ -390,9 +389,19 @@ def get_organizer_navigation(request): 'icon': 'group', }) - nav += sorted( + merge_in(nav, sorted( sum((list(a[1]) for a in nav_organizer.send(request.organizer, request=request, organizer=request.organizer)), []), key=lambda r: r['label'] - ) + )) return nav + + +def merge_in(nav, newnav): + for item in newnav: + if 'parent' in item: + parents = [n for n in nav if n['url'] == item['parent']] + if parents: + parents[0]['children'].append(item) + else: + nav.append(item) diff --git a/src/pretix/plugins/pretixdroid/signals.py b/src/pretix/plugins/pretixdroid/signals.py index 3a0f4db6a0..12fd51976d 100644 --- a/src/pretix/plugins/pretixdroid/signals.py +++ b/src/pretix/plugins/pretixdroid/signals.py @@ -20,6 +20,10 @@ def control_nav_import(sender, request=None, **kwargs): 'event': request.event.slug, 'organizer': request.event.organizer.slug, }), + 'parent': reverse('control:event.orders.checkinlists', kwargs={ + 'event': request.event.slug, + 'organizer': request.event.organizer.slug, + }), 'active': (url.namespace == 'plugins:pretixdroid' and url.url_name == 'config'), 'icon': 'mobile', } diff --git a/src/pretix/plugins/statistics/signals.py b/src/pretix/plugins/statistics/signals.py index a08edf1f5e..176c083507 100644 --- a/src/pretix/plugins/statistics/signals.py +++ b/src/pretix/plugins/statistics/signals.py @@ -18,6 +18,10 @@ def control_nav_import(sender, request=None, **kwargs): 'event': request.event.slug, 'organizer': request.event.organizer.slug, }), + 'parent': reverse('control:event.orders', kwargs={ + 'event': request.event.slug, + 'organizer': request.event.organizer.slug, + }), 'active': (url.namespace == 'plugins:statistics'), 'icon': 'bar-chart', }