Add configuration page: implement ConfigurationForm, update views, templates, and routes to enable superusers to manage club settings and toggle features using django-waffle.
This commit is contained in:
@@ -1,6 +1,59 @@
|
||||
from pathlib import Path
|
||||
|
||||
from constance import config
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||
from django.core.cache import cache
|
||||
from django.core.files.storage import default_storage
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
from django.shortcuts import render
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from waffle.models import Switch
|
||||
|
||||
from backend.forms import ConfigurationForm
|
||||
|
||||
|
||||
# Create your views here.
|
||||
def index(request):
|
||||
return render(request, "backend/index.html")
|
||||
|
||||
|
||||
@login_required
|
||||
@user_passes_test(lambda u: u.is_superuser)
|
||||
def configuration(request: HttpRequest) -> HttpResponse:
|
||||
switches = {
|
||||
"enable_teams": Switch.objects.get_or_create(name="TF_TEAMS", defaults={"active": False})[0],
|
||||
"enable_activities": Switch.objects.get_or_create(name="TF_ACTIVITIES", defaults={"active": False})[0],
|
||||
}
|
||||
|
||||
initial_data = {
|
||||
"club_name": config.TF_CLUB_NAME,
|
||||
"club_location": config.TF_CLUB_HOME,
|
||||
"club_logo": config.TF_CLUB_LOGO,
|
||||
"enable_teams": switches["enable_teams"].active,
|
||||
"enable_activities": switches["enable_activities"].active,
|
||||
}
|
||||
|
||||
form = ConfigurationForm(initial=initial_data)
|
||||
|
||||
if request.method == "POST":
|
||||
form = ConfigurationForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
config.TF_CLUB_NAME = form.cleaned_data["club_name"]
|
||||
config.TF_CLUB_HOME = form.cleaned_data["club_location"]
|
||||
|
||||
if form.cleaned_data["club_logo"] is not None:
|
||||
default_storage.save(str(Path(settings.STATIC_ROOT) / form.cleaned_data["club_logo"].name), form.cleaned_data["club_logo"])
|
||||
config.TF_CLUB_LOGO = form.cleaned_data["club_logo"].name
|
||||
|
||||
for switch_key in switches.keys():
|
||||
if switches[switch_key].active != form.cleaned_data[switch_key]:
|
||||
switches[switch_key].active = form.cleaned_data[switch_key]
|
||||
|
||||
Switch.objects.bulk_update(switches.values(), ["active"])
|
||||
cache.clear()
|
||||
|
||||
messages.success(request=request, message=_("Settings have been saved successfully"))
|
||||
|
||||
return render(request, "backend/configuration.html", {"form": form})
|
||||
|
||||
Reference in New Issue
Block a user