From e485e5ee244f599cc35ab4253b283f273e73f7c6 Mon Sep 17 00:00:00 2001 From: Sarina Canelake Date: Fri, 26 Jun 2015 12:30:14 -0400 Subject: [PATCH] Dark language should stay set until explicitly cleared. Adds a temporary user_preference key, DARK_LANGUAGE_KEY, to hold the user's dark lang preference. This preference key is deleted when ?clear-lang is placed in query params. --- common/djangoapps/dark_lang/__init__.py | 3 +++ common/djangoapps/dark_lang/middleware.py | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/common/djangoapps/dark_lang/__init__.py b/common/djangoapps/dark_lang/__init__.py index d56fa38068..1e298276e0 100644 --- a/common/djangoapps/dark_lang/__init__.py +++ b/common/djangoapps/dark_lang/__init__.py @@ -17,3 +17,6 @@ Run migrations to install the configuration table. Use the admin site to add a new ``DarkLangConfig`` that is enabled, and lists the languages that should be released. """ + +# this is the UserPreference key for the currently-active dark language, if any +DARK_LANGUAGE_KEY = 'dark-lang' diff --git a/common/djangoapps/dark_lang/middleware.py b/common/djangoapps/dark_lang/middleware.py index 0f049d3e5e..2d37e4e316 100644 --- a/common/djangoapps/dark_lang/middleware.py +++ b/common/djangoapps/dark_lang/middleware.py @@ -12,8 +12,12 @@ the SessionMiddleware. """ from django.conf import settings +from dark_lang import DARK_LANGUAGE_KEY from dark_lang.models import DarkLangConfig -from openedx.core.djangoapps.user_api.preferences.api import get_user_preference +from openedx.core.djangoapps.user_api.preferences.api import ( + delete_user_preference, get_user_preference, set_user_preference +) +from openedx.core.djangoapps.user_api.errors import UserNotFound from lang_pref import LANGUAGE_KEY # TODO re-import this once we're on Django 1.5 or greater. [PLAT-671] @@ -130,6 +134,8 @@ class DarkLangMiddleware(object): then set the session LANGUAGE_SESSION_KEY to that language. """ if 'clear-lang' in request.GET: + # Reset dark lang + delete_user_preference(request.user, DARK_LANGUAGE_KEY) # Reset user's language to their language preference, if they have one user_pref = get_user_preference(request.user, LANGUAGE_KEY) if user_pref: @@ -139,8 +145,15 @@ class DarkLangMiddleware(object): return preview_lang = request.GET.get('preview-lang', None) + if not preview_lang: + try: + # Try to get the request user's preference (might not have a user, though) + preview_lang = get_user_preference(request.user, DARK_LANGUAGE_KEY) + except UserNotFound: + return if not preview_lang: return request.session[LANGUAGE_SESSION_KEY] = preview_lang + set_user_preference(request.user, DARK_LANGUAGE_KEY, preview_lang)