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 from misago.forms.layouts import FormLayout, FormFields from misago.messages import Message, BasicMessage from misago.search import SearchQuery, SearchException from misago.settings.admin.forms import SearchForm from misago.settings.models import Group, Setting from misago.views import error404 def settings(request, group_id=None, group_slug=None): # Load groups and find selected group settings_groups = Group.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, BasicMessage(_('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(BasicMessage(_('Configuration has been saved.')), 'success', 'admin_settings') return redirect(reverse('admin_settings', kwargs={ 'group_id': active_group.pk, 'group_slug': active_group.key, })) else: message = Message(request, form.non_field_errors()[0]) message.type = '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 = Group.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 = BasicMessage(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 = BasicMessage(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));