|
@@ -0,0 +1,114 @@
|
|
|
|
+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));
|