views.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. from django.core.cache import cache
  2. from django.core.urlresolvers import reverse
  3. from django.shortcuts import redirect
  4. from django.template import RequestContext
  5. from django.utils.translation import ungettext, ugettext as _
  6. from misago import messages
  7. from misago.conf import settings as misago_settings
  8. from misago.forms import Form, FormIterator
  9. from misago.messages import Message
  10. from misago.search import SearchQuery, SearchException
  11. from misago.models import SettingsGroup, Setting
  12. from misago.shortcuts import render_to_response
  13. from misago.apps.errors import error404
  14. from misago.apps.admin.settings.forms import SearchForm
  15. def settings(request, group_id=None, group_slug=None):
  16. # Load groups and find selected group
  17. settings_groups = SettingsGroup.objects.all().order_by('key')
  18. if not group_id:
  19. active_group = settings_groups[0]
  20. group_id = active_group.pk
  21. else:
  22. group_id = int(group_id)
  23. for group in settings_groups:
  24. if group.pk == group_id:
  25. active_group = group
  26. break
  27. else:
  28. return error404(request, _('Requested settings group could not be found.'))
  29. # Load selected group settings and turn them into form
  30. group_settings = Setting.objects.filter(group=active_group).order_by('position')
  31. last_fieldset = (None, [])
  32. group_form = {'fieldsets': []}
  33. for setting in group_settings:
  34. # New field subgroup?
  35. if setting.separator and last_fieldset[0] != setting.separator:
  36. if last_fieldset[0]:
  37. group_form['fieldsets'].append(last_fieldset)
  38. last_fieldset = (_(setting.separator), [])
  39. last_fieldset[1].append(setting.pk)
  40. group_form[setting.pk] = setting.get_field()
  41. group_form['fieldsets'].append(last_fieldset)
  42. SettingsGroupForm = type('SettingsGroupForm', (Form,), group_form)
  43. #Submit form
  44. message = messages.get_message(request, 'admin_settings')
  45. if request.method == 'POST':
  46. form = SettingsGroupForm(request.POST, request=request)
  47. if form.is_valid():
  48. for setting in form.cleaned_data.keys():
  49. misago_settings[setting] = form.cleaned_data[setting]
  50. cache.delete('settings')
  51. messages.success(request, _('Configuration has been changed.'), 'admin_settings')
  52. return redirect(reverse('admin_settings', kwargs={
  53. 'group_id': active_group.pk,
  54. 'group_slug': active_group.key,
  55. }))
  56. else:
  57. message = Message(form.non_field_errors()[0], messages.ERROR)
  58. else:
  59. form = SettingsGroupForm(request=request)
  60. # Display settings group form
  61. return render_to_response('settings/settings.html',
  62. {
  63. 'message': message,
  64. 'groups': settings_groups,
  65. 'active_group': active_group,
  66. 'search_form': SearchForm(request=request),
  67. 'form': FormIterator(form),
  68. 'raw_form': form,
  69. },
  70. context_instance=RequestContext(request));
  71. def settings_search(request):
  72. settings_groups = SettingsGroup.objects.all().order_by('key')
  73. message = None
  74. found_settings = []
  75. try:
  76. if request.method == 'POST' and request.csrf.request_secure(request):
  77. form = SearchForm(request.POST, request=request)
  78. if form.is_valid():
  79. # Start search
  80. search_strings = SearchQuery(form.cleaned_data['search_text'])
  81. # Loop over groups using our search query
  82. for setting in Setting.objects.all().order_by('setting'):
  83. if (search_strings.search(_(setting.name))
  84. or (setting.description and search_strings.search(_(setting.description)))
  85. or (setting.value and search_strings.search(setting.value))):
  86. found_settings.append(setting)
  87. # Scream if nothing could be found
  88. if found_settings:
  89. message = Message(ungettext(
  90. 'One setting that matches search criteria has been found.',
  91. '%(count)d settings that match search criteria have been found.',
  92. len(found_settings)) % {
  93. 'count': len(found_settings),
  94. }, messages.SUCCESS)
  95. else:
  96. raise SearchException(_('No settings that match search criteria have been found.'))
  97. else:
  98. raise SearchException(_('Search query is empty.'))
  99. else:
  100. raise SearchException(_('Search query is invalid.'))
  101. except SearchException as e:
  102. message = Message(unicode(e), messages.ERROR)
  103. return render_to_response('settings/search_results.html',
  104. {
  105. 'message': message,
  106. 'groups': settings_groups,
  107. 'active_group': None,
  108. 'found_settings': found_settings,
  109. 'search_form': form,
  110. },
  111. context_instance=RequestContext(request));