views.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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
  5. from ...admin.views.generic import AdminView
  6. from ..models import Setting
  7. from .forms import (
  8. ChangeCaptchaSettingsForm,
  9. ChangeGeneralSettingsForm,
  10. ChangeUsersSettingsForm,
  11. )
  12. def index(request):
  13. return render(request, "misago/admin/conf/index.html")
  14. class ChangeSettingsView(AdminView):
  15. root_link = None # Unused by change config views
  16. template_name = None
  17. form = None
  18. def final_template(self):
  19. return self.template_name
  20. def dispatch(self, request, *args, **kwargs):
  21. settings = self.get_settings(self.form.settings)
  22. initial = self.get_initial_form_data(settings)
  23. form = self.form(initial=initial)
  24. if request.method == "POST":
  25. form = self.form(request.POST, request.FILES, initial=initial)
  26. if form.is_valid():
  27. form.save(settings)
  28. messages.success(request, _("Changes in settings have been saved!"))
  29. return redirect(request.path_info)
  30. return self.render(request, {"form": form})
  31. def get_settings(self, form_settings):
  32. settings = {}
  33. for setting in Setting.objects.filter(setting__in=form_settings):
  34. settings[setting.setting] = setting
  35. if len(settings) != len(form_settings):
  36. not_found_settings = list(set(settings.keys()) - set(form_settings))
  37. raise ValueError(
  38. "Some of settings defined in form could not be found: "
  39. ", ".join(not_found_settings)
  40. )
  41. return settings
  42. def get_initial_form_data(self, settings):
  43. return {key: setting.value for key, setting in settings.items()}
  44. class ChangeCaptchaSettingsView(ChangeSettingsView):
  45. form = ChangeCaptchaSettingsForm
  46. template_name = "misago/admin/conf/captcha_settings.html"
  47. class ChangeGeneralSettingsView(ChangeSettingsView):
  48. form = ChangeGeneralSettingsForm
  49. template_name = "misago/admin/conf/general_settings.html"
  50. class ChangeUsersSettingsView(ChangeSettingsView):
  51. form = ChangeUsersSettingsForm
  52. template_name = "misago/admin/conf/users_settings.html"