From c1e5cebd2101be77c3a7fd01b1c2691afcc08864 Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Wed, 11 Nov 2020 16:46:52 +0100
Subject: [PATCH] Allow site local configuration of available languages

---
 aleksis/core/preferences.py                         | 13 +++++++++++++
 .../core/templates/core/partials/language_form.html |  3 +--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py
index 890801b67..eba67c722 100644
--- a/aleksis/core/preferences.py
+++ b/aleksis/core/preferences.py
@@ -1,5 +1,6 @@
 from django.conf import settings
 from django.forms import EmailField, ImageField, URLField
+from django.forms.widgets import SelectMultiple
 from django.utils.translation import gettext_lazy as _
 
 from dynamic_preferences.preferences import Section
@@ -22,6 +23,7 @@ notification = Section("notification")
 footer = Section("footer")
 account = Section("account")
 auth = Section("auth", verbose_name=_("Authentication"))
+internationalisation = Section("internationalisation", verbose_name=_("Internationalisation"))
 
 
 @site_preferences_registry.register
@@ -196,3 +198,14 @@ 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 = internationalisation
+    name = "languages"
+    default = [code[0] for code in settings.LANGUAGES]
+    widget = SelectMultiple
+    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..9a1c62e2c 100644
--- a/aleksis/core/templates/core/partials/language_form.html
+++ b/aleksis/core/templates/core/partials/language_form.html
@@ -8,8 +8,7 @@
   <input name="next" type="hidden" value="{{ request.get_full_path }}">
 
   {% get_current_language as LANGUAGE_CODE %}
-  {% get_available_languages as LANGUAGES %}
-  {% get_language_info_list for LANGUAGES as languages %}
+  {% get_language_info_list for request.site.preferences.internationalisation__languages as languages %}
 
   {# Select #}
   <div class="input-field language-field">
-- 
GitLab