views.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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, 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. print 'SET: %s' % setting
  49. misago_settings[setting] = form.cleaned_data[setting]
  50. cache.delete('settings')
  51. request.messages.set_flash(Message(_('Configuration has been changed.')), 'success', 'admin_settings')
  52. return redirect(reverse('admin_settings', kwargs={
  53. 'group_id': active_group.pk,
  54. 'group_slug': active_group.key,
  55. }))
  56. else:
  57. message = Message(form.non_field_errors()[0], 'error')
  58. else:
  59. form = SettingsGroupForm(request=request)
  60. # Display settings group form
  61. return render_to_response('settings/settings.html',
  62. {
  63. 'message': message,
  64. 'groups': settings_groups,
  65. 'active_group': active_group,
  66. 'search_form': FormFields(SearchForm(request=request)),
  67. 'form': FormLayout(form),
  68. 'raw_form': form,
  69. },
  70. context_instance=RequestContext(request));
  71. def settings_search(request):
  72. settings_groups = SettingsGroup.objects.all().order_by('key')
  73. message = None
  74. found_settings = []
  75. try:
  76. if request.method == 'POST' and request.csrf.request_secure(request):
  77. form = SearchForm(request.POST, request=request)
  78. if form.is_valid():
  79. # Start search
  80. search_strings = SearchQuery(form.cleaned_data['search_text'])
  81. # Loop over groups using our search query
  82. for setting in Setting.objects.all().order_by('setting'):
  83. if (search_strings.search(_(setting.name))
  84. or (setting.description and search_strings.search(_(setting.description)))
  85. or (setting.value and search_strings.search(setting.value))):
  86. found_settings.append(setting)
  87. # Scream if nothing could be found
  88. if found_settings:
  89. message = Message(ungettext(
  90. 'One setting that matches search criteria has been found.',
  91. '%(count)d settings that match search criteria have been found.',
  92. len(found_settings)) % {
  93. 'count': len(found_settings),
  94. }, 'success')
  95. else:
  96. raise SearchException(_('No settings that match search criteria have been found.'))
  97. else:
  98. raise SearchException(_('Search query is empty.'))
  99. else:
  100. raise SearchException(_('Search query is invalid.'))
  101. except SearchException as e:
  102. message = Message(unicode(e), 'error')
  103. return render_to_response('settings/search_results.html',
  104. {
  105. 'message': message,
  106. 'groups': settings_groups,
  107. 'active_group': None,
  108. 'found_settings': found_settings,
  109. 'search_form': FormFields(form),
  110. },
  111. context_instance=RequestContext(request));