diff --git a/src/backoffice/views/schedules.py b/src/backoffice/views/schedules.py index e993d94c9108f10a5ff2d566cad0253fce908ef8..9b140857417f06dfbcea6e0d03baaaa915a0e45b 100644 --- a/src/backoffice/views/schedules.py +++ b/src/backoffice/views/schedules.py @@ -128,7 +128,7 @@ class ScheduleSourceImportDetailView(ScheduleAdminMixin, DetailView): if data := ctx['object'].data: ctx['activity'] = sorted( data.get('_activity', []), - key=lambda item: (action2sort.get(item["action"], 99), type2sort.get(item["type"], 99), item["source_id"]), + key=lambda item: (action2sort.get(item['action'], 99), type2sort.get(item['type'], 99), item['source_id']), ) else: ctx['activity'] = None diff --git a/src/core/templatetags/hub_absolute.py b/src/core/templatetags/hub_absolute.py index 92988b1f58969fadaca8ff607b99fb50a92e2948..4e8db3b4cb5117a8bce128afd7e2817a58eb8ebb 100644 --- a/src/core/templatetags/hub_absolute.py +++ b/src/core/templatetags/hub_absolute.py @@ -1,8 +1,12 @@ +from typing import Optional + from django.conf import settings from django.conf.urls.i18n import i18n_patterns from django.contrib import admin +from django.http import HttpRequest from django.template.defaulttags import register from django.urls import NoReverseMatch, get_script_prefix, include, path, reverse, set_script_prefix +from django.utils import translation PREFIXES = { 'admin': settings.ADMIN_BASE_URL, @@ -42,13 +46,28 @@ URL_CONFIGS = { @register.simple_tag -def hub_absolute(url: str, *args, i18n: bool = True, query_string: str = '', **kwargs): +def hub_absolute(url: str, *args, i18n: bool = True, lang: Optional[str] = None, query_string: str = '', **kwargs): try: app, _ = url.split(':') except ValueError: raise NoReverseMatch('No reverse found, missing namespace') thread_prefix = get_script_prefix() set_script_prefix(PREFIXES[app]) - reverse_url = reverse(url, URL_CONFIGS['i18n' if i18n else 'plain'][app], current_app=app, args=args, kwargs=kwargs) + cur_language = translation.get_language() + try: + if lang: + # switch language if requested + translation.activate(lang) + reverse_url = reverse(url, URL_CONFIGS['i18n' if i18n else 'plain'][app], current_app=app, args=args, kwargs=kwargs) + finally: + translation.activate(cur_language) set_script_prefix(thread_prefix) return reverse_url if not query_string else f'{reverse_url}?{query_string}' + + +@register.simple_tag +def hub_absolute_self(request: HttpRequest, i18n: bool = True, lang: Optional[str] = None): + url = f'{request.resolver_match.app_name}:{request.resolver_match.url_name}' + query_string = request.META.get('QUERY_STRING') + + return hub_absolute(url, i18n=i18n, lang=lang, query_string=query_string, *request.resolver_match.args, **request.resolver_match.kwargs) diff --git a/src/plainui/jinja2.py b/src/plainui/jinja2.py index c33949e63057e6487716b007a34d4eb5ccaf97b0..f06a6148c1e6056b8beed4cfbea9becfe09a7fbb 100644 --- a/src/plainui/jinja2.py +++ b/src/plainui/jinja2.py @@ -1,11 +1,11 @@ import re from datetime import datetime, timedelta -from django.conf import settings from typing import Any from jinja2 import Environment, pass_context from jinja2.runtime import Context +from django.conf import settings from django.contrib.humanize.templatetags.humanize import NaturalTimeFormatter from django.contrib.messages import get_messages from django.http import HttpRequest @@ -22,7 +22,7 @@ from modeltranslation.fields import build_localized_fieldname from modeltranslation.settings import AVAILABLE_LANGUAGES from core.models import PlatformUser, UserBadge -from core.templatetags.hub_absolute import hub_absolute +from core.templatetags.hub_absolute import hub_absolute, hub_absolute_self from core.templatetags.update_parameters import update_parameters from plainui.utils import fetch_wiki_page @@ -284,6 +284,7 @@ def environment(**options): 'get_language': get_language, 'get_messages': get_messages, 'hub_absolute': hub_absolute, + 'hub_absolute_self': hub_absolute_self, 'json_script': json_script, 'num_of_notifications': num_of_notifications, 'num_of_unread_messages': num_of_unread_messages, diff --git a/src/plainui/jinja2/plainui/assembly.html b/src/plainui/jinja2/plainui/assembly.html index b4c8a8ff6545d2ae82b6adb9d76feb32e18470d1..7da50ddd430427042447e7cc7b022de228eae05a 100644 --- a/src/plainui/jinja2/plainui/assembly.html +++ b/src/plainui/jinja2/plainui/assembly.html @@ -70,7 +70,7 @@ {% if assembly.public_members %} <div class="hub-tags"> {%- for person in assembly.public_members %} - {{ tagboxMacro.user(person.member.display_name, link=url('plainui:user', user_slug=person.member.slug) ) }} + {{ tagboxMacro.user(person.member.display_name, link=url('plainui:user', user_slug=person.member.slug) if not archive_mode else None ) }} {% endfor -%} </div> {% else %} diff --git a/src/plainui/jinja2/plainui/components/header_buttons.html b/src/plainui/jinja2/plainui/components/header_buttons.html index 4cde1609c239923aa6cd16c90b0252748f5c8280..beb55a1a0767da724c8e9759033d9b0ddbda1c88 100644 --- a/src/plainui/jinja2/plainui/components/header_buttons.html +++ b/src/plainui/jinja2/plainui/components/header_buttons.html @@ -52,6 +52,7 @@ </svg> </a> <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="lang-select"> + {% if not archive_mode %} <form class="hub-header__additional-lang" method="POST" @@ -74,6 +75,10 @@ {{ _("en") }} </button></li> </form> + {% else %} + <li><a class="dropdown-item" href="{{ hub_absolute_self(request, lang='de') }}">{{ _("de") }}</a></li> + <li><a class="dropdown-item" href="{{ hub_absolute_self(request, lang='en') }}">{{ _("en") }}</a></li> + {% endif %} </ul> {%- endmacro %} @@ -140,7 +145,7 @@ {% macro share(title=_("share this "), color="transparent" ) -%} {% if not disable_share %} <a - href="{{ hub_absolute(request.resolver_match.view_name, i18n=False, query_string=request.META.QUERY_STRING, *view.args, **view.kwargs) if view else hub_absolute(request.resolver_match.view_name, i18n=False, query_string=request.META.QUERY_STRING) }}" + href="{{ hub_absolute_self(request, i18n=archive_mode) }}" class="btn-icon-big btn-{{ color }} nav-link" title="{{ title }}" target="_blank" diff --git a/src/plainui/jinja2/plainui/login.html b/src/plainui/jinja2/plainui/login.html index 52c2ad0e9f415e9e0298689e71644d85cd730892..e58b7a8200e54e93ee5a7b19e5be0fce0530a29d 100644 --- a/src/plainui/jinja2/plainui/login.html +++ b/src/plainui/jinja2/plainui/login.html @@ -38,7 +38,7 @@ <p class="mb-2 text-white">{{ _("login--cookieinfo") }}</p> <hr class="hub-spacer"> - <h3>{{ _("New here?") }}</h2> + <h3>{{ _("New here?") }}</h3> <div class="d-grid"> <a href="{{ url('plainui:signup') }}" class="btn btn-primary" title="{{ _(" sign up (new account)") }}">