views.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. def index(request):
  8. return render(request, "misago/admin/conf/index.html")
  9. class ChangeSettingsView(AdminView):
  10. root_link = None # Unused by change config views
  11. template_name = None
  12. form = None
  13. def final_template(self):
  14. return self.template_name
  15. def dispatch(self, request, *args, **kwargs):
  16. settings = self.get_settings(self.form.settings)
  17. initial = self.get_initial_form_data(settings)
  18. form = self.form(initial=initial)
  19. if request.method == "POST":
  20. form = self.form(request.POST, request.FILES, initial=initial)
  21. if form.is_valid():
  22. form.save(settings)
  23. messages.success(request, _("Changes in settings have been saved!"))
  24. return redirect(request.path_info)
  25. return self.render(request, {"form": form})
  26. def get_settings(self, settings):
  27. settings_dict = {}
  28. for setting in Setting.objects.filter(setting__in=settings):
  29. settings_dict[setting.setting] = setting
  30. if len(settings_dict) != len(settings):
  31. not_found_settings = list(set(settings_dict.keys()) - set(settings))
  32. raise ValueError(
  33. "Some of settings defined in form could not be found: "
  34. ", ".join(not_found_settings)
  35. )
  36. return settings_dict
  37. def get_initial_form_data(self, settings):
  38. return {key: setting.value for key, setting in settings.items()}