コード例 #1
0
ファイル: views.py プロジェクト: CraftAcademy/edx-platform
    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)
コード例 #2
0
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'))
コード例 #3
0
ファイル: middleware.py プロジェクト: lydia-lee/edx-platform
    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)
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
ファイル: views.py プロジェクト: cmscom/edx-platform
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'))
コード例 #7
0
    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)
コード例 #8
0
    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
コード例 #9
0
    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)
コード例 #10
0
 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'))
コード例 #11
0
ファイル: views.py プロジェクト: digitalsatori/edx-platform
 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')
     )
コード例 #12
0
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)
コード例 #13
0
ファイル: views.py プロジェクト: Lektorium-LLC/edx-platform
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)
コード例 #14
0
    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)
コード例 #15
0
    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)
コード例 #16
0
    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
コード例 #17
0
    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)
コード例 #18
0
ファイル: middleware.py プロジェクト: epixia/spark
    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)
コード例 #19
0
ファイル: middleware.py プロジェクト: 10clouds/edx-platform
    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)
コード例 #20
0
    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()
コード例 #21
0
    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()