views.py 2.4 KB

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