views.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from django.contrib import messages
  2. from django.shortcuts import redirect
  3. from django.utils.translation import gettext as _
  4. from ..admin.views import render as mi_render
  5. from .cache import clear_settings_cache
  6. from .forms import ChangeSettingsForm
  7. from .models import SettingsGroup
  8. def render(request, template, context=None):
  9. context = context or {}
  10. context["settings_groups"] = SettingsGroup.objects.ordered_alphabetically()
  11. if not "active_group" in context:
  12. context["active_group"] = {"key": None}
  13. return mi_render(request, template, context)
  14. def index(request):
  15. return render(request, "misago/admin/conf/index.html")
  16. def group(request, key):
  17. try:
  18. active_group = SettingsGroup.objects.get(key=key)
  19. except SettingsGroup.DoesNotExist:
  20. messages.error(request, _("Settings group could not be found."))
  21. return redirect("misago:admin:system:settings:index")
  22. fieldsets = ChangeSettingsForm(group=active_group)
  23. if request.method == "POST":
  24. fieldsets = ChangeSettingsForm(request.POST, group=active_group)
  25. valid_fieldsets = len(
  26. [True for fieldset in fieldsets if fieldset["form"].is_valid()]
  27. )
  28. if len(fieldsets) == valid_fieldsets:
  29. new_values = {}
  30. for fieldset in fieldsets:
  31. new_values.update(fieldset["form"].cleaned_data)
  32. for setting in active_group.setting_set.all():
  33. setting.value = new_values[setting.setting]
  34. setting.save(update_fields=["dry_value"])
  35. clear_settings_cache()
  36. messages.success(request, _("Changes in settings have been saved!"))
  37. return redirect("misago:admin:system:settings:group", key=key)
  38. use_single_form_template = len(fieldsets) == 1 and not fieldsets[0]["legend"]
  39. return render(
  40. request,
  41. "misago/admin/conf/group.html",
  42. {
  43. "active_group": active_group,
  44. "fieldsets": fieldsets,
  45. "use_single_form_template": use_single_form_template,
  46. },
  47. )