def _clear_preview_language(self, request, context): """ Clears the dark language preview Arguments: request (Request): The incoming Django Request context dict: The basic context for the Response Returns: HttpResponse: View containing the form for setting the preview lang with the status included in the context """ # delete the session language key (if one is set) if LANGUAGE_SESSION_KEY in request.session: del request.session[LANGUAGE_SESSION_KEY] user_pref = '' auth_user = request.user if auth_user: # Reset user's dark lang preference to null delete_user_preference(auth_user, DARK_LANGUAGE_KEY) # Get & set user's preferred language user_pref = get_user_preference(auth_user, LANGUAGE_KEY) if user_pref: request.session[LANGUAGE_SESSION_KEY] = user_pref if user_pref is None: message = _('Language reset to the default language code') else: message = _("Language reset to user's preference: {preview_language_code}").format( preview_language_code=user_pref ) context.update({'form_submit_message': message}) context.update({'success': True}) return render_to_response(self.template_name, context)
def set_user_preview_site_theme(request, preview_site_theme): """ Sets the current user's preferred preview site theme. Args: request: the current request preview_site_theme (str or SiteTheme): the preview site theme or theme name. None can be specified to remove the preview site theme. """ if preview_site_theme: if isinstance(preview_site_theme, SiteTheme): preview_site_theme_name = preview_site_theme.theme_dir_name else: preview_site_theme_name = preview_site_theme if theme_exists(preview_site_theme_name): set_user_preference(request.user, PREVIEW_SITE_THEME_PREFERENCE_KEY, preview_site_theme_name) PageLevelMessages.register_success_message( request, _(u'Site theme changed to {site_theme}').format( site_theme=preview_site_theme_name)) else: PageLevelMessages.register_error_message( request, _(u'Theme {site_theme} does not exist').format( site_theme=preview_site_theme_name)) else: delete_user_preference(request.user, PREVIEW_SITE_THEME_PREFERENCE_KEY) PageLevelMessages.register_success_message( request, _('Site theme reverted to the default'))
def _activate_preview_language(self, request): """ If the request has the get parameter ``preview-lang``, and that language doesn't appear in ``self.released_langs``, 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: request.session[LANGUAGE_SESSION_KEY] = user_pref elif LANGUAGE_SESSION_KEY in request.session: del request.session[LANGUAGE_SESSION_KEY] 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)
def test_preference_setting_changes_cookie(self, lang_pref_out): """ Test that the LANGUAGE_COOKIE is always set to the user's current language preferences at the end of the request, with an expiry that's the same as the users current session cookie. """ if lang_pref_out: set_user_preference(self.user, LANGUAGE_KEY, lang_pref_out) else: delete_user_preference(self.user, LANGUAGE_KEY) response = mock.Mock(spec=HttpResponse) self.middleware.process_response(self.request, response) if lang_pref_out: response.set_cookie.assert_called_with( settings.LANGUAGE_COOKIE, value=lang_pref_out, domain=settings.SESSION_COOKIE_DOMAIN, max_age=COOKIE_DURATION, secure=self.request.is_secure(), ) else: response.delete_cookie.assert_called_with( settings.LANGUAGE_COOKIE, domain=settings.SESSION_COOKIE_DOMAIN, ) assert LANGUAGE_SESSION_KEY not in self.request.session
def process_request(self, request): """ If a user's UserPreference contains a language preference, use the user's preference. """ languages = released_languages() system_released_languages = [seq[0] for seq in languages] # If the user is logged in, check for their language preference if request.user.is_authenticated(): # Get the user's language preference user_pref = get_user_preference(request.user, LANGUAGE_KEY) # Set it to the LANGUAGE_SESSION_KEY (Django-specific session setting governing language pref) if user_pref: if user_pref in system_released_languages: request.session[LANGUAGE_SESSION_KEY] = user_pref else: delete_user_preference(request.user, LANGUAGE_KEY) else: preferred_language = request.META.get('HTTP_ACCEPT_LANGUAGE', '') lang_headers = [ seq[0] for seq in parse_accept_lang_header(preferred_language) ] # Setting the session language to the browser language, if it is supported. for browser_lang in lang_headers: if browser_lang in system_released_languages: if request.session.get(LANGUAGE_SESSION_KEY, None) is None: request.session[LANGUAGE_SESSION_KEY] = unicode( browser_lang) break
def set_user_preview_site_theme(request, preview_site_theme): """ Sets the current user's preferred preview site theme. Args: request: the current request preview_site_theme (str or SiteTheme): the preview site theme or theme name. None can be specified to remove the preview site theme. """ if preview_site_theme: if isinstance(preview_site_theme, SiteTheme): preview_site_theme_name = preview_site_theme.theme_dir_name else: preview_site_theme_name = preview_site_theme if theme_exists(preview_site_theme_name): set_user_preference(request.user, PREVIEW_SITE_THEME_PREFERENCE_KEY, preview_site_theme_name) PageLevelMessages.register_success_message( request, _('Site theme changed to {site_theme}'.format(site_theme=preview_site_theme_name)) ) else: PageLevelMessages.register_error_message( request, _('Theme {site_theme} does not exist'.format(site_theme=preview_site_theme_name)) ) else: delete_user_preference(request.user, PREVIEW_SITE_THEME_PREFERENCE_KEY) PageLevelMessages.register_success_message(request, _('Site theme reverted to the default'))
def _clear_preview_language(self, request, context): """ Clears the dark language preview Arguments: request (Request): The incoming Django Request context dict: The basic context for the Response Returns: HttpResponse: View containing the form for setting the preview lang with the status included in the context """ # delete the session language key (if one is set) if LANGUAGE_SESSION_KEY in request.session: del request.session[LANGUAGE_SESSION_KEY] user_pref = '' auth_user = request.user if auth_user: # Reset user's dark lang preference to null delete_user_preference(auth_user, DARK_LANGUAGE_KEY) # Get & set user's preferred language user_pref = get_user_preference(auth_user, LANGUAGE_KEY) if user_pref: request.session[LANGUAGE_SESSION_KEY] = user_pref if user_pref is None: message = _('Language reset to the default language code') else: message = _( "Language reset to user's preference: {preview_language_code}" ).format(preview_language_code=user_pref) context.update({'form_submit_message': message}) context.update({'success': True}) return render_to_response(self.template_name, context)
def process_request(self, request): """ If a user's UserPreference contains a language preference, use the user's preference. """ languages = released_languages() system_released_languages = [seq[0] for seq in languages] # If the user is logged in, check for their language preference if request.user.is_authenticated(): # Get the user's language preference user_pref = get_user_preference(request.user, LANGUAGE_KEY) # Set it to the LANGUAGE_SESSION_KEY (Django-specific session setting governing language pref) if user_pref: if user_pref in system_released_languages: request.session[LANGUAGE_SESSION_KEY] = user_pref else: delete_user_preference(request.user, LANGUAGE_KEY) else: preferred_language = request.META.get("HTTP_ACCEPT_LANGUAGE", "") lang_headers = [seq[0] for seq in parse_accept_lang_header(preferred_language)] # Setting the session language to the browser language, if it is supported. for browser_lang in lang_headers: if browser_lang in system_released_languages: if request.session.get(LANGUAGE_SESSION_KEY, None) is None: request.session[LANGUAGE_SESSION_KEY] = unicode(browser_lang) break
def test_preference_setting_changes_cookie(self, lang_pref_out): """ Test that the LANGUAGE_COOKIE is always set to the user's current language preferences at the end of the request, with an expiry that's the same as the users current session cookie. """ if lang_pref_out: set_user_preference(self.user, LANGUAGE_KEY, lang_pref_out) else: delete_user_preference(self.user, LANGUAGE_KEY) response = mock.Mock(spec=HttpResponse) self.middleware.process_response(self.request, response) if lang_pref_out: response.set_cookie.assert_called_with( settings.LANGUAGE_COOKIE, value=lang_pref_out, domain=settings.SESSION_COOKIE_DOMAIN, max_age=COOKIE_DURATION, ) else: response.delete_cookie.assert_called_with( settings.LANGUAGE_COOKIE, domain=settings.SESSION_COOKIE_DOMAIN, ) self.assertNotIn(LANGUAGE_SESSION_KEY, self.request.session)
def _clear_preview_language(self, request): """ Clears the preview language for the current user. """ delete_user_preference(request.user, DARK_LANGUAGE_KEY) if LANGUAGE_SESSION_KEY in request.session: del request.session[LANGUAGE_SESSION_KEY] PageLevelMessages.register_success_message( request, _('Language reset to the default'))
def _clear_preview_language(self, request): """ Clears the preview language for the current user. """ delete_user_preference(request.user, DARK_LANGUAGE_KEY) if LANGUAGE_SESSION_KEY in request.session: del request.session[LANGUAGE_SESSION_KEY] PageLevelMessages.register_success_message( request, _('Language reset to the default') )
def ajax_disable(request): """ A view that disables notifications for the authenticated user This view should be invoked by an AJAX POST call. It returns status 204 (no content) or an error. """ if not request.user.is_authenticated: raise PermissionDenied delete_user_preference(request.user, NOTIFICATION_PREF_KEY) return HttpResponse(status=204)
def ajax_disable(request): """ A view that disables notifications for the authenticated user This view should be invoked by an AJAX POST call. It returns status 204 (no content) or an error. """ if not request.user.is_authenticated(): raise PermissionDenied delete_user_preference(request.user, NOTIFICATION_PREF_KEY) return HttpResponse(status=204)
def test_preference_cookie_changes_setting(self, lang_cookie, lang_pref_in, mock_set_user_preference): self.request.COOKIES[settings.LANGUAGE_COOKIE] = lang_cookie if lang_pref_in: set_user_preference(self.user, LANGUAGE_KEY, lang_pref_in) else: delete_user_preference(self.user, LANGUAGE_KEY) self.middleware.process_request(self.request) if lang_cookie is None: self.assertEqual(mock_set_user_preference.mock_calls, []) else: mock_set_user_preference.assert_called_with(self.user, LANGUAGE_KEY, lang_cookie)
def process_request(self, request): languages = released_languages() system_released_languages = [seq[0] for seq in languages] # If the user is logged in, check for their language preference if request.user.is_authenticated(): # Get the user's language preference user_pref = get_user_preference(request.user, LANGUAGE_KEY) # Set it to the LANGUAGE_SESSION_KEY (Django-specific session setting governing language pref) if user_pref: if user_pref in system_released_languages: request.session[LANGUAGE_SESSION_KEY] = user_pref else: delete_user_preference(request.user, LANGUAGE_KEY) else: check = False current_microsite = configuration_helpers.get_value( 'language_code') if current_microsite or current_microsite != '': Language = namedtuple('Language', 'code name') request.session[LANGUAGE_SESSION_KEY] = unicode( current_microsite) check = True if not check: preferred_language = request.META.get('HTTP_ACCEPT_LANGUAGE', '') lang_headers = [ seq[0] for seq in parse_accept_lang_header(preferred_language) ] prefixes = [ prefix.split("-")[0] for prefix in system_released_languages ] # Setting the session language to the browser language, if it is supported. for browser_lang in lang_headers: if browser_lang in system_released_languages: pass elif browser_lang in prefixes: browser_lang = system_released_languages[ prefixes.index(browser_lang)] else: continue if request.session.get(LANGUAGE_SESSION_KEY, None) is None: request.session[LANGUAGE_SESSION_KEY] = unicode( browser_lang) break
def process_request(self, request): """ If a user's UserPreference contains a language preference, use the user's preference. """ languages = released_languages() system_released_languages = [seq[0] for seq in languages] # If the user is logged in, check for their language preference if request.user.is_authenticated(): # Get the user's language preference user_pref = get_user_preference(request.user, LANGUAGE_KEY) # Set it to the LANGUAGE_SESSION_KEY (Django-specific session setting governing language pref) if user_pref: if user_pref in system_released_languages: request.session[LANGUAGE_SESSION_KEY] = user_pref else: delete_user_preference(request.user, LANGUAGE_KEY)
def _activate_preview_language(self, request): """ If the request has the get parameter ``preview-lang``, and that language doesn't appear in ``self.released_langs``, then set the session LANGUAGE_SESSION_KEY to that language. """ auth_user = request.user.is_authenticated() if 'clear-lang' in request.GET: # delete the session language key (if one is set) if LANGUAGE_SESSION_KEY in request.session: del request.session[LANGUAGE_SESSION_KEY] if auth_user: # Reset user's dark lang preference to null delete_user_preference(request.user, DARK_LANGUAGE_KEY) # Get & set user's preferred language user_pref = get_user_preference(request.user, LANGUAGE_KEY) if user_pref: request.session[LANGUAGE_SESSION_KEY] = user_pref return # Get the user's preview lang - this is either going to be set from a query # param `?preview-lang=xx`, or we may have one already set as a dark lang preference. preview_lang = request.GET.get('preview-lang', None) if not preview_lang and auth_user: # Get the request user's dark lang preference preview_lang = get_user_preference(request.user, DARK_LANGUAGE_KEY) # User doesn't have a dark lang preference, so just return if not preview_lang: return # Set the session key to the requested preview lang request.session[LANGUAGE_SESSION_KEY] = preview_lang # Make sure that we set the requested preview lang as the dark lang preference for the # user, so that the lang_pref middleware doesn't clobber away the dark lang preview. if auth_user: set_user_preference(request.user, DARK_LANGUAGE_KEY, preview_lang)
def test_user_without_preference_receives_email_in_french(self): delete_user_preference(self.student, LANGUAGE_KEY) self.update_enrollement("enroll", self.student.email) self.check_outbox_is_french()
def test_user_without_preference_receives_email_in_esperanto(self): delete_user_preference(self.student, LANGUAGE_KEY) self.update_enrollement("enroll", self.student.email) self.check_outbox_is_esperanto()