views.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from django.contrib import messages
  2. from django.shortcuts import redirect
  3. from django.utils.translation import gettext as _
  4. from misago.admin.views import render as mi_render
  5. from . import db_settings
  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([True for fieldset in fieldsets if fieldset['form'].is_valid()])
  26. if len(fieldsets) == valid_fieldsets:
  27. new_values = {}
  28. for fieldset in fieldsets:
  29. new_values.update(fieldset['form'].cleaned_data)
  30. for setting in active_group.setting_set.all():
  31. setting.value = new_values[setting.setting]
  32. setting.save(update_fields=['dry_value'])
  33. db_settings.flush_cache()
  34. messages.success(request, _("Changes in settings have been saved!"))
  35. return redirect('misago:admin:system:settings:group', key=key)
  36. use_single_form_template = (len(fieldsets) == 1 and not fieldsets[0]['legend'])
  37. return render(
  38. request, 'misago/admin/conf/group.html', {
  39. 'active_group': active_group,
  40. 'fieldsets': fieldsets,
  41. 'use_single_form_template': use_single_form_template,
  42. }
  43. )