123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- from django.core.urlresolvers import reverse
- from django.shortcuts import redirect
- from django.template import RequestContext
- from django.utils.translation import ungettext, ugettext as _
- from misago.forms import Form, FormLayout, FormFields
- from misago.messages import Message
- from misago.search import SearchQuery, SearchException
- from misago.models import SettingsGroup, Setting
- from misago.core.views import error404
- from misago.core.admin.settings.forms import SearchForm
- def settings(request, group_id=None, group_slug=None):
- # Load groups and find selected group
- settings_groups = SettingsGroup.objects.all().order_by('key')
- if not group_id:
- active_group = settings_groups[0]
- group_id = active_group.pk
- else:
- group_id = int(group_id)
- for group in settings_groups:
- if group.pk == group_id:
- active_group = group
- break
- else:
- return error404(request, _('The requested settings group could not be found.'))
- # Load selected group settings and turn them into form
- group_settings = Setting.objects.filter(group=active_group).order_by('position')
- last_fieldset = (None, [])
- group_form = {'layout': []}
- for setting in group_settings:
- # New field subgroup?
- if setting.separator and last_fieldset[0] != setting.separator:
- if last_fieldset[0]:
- group_form['layout'].append(last_fieldset)
- last_fieldset = (_(setting.separator), [])
- last_fieldset[1].append(setting.pk)
- group_form[setting.pk] = setting.get_field()
- group_form['layout'].append(last_fieldset)
- SettingsGroupForm = type('SettingsGroupForm', (Form,), group_form)
- #Submit form
- message = request.messages.get_message('admin_settings')
- if request.method == 'POST':
- form = SettingsGroupForm(request.POST, request=request)
- if form.is_valid():
- for setting in form.cleaned_data.keys():
- request.settings[setting] = form.cleaned_data[setting]
- request.messages.set_flash(Message(_('Configuration have been saved.')), 'success', 'admin_settings')
- return redirect(reverse('admin_settings', kwargs={
- 'group_id': active_group.pk,
- 'group_slug': active_group.key,
- }))
- else:
- message = Message(form.non_field_errors()[0], 'error')
- else:
- form = SettingsGroupForm(request=request)
- # Display settings group form
- return request.theme.render_to_response('settings/settings.html',
- {
- 'message': message,
- 'groups': settings_groups,
- 'active_group': active_group,
- 'search_form': FormFields(SearchForm(request=request)),
- 'form': FormLayout(form),
- 'raw_form': form,
- },
- context_instance=RequestContext(request));
- def settings_search(request):
- settings_groups = SettingsGroup.objects.all().order_by('key')
- message = None
- found_settings = []
- try:
- if request.method == 'POST' and request.csrf.request_secure(request):
- form = SearchForm(request.POST, request=request)
- if form.is_valid():
- # Start search
- search_strings = SearchQuery(form.cleaned_data['search_text'])
- # Loop over groups using our search query
- for setting in Setting.objects.all().order_by('setting'):
- if (search_strings.search(_(setting.name))
- or (setting.description and search_strings.search(_(setting.description)))
- or (setting.value and search_strings.search(setting.value))):
- found_settings.append(setting)
- # Scream if nothing could be found
- if found_settings:
- message = Message(ungettext(
- 'One setting that match search criteria has been found.',
- '%(count)d settings that match search criteria have been found.',
- len(found_settings)) % {
- 'count': len(found_settings),
- }, 'success')
- else:
- raise SearchException(_('No settings that match search criteria has been found.'))
- else:
- raise SearchException(_('Search query is empty.'))
- else:
- raise SearchException(_('Search query is invalid.'))
- except SearchException as e:
- message = Message(e.message, 'error')
- return request.theme.render_to_response('settings/search_results.html',
- {
- 'message': message,
- 'groups': settings_groups,
- 'active_group': None,
- 'found_settings': found_settings,
- 'search_form': FormFields(form),
- },
- context_instance=RequestContext(request));
|