views.py 5.6 KB

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