views.py 5.7 KB

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