views.py 5.7 KB

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