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})