From 9e4e8682dbe7dade0f34f254f7ddac3e3d5a27ce Mon Sep 17 00:00:00 2001 From: Nicolas Simonds Date: Fri, 13 Sep 2013 17:25:02 -0700 Subject: [PATCH] Store user settings in persistent cookies as well as the session This should keep international users from having to reset their language preferences every time they login. Fixes Bug: 1225250 Change-Id: I093e7a98085bf83890b295ec4a61f839b60db4db --- .../dashboards/settings/user/forms.py | 14 ++++++++++++-- .../dashboards/settings/user/views.py | 14 +++++++++++--- openstack_dashboard/settings.py | 1 + 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/openstack_dashboard/dashboards/settings/user/forms.py b/openstack_dashboard/dashboards/settings/user/forms.py index 634e0d185f..993a35c55a 100644 --- a/openstack_dashboard/dashboards/settings/user/forms.py +++ b/openstack_dashboard/dashboards/settings/user/forms.py @@ -26,6 +26,12 @@ from horizon import forms from horizon import messages +def _one_year(): + now = datetime.utcnow() + return datetime(now.year + 1, now.month, now.day, now.hour, + now.minute, now.second, now.microsecond, now.tzinfo) + + class UserSettingsForm(forms.SelfHandlingForm): language = forms.ChoiceField(label=_("Language")) timezone = forms.ChoiceField(label=_("Timezone")) @@ -71,14 +77,18 @@ class UserSettingsForm(forms.SelfHandlingForm): if lang_code and translation.check_for_language(lang_code): if hasattr(request, 'session'): request.session['django_language'] = lang_code - else: - response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code) + response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code, + expires=_one_year()) # Timezone request.session['django_timezone'] = pytz.timezone( data['timezone']).zone + response.set_cookie('django_timezone', data['timezone'], + expires=_one_year()) request.session['horizon_pagesize'] = data['pagesize'] + response.set_cookie('horizon_pagesize', data['pagesize'], + expires=_one_year()) messages.success(request, _("Settings saved.")) diff --git a/openstack_dashboard/dashboards/settings/user/views.py b/openstack_dashboard/dashboards/settings/user/views.py index a310253375..dd4bd82795 100644 --- a/openstack_dashboard/dashboards/settings/user/views.py +++ b/openstack_dashboard/dashboards/settings/user/views.py @@ -25,11 +25,19 @@ class UserSettingsView(forms.ModalFormView): template_name = 'settings/user/settings.html' def get_initial(self): - return {'language': self.request.LANGUAGE_CODE, - 'timezone': self.request.session.get('django_timezone', 'UTC'), + return {'language': self.request.session.get( + settings.LANGUAGE_COOKIE_NAME, + self.request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME, + self.request.LANGUAGE_CODE)), + 'timezone': self.request.session.get( + 'django_timezone', + self.request.COOKIES.get('django_timezone', 'UTC')), 'pagesize': self.request.session.get( 'horizon_pagesize', - getattr(settings, 'API_RESULT_PAGE_SIZE', 20))} + self.request.COOKIES.get( + 'horizon_pagesize', + getattr(settings, + 'API_RESULT_PAGE_SIZE', 20)))} def form_valid(self, form): return form.handle(self.request, form.cleaned_data) diff --git a/openstack_dashboard/settings.py b/openstack_dashboard/settings.py index 325ea0e9e8..e2317e5b6e 100644 --- a/openstack_dashboard/settings.py +++ b/openstack_dashboard/settings.py @@ -198,6 +198,7 @@ LANGUAGES = ( ('zh-tw', gettext_noop('Traditional Chinese')), ) LANGUAGE_CODE = 'en' +LANGUAGE_COOKIE_NAME = 'horizon_language' USE_I18N = True USE_L10N = True USE_TZ = True