From d04433276bf585a849882f6be00e7a5b5cd020a7 Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Wed, 11 Nov 2020 08:01:22 +0100
Subject: [PATCH] Allow site local configuration of available languages. Closes
 #261.

---
 aleksis/core/preferences.py                            | 10 ++++++++++
 .../core/templates/core/partials/language_form.html    |  4 ++--
 aleksis/core/templatetags/data_helpers.py              |  9 +++++++++
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py
index 890801b67..93d1cda41 100644
--- a/aleksis/core/preferences.py
+++ b/aleksis/core/preferences.py
@@ -22,6 +22,7 @@ notification = Section("notification")
 footer = Section("footer")
 account = Section("account")
 auth = Section("auth", verbose_name=_("Authentication"))
+internationalization = Section("internationalization", verbose_name=_("Internationalization"))
 
 
 @site_preferences_registry.register
@@ -196,3 +197,12 @@ class AuthenticationBackends(MultipleChoicePreference):
 
     def get_choices(self):
         return [(b, b) for b in settings.CUSTOM_AUTHENTICATION_BACKENDS]
+
+@site_preferences_registry.register
+class AvailableLanguages(MultipleChoicePreference):
+    section = internationalization
+    name = "languages"
+    default = None
+    verbose_name = _("Available languages")
+    field_attribute = {"initial": []}
+    choices = settings.LANGUAGES
diff --git a/aleksis/core/templates/core/partials/language_form.html b/aleksis/core/templates/core/partials/language_form.html
index 36ffa81a8..15ad9ccf4 100644
--- a/aleksis/core/templates/core/partials/language_form.html
+++ b/aleksis/core/templates/core/partials/language_form.html
@@ -1,6 +1,6 @@
 {# -*- engine:django -*- #}
 
-{% load i18n %}
+{% load i18n data_helpers %}
 
 
 <form action="{% url 'set_language' %}" method="post" class="language-form">
@@ -8,7 +8,7 @@
   <input name="next" type="hidden" value="{{ request.get_full_path }}">
 
   {% get_current_language as LANGUAGE_CODE %}
-  {% get_available_languages as LANGUAGES %}
+  {% get_enabled_languages as LANGUAGES %}
   {% get_language_info_list for LANGUAGES as languages %}
 
   {# Select #}
diff --git a/aleksis/core/templatetags/data_helpers.py b/aleksis/core/templatetags/data_helpers.py
index ab2309f26..a97ee61c0 100644
--- a/aleksis/core/templatetags/data_helpers.py
+++ b/aleksis/core/templatetags/data_helpers.py
@@ -5,6 +5,8 @@ from django import template
 from django.contrib.contenttypes.models import ContentType
 from django.db.models import Model
 
+from aleksis.core.util.core_helpers import get_site_preferences
+
 register = template.Library()
 
 
@@ -51,3 +53,10 @@ def parse_json(value: Optional[str] = None) -> Union[dict, None]:
     if not value:
         return None
     return json.loads(value)
+
+
+@register.simple_tag
+def get_enabled_languages() -> Any:
+    """Template tag to get all available languages configured in settings."""
+
+    return get_site_preferences()["internationalization__languages"]
-- 
GitLab