views.py 5.5 KB

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