views.py 5.6 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
  7. from misago.forms import Form, FormLayout, FormFields
  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. 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': FormFields(SearchForm(request=request)),
  66. 'form': FormLayout(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));