diff --git a/projectroles/templates/projectroles/_site_titlebar_dropdown.html b/projectroles/templates/projectroles/_site_titlebar_dropdown.html index 3251a871..da5721b1 100644 --- a/projectroles/templates/projectroles/_site_titlebar_dropdown.html +++ b/projectroles/templates/projectroles/_site_titlebar_dropdown.html @@ -7,47 +7,56 @@ {# Responsive replacement for user dropdown #} {# Admin link #} -{% if request.user.is_superuser %} - -{% endif %} - +{#{% if request.user.is_superuser %}#} +{# #} +{#{% endif %}#} +{##} {# Site-wide apps #} -{% for plugin in site_apps %} - {% has_perm plugin.app_permission request.user as can_view_app %} - {% if not plugin.app_permission or can_view_app %} - - {% endif %} -{% endfor %} - +{#{% for plugin in site_apps %}#} +{# {% has_perm plugin.app_permission request.user as can_view_app %}#} +{# {% if not plugin.app_permission or can_view_app %}#} +{# #} +{# {% endif %}#} +{#{% endfor %}#} +{##} {# Log out link #} -{% if request.user.is_authenticated %} - -{% elif not kiosk_mode %} - #} +{#{% elif not kiosk_mode %}#} +{# #} +{#{% endif %}#} +{% get_user_links request as dropdown_links %} +{% for link in dropdown_links %} + -{% endif %} - +{% endfor %} {# Actual user dropdown #} diff --git a/projectroles/templatetags/projectroles_tags.py b/projectroles/templatetags/projectroles_tags.py index c4862992..126f1d23 100644 --- a/projectroles/templatetags/projectroles_tags.py +++ b/projectroles/templatetags/projectroles_tags.py @@ -8,7 +8,7 @@ from projectroles.app_settings import AppSettingAPI from projectroles.models import RemoteProject, SODAR_CONSTANTS from projectroles.plugins import get_active_plugins -from projectroles.utils import AppLinkContent +from projectroles.utils import UserDropdownContent, AppLinkContent register = template.Library() @@ -270,6 +270,13 @@ def get_admin_warning(): return ret +@register.simple_tag +def get_user_links(request): + """Return user dropdown links""" + user_dropdown_content = UserDropdownContent() + return user_dropdown_content.get_user_links(request) + + @register.simple_tag def get_project_app_links(request, project=None): """Return sidebar links""" diff --git a/projectroles/utils.py b/projectroles/utils.py index 5862b09c..837b74ac 100644 --- a/projectroles/utils.py +++ b/projectroles/utils.py @@ -5,8 +5,9 @@ from django.urls import reverse from django.utils import timezone -from projectroles.models import SODAR_CONSTANTS +from projectroles.constants import get_sodar_constants from projectroles.plugins import get_active_plugins +from projectroles.models import SODAR_CONSTANTS # Settings SECRET_LENGTH = getattr(settings, 'PROJECTROLES_SECRET_LENGTH', 32) @@ -299,3 +300,60 @@ def get_project_app_links(self, request, project=None): } ) return ret + + +class UserDropdownContent: + """Class to generate user dropdown content""" + + def get_user_links(self, request): + links = [] + # Add site-wide apps links + site_apps = get_active_plugins('site_app') + for app in site_apps: + if not app.app_permission or request.user.has_perm( + app.app_permission + ): + links.append( + { + 'name': app.name, + 'url': reverse(app.entry_point_url_id), + 'label': app.title, + 'icon': app.icon, + 'active': request.path + == reverse(app.entry_point_url_id), + } + ) + # Add admin link + if request.user.is_superuser: + links.append( + { + 'name': 'admin', + 'url': reverse('admin:index'), + 'label': 'Django Admin', + 'icon': 'mdi:cogs', + 'active': request.path == reverse('admin:index'), + } + ) + # Add log out link + if request.user.is_authenticated: + links.append( + { + 'name': 'sign-out', + 'url': reverse('logout'), + 'label': 'Logout', + 'icon': 'mdi:logout-variant', + 'active': False, + } + ) + elif not getattr(settings, 'PROJECTROLES_KIOSK_MODE', False): + links.append( + { + 'name': 'sign-in', + 'url': reverse('login'), + 'label': 'Login', + 'icon': 'mdi:login-variant', + 'active': False, + } + ) + print(links) + return links