import pytz from django.db import transaction from django.shortcuts import render, redirect from django.utils import timezone from boards.abstracts.settingsmanager import get_settings_manager, \ SETTING_USERNAME, SETTING_LAST_NOTIFICATION_ID from boards.views.base import BaseBoardView, CONTEXT_FORM from boards.forms import SettingsForm, PlainErrorList FORM_THEME = 'theme' FORM_USERNAME = 'username' FORM_TIMEZONE = 'timezone' CONTEXT_HIDDEN_TAGS = 'hidden_tags' TEMPLATE = 'boards/settings.html' class SettingsView(BaseBoardView): def get(self, request): params = dict() settings_manager = get_settings_manager(request) selected_theme = settings_manager.get_theme() form = SettingsForm( initial={ FORM_THEME: selected_theme, FORM_USERNAME: settings_manager.get_setting(SETTING_USERNAME), FORM_TIMEZONE: request.session.get('django_timezone', timezone.get_current_timezone()), }, error_class=PlainErrorList) params[CONTEXT_FORM] = form params[CONTEXT_HIDDEN_TAGS] = settings_manager.get_hidden_tags() return render(request, TEMPLATE, params) def post(self, request): settings_manager = get_settings_manager(request) with transaction.atomic(): form = SettingsForm(request.POST, error_class=PlainErrorList) if form.is_valid(): selected_theme = form.cleaned_data[FORM_THEME] username = form.cleaned_data[FORM_USERNAME].lower() settings_manager.set_theme(selected_theme) old_username = settings_manager.get_setting(SETTING_USERNAME) if username != old_username: settings_manager.set_setting(SETTING_USERNAME, username) settings_manager.set_setting(SETTING_LAST_NOTIFICATION_ID, None) request.session['django_timezone'] = form.cleaned_data[FORM_TIMEZONE] return redirect('settings') else: params = dict() params[CONTEXT_FORM] = form params[CONTEXT_HIDDEN_TAGS] = settings_manager.get_hidden_tags() return render(request, TEMPLATE, params)