コード例 #1
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
コード例 #2
0
ファイル: middleware.py プロジェクト: yewtzeee/edx-platform
    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
コード例 #3
0
ファイル: helpers.py プロジェクト: hetmantsev/edraak-platform
def is_enabled_language(lang):
    """
    Return True if lang in settings LANGUAGES
    """
    released_langs = released_languages()

    return lang in dict(released_langs)
コード例 #4
0
ファイル: test_views.py プロジェクト: mitocw/edx-platform
    def _verify_language_selector(self, content, selected_language):
        """ Verify that the language selector is present and correctly configured."""
        # Verify the selector is included
        self.assertIn('footer-language-selector', content)

        # Verify the correct language is selected
        self.assertIn('<option value="{}" selected="selected">'.format(selected_language), content)

        # Verify the language choices
        for language in released_languages():
            if language.code == selected_language:
                continue
            self.assertIn('<option value="{}">'.format(language.code), content)
コード例 #5
0
    def _verify_language_selector(self, content, selected_language):
        """ Verify that the language selector is present and correctly configured."""
        # Verify the selector is included
        self.assertIn('footer-language-selector', content)

        # Verify the correct language is selected
        self.assertIn('<option value="{}" selected="selected">'.format(selected_language), content)

        # Verify the language choices
        for language in released_languages():
            if language.code == selected_language:
                continue
            self.assertIn('<option value="{}">'.format(language.code), content)
コード例 #6
0
ファイル: test_api.py プロジェクト: jlrivera81/incr-228
 def test_released_languages(self, default_lang, languages,
                             dark_lang_released, expected_languages):
     """
     Tests for the released languages.
     """
     with override_settings(LANGUAGES=languages,
                            LANGUAGE_CODE=default_lang):
         user = User()
         user.save()
         DarkLangConfig(released_languages=', '.join(dark_lang_released),
                        changed_by=user,
                        enabled=True).save()
         released_languages = language_api.released_languages()
         self.assertEqual(released_languages, expected_languages)
コード例 #7
0
ファイル: test_api.py プロジェクト: mitocw/edx-platform
 def test_released_languages(self, default_lang, languages, dark_lang_released, expected_languages):
     """
     Tests for the released languages.
     """
     with override_settings(LANGUAGES=languages, LANGUAGE_CODE=default_lang):
         user = User()
         user.save()
         DarkLangConfig(
             released_languages=', '.join(dark_lang_released),
             changed_by=user,
             enabled=True
         ).save()
         released_languages = language_api.released_languages()
         self.assertEqual(released_languages, expected_languages)
コード例 #8
0
ファイル: test_views.py プロジェクト: uetuluk/edx-platform
    def _verify_language_selector(self, response, selected_language):
        """ Verify that the language selector is present and correctly configured."""
        # Verify the selector is included
        content = response.content.decode(response.charset)
        assert 'footer-language-selector' in content

        # Verify the correct language is selected
        assert f'<option value="{selected_language}" selected="selected">' in content

        # Verify the language choices
        for language in released_languages():
            if language.code == selected_language:
                continue
            assert f'<option value="{language.code}">' in content
コード例 #9
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
コード例 #10
0
def _get_closest_released_language(target):
    """
    Return the language code that most closely matches the target and is fully supported by the LMS, or None
    if there are no fully supported languages that match the target.
    """
    match = None
    languages = released_languages()

    for language in languages:
        if language.code == target:
            match = language.code
            break
        elif (match is None) and (language.code[:2] == target[:2]):
            match = language.code

    return match
コード例 #11
0
ファイル: test_api.py プロジェクト: jlrivera81/incr-228
    def test_beta_languages(self):
        """
        Tests for the beta languages.
        """
        with override_settings(LANGUAGES=[EN, ES_419, LT_LT],
                               LANGUAGE_CODE='en'):
            user = User()
            user.save()
            DarkLangConfig(released_languages='es-419',
                           changed_by=user,
                           enabled=True,
                           beta_languages='lt-lt',
                           enable_beta_languages=True).save()

            released_languages = language_api.released_languages()
            expected_languages = [EN, ES_419, LT_LT]
            self.assertEqual(released_languages, expected_languages)
コード例 #12
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)
コード例 #13
0
ファイル: test_api.py プロジェクト: jolyonb/edx-platform
    def test_beta_languages(self):
        """
        Tests for the beta languages.
        """
        with override_settings(LANGUAGES=[EN, ES_419, LT_LT], LANGUAGE_CODE='en'):
            user = User()
            user.save()
            DarkLangConfig(
                released_languages='es-419',
                changed_by=user,
                enabled=True,
                beta_languages='lt-lt',
                enable_beta_languages=True
            ).save()

            released_languages = language_api.released_languages()
            expected_languages = [EN, ES_419, LT_LT]
            self.assertEqual(released_languages, expected_languages)
コード例 #14
0
def render_body(context,online_help_token,**pageargs):
    __M_caller = context.caller_stack._push_frame()
    try:
        __M_locals = __M_dict_builtin(pageargs=pageargs,online_help_token=online_help_token)
        csrf_token = context.get('csrf_token', UNDEFINED)
        context_course = context.get('context_course', UNDEFINED)
        context_library = context.get('context_library', UNDEFINED)
        current_url = context.get('current_url', UNDEFINED)
        get_online_help_info = context.get('get_online_help_info', UNDEFINED)
        dict = context.get('dict', UNDEFINED)
        len = context.get('len', UNDEFINED)
        unicode = context.get('unicode', UNDEFINED)
        LANGUAGE_CODE = context.get('LANGUAGE_CODE', UNDEFINED)
        static = _mako_get_namespace(context, 'static')
        user = context.get('user', UNDEFINED)
        __M_writer = context.writer()
        __M_writer(u'\n')
        __M_writer(u'\n')
        __M_writer(u'\n<div class="wrapper-header wrapper" id="view-top">\n  <header class="primary" role="banner">\n\n    <div class="wrapper wrapper-l">\n      <h1 class="branding">\n        <a class="brand-link" href="/">\n          <img class="brand-image" src="')
        __M_writer(filters.html_escape(filters.decode.utf8(static.url('images/studio-logo.png'))))
        __M_writer(u'" alt="')
        __M_writer(filters.html_escape(filters.decode.utf8(settings.STUDIO_NAME)))
        __M_writer(u'" />\n        </a>\n      </h1>\n\n')
        if context_course:
            __M_writer(u'      ')

            course_key = context_course.id
            index_url = reverse('course_handler', kwargs={'course_key_string': unicode(course_key)})
            course_team_url = reverse('course_team_handler', kwargs={'course_key_string': unicode(course_key)})
            assets_url = reverse('assets_handler', kwargs={'course_key_string': unicode(course_key)})
            textbooks_url = reverse('textbooks_list_handler', kwargs={'course_key_string': unicode(course_key)})
            videos_url = reverse('videos_handler', kwargs={'course_key_string': unicode(course_key)})
            import_url = reverse('import_handler', kwargs={'course_key_string': unicode(course_key)})
            course_info_url = reverse('course_info_handler', kwargs={'course_key_string': unicode(course_key)})
            export_url = reverse('export_handler', kwargs={'course_key_string': unicode(course_key)})
            settings_url = reverse('settings_handler', kwargs={'course_key_string': unicode(course_key)})
            grading_url = reverse('grading_handler', kwargs={'course_key_string': unicode(course_key)})
            advanced_settings_url = reverse('advanced_settings_handler', kwargs={'course_key_string': unicode(course_key)})
            tabs_url = reverse('tabs_handler', kwargs={'course_key_string': unicode(course_key)})
            certificates_url = ''
            if settings.FEATURES.get("CERTIFICATES_HTML_VIEW") and context_course.cert_html_view_enabled:
                certificates_url = reverse('certificates_list_handler', kwargs={'course_key_string': unicode(course_key)})
            checklists_url = reverse('checklists_handler', kwargs={'course_key_string': unicode(course_key)})
            
                  
            
            __M_locals_builtin_stored = __M_locals_builtin()
            __M_locals.update(__M_dict_builtin([(__M_key, __M_locals_builtin_stored[__M_key]) for __M_key in ['assets_url','index_url','import_url','course_team_url','course_key','export_url','settings_url','textbooks_url','course_info_url','certificates_url','checklists_url','videos_url','grading_url','advanced_settings_url','tabs_url'] if __M_key in __M_locals_builtin_stored]))
            __M_writer(u'\n      <h2 class="info-course">\n        <span class="sr">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Current Course:"))))
            __M_writer(u'</span>\n        <a class="course-link" href="')
            __M_writer(filters.html_escape(filters.decode.utf8(index_url)))
            __M_writer(u'">\n          <span class="course-org">')
            __M_writer(filters.html_escape(filters.decode.utf8(context_course.display_org_with_default)))
            __M_writer(u'</span><span class="course-number">')
            __M_writer(filters.html_escape(filters.decode.utf8(context_course.display_number_with_default)))
            __M_writer(u'</span>\n          <span class="course-title" title="')
            __M_writer(filters.html_escape(filters.decode.utf8(context_course.display_name_with_default)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(context_course.display_name_with_default)))
            __M_writer(u'</span>\n        </a>\n      </h2>\n\n      <nav class="nav-course nav-dd ui-left" aria-label="')
            __M_writer(filters.html_escape(filters.decode.utf8(_('Course'))))
            __M_writer(u'">\n        <h2 class="sr">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Course Navigation"))))
            __M_writer(u'</h2>\n        <ol>\n          <li class="nav-item nav-course-courseware">\n            <h3 class="title"><span class="label"><span class="label-prefix sr">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Course"))))
            __M_writer(u' </span>')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Content"))))
            __M_writer(u'</span> <span class="icon fa fa-caret-down ui-toggle-dd" aria-hidden="true"></span></h3>\n\n            <div class="wrapper wrapper-nav-sub">\n              <div class="nav-sub">\n                <ul>\n                  <li class="nav-item nav-course-courseware-outline">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(index_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Outline"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-courseware-updates">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(course_info_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Updates"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-courseware-pages">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(tabs_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Pages"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-courseware-uploads">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(assets_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Files & Uploads"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-courseware-textbooks">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(textbooks_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Textbooks"))))
            __M_writer(u'</a>\n                  </li>\n')
            if context_course.video_pipeline_configured:
                __M_writer(u'                  <li class="nav-item nav-course-courseware-videos">\n                    <a href="')
                __M_writer(filters.html_escape(filters.decode.utf8(videos_url)))
                __M_writer(u'">')
                __M_writer(filters.html_escape(filters.decode.utf8(_("Video Uploads"))))
                __M_writer(u'</a>\n                  </li>\n')
            __M_writer(u'                </ul>\n              </div>\n            </div>\n          </li>\n\n          <li class="nav-item nav-course-settings">\n            <h3 class="title"><span class="label"><span class="label-prefix sr">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Course"))))
            __M_writer(u' </span>')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Settings"))))
            __M_writer(u'</span> <span class="icon fa fa-caret-down ui-toggle-dd" aria-hidden="true"></span></h3>\n\n            <div class="wrapper wrapper-nav-sub">\n              <div class="nav-sub">\n                <ul>\n                  <li class="nav-item nav-course-settings-schedule">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(settings_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Schedule & Details"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-settings-grading">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(grading_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Grading"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-settings-team">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(course_team_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Course Team"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-settings-group-configurations">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(reverse('group_configurations_list_handler', kwargs={'course_key_string': unicode(course_key)}))))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Group Configurations"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-settings-advanced">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(advanced_settings_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Advanced Settings"))))
            __M_writer(u'</a>\n                  </li>\n')
            if certificates_url:
                __M_writer(u'                  <li class="nav-item nav-course-settings-certificates">\n                    <a href="')
                __M_writer(filters.html_escape(filters.decode.utf8(certificates_url)))
                __M_writer(u'">')
                __M_writer(filters.html_escape(filters.decode.utf8(_("Certificates"))))
                __M_writer(u'</a>\n                  </li>\n')
            __M_writer(u'                </ul>\n              </div>\n            </div>\n          </li>\n\n          <li class="nav-item nav-course-tools">\n            <h3 class="title"><span class="label">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Tools"))))
            __M_writer(u'</span> <span class="icon fa fa-caret-down ui-toggle-dd" aria-hidden="true"></span></h3>\n            <div class="wrapper wrapper-nav-sub">\n              <div class="nav-sub">\n                <ul>\n                  <li class="nav-item nav-course-tools-import">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(import_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Import"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-tools-export">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(export_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Export"))))
            __M_writer(u'</a>\n                  </li>\n')
            if settings.FEATURES.get('ENABLE_EXPORT_GIT') and context_course.giturl:
                __M_writer(u'                  <li class="nav-item nav-course-tools-export-git">\n                    <a href="')
                __M_writer(filters.html_escape(filters.decode.utf8(reverse('export_git', kwargs=dict(course_key_string=unicode(course_key))))))
                __M_writer(u'">')
                __M_writer(filters.html_escape(filters.decode.utf8(_("Export to Git"))))
                __M_writer(u'</a>\n                  </li>\n')
            __M_writer(u'                  <li class="nav-item nav-course-tools-checklists">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(checklists_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Checklists"))))
            __M_writer(u'</a>\n                  </li>\n                </ul>\n              </div>\n            </div>\n          </li>\n        </ol>\n      </nav>\n')
        elif context_library:
            __M_writer(u'       ')

            library_key = context_library.location.course_key
            index_url = reverse('library_handler', kwargs={'library_key_string': unicode(library_key)})
            import_url = reverse('import_handler', kwargs={'course_key_string': unicode(library_key)})
            lib_users_url = reverse('manage_library_users', kwargs={'library_key_string': unicode(library_key)})
            export_url = reverse('export_handler', kwargs={'course_key_string': unicode(library_key)})
                  
            
            __M_locals_builtin_stored = __M_locals_builtin()
            __M_locals.update(__M_dict_builtin([(__M_key, __M_locals_builtin_stored[__M_key]) for __M_key in ['library_key','import_url','lib_users_url','export_url','index_url'] if __M_key in __M_locals_builtin_stored]))
            __M_writer(u'\n      <h2 class="info-course">\n        <span class="sr">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Current Library:"))))
            __M_writer(u'</span>\n        <a class="course-link" href="')
            __M_writer(filters.html_escape(filters.decode.utf8(index_url)))
            __M_writer(u'">\n          <span class="course-org">')
            __M_writer(filters.html_escape(filters.decode.utf8(context_library.display_org_with_default)))
            __M_writer(u'</span><span class="course-number">')
            __M_writer(filters.html_escape(filters.decode.utf8(context_library.display_number_with_default)))
            __M_writer(u'</span>\n          <span class="course-title" title="')
            __M_writer(filters.html_escape(filters.decode.utf8(context_library.display_name_with_default)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(context_library.display_name_with_default)))
            __M_writer(u'</span>\n        </a>\n      </h2>\n\n      <nav class="nav-course nav-dd ui-left" aria-label="')
            __M_writer(filters.html_escape(filters.decode.utf8(_('Course'))))
            __M_writer(u'">\n        <h2 class="sr">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Course Navigation"))))
            __M_writer(u'</h2>\n        <ol>\n\n          <li class="nav-item nav-library-settings">\n            <h3 class="title"><span class="label"><span class="label-prefix sr">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Library"))))
            __M_writer(u' </span>')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Settings"))))
            __M_writer(u'</span> <span class="icon fa fa-caret-down ui-toggle-dd" aria-hidden="true"></span></h3>\n            <div class="wrapper wrapper-nav-sub">\n              <div class="nav-sub">\n                <ul>\n                  <li class="nav-item nav-library-settings-team">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(lib_users_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("User Access"))))
            __M_writer(u'</a>\n                  </li>\n                </ul>\n              </div>\n            </div>\n          </li>\n          <li class="nav-item nav-course-tools">\n            <h3 class="title"><span class="label">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Tools"))))
            __M_writer(u'</span> <span class="icon fa fa-caret-down ui-toggle-dd" aria-hidden="true"></span></h3>\n\n            <div class="wrapper wrapper-nav-sub">\n              <div class="nav-sub">\n                <ul>\n                  <li class="nav-item nav-course-tools-import">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(import_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Import"))))
            __M_writer(u'</a>\n                  </li>\n                  <li class="nav-item nav-course-tools-export">\n                    <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(export_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Export"))))
            __M_writer(u'</a>\n                  </li>\n                </ul>\n              </div>\n            </div>\n          </li>\n        </ol>\n      </nav>\n')
        __M_writer(u'    </div>\n\n    <div class="wrapper wrapper-r">\n')
        if header_language_selector_is_enabled():
            __M_writer(u'        ')
            languages = released_languages() 
            
            __M_locals_builtin_stored = __M_locals_builtin()
            __M_locals.update(__M_dict_builtin([(__M_key, __M_locals_builtin_stored[__M_key]) for __M_key in ['languages'] if __M_key in __M_locals_builtin_stored]))
            __M_writer(u'\n')
            if len(languages) > 1:
                __M_writer(u'        <nav class="user-language-selector" aria-label="')
                __M_writer(filters.html_escape(filters.decode.utf8(_('Language preference'))))
                __M_writer(u'">\n          <form action="/i18n/setlang/" method="post" class="settings-language-form" id="language-settings-form">\n              <input type="hidden" id="csrf_token" name="csrfmiddlewaretoken" value="')
                __M_writer(filters.html_escape(filters.decode.utf8(csrf_token)))
                __M_writer(u'">\n')
                if user.is_authenticated:
                    __M_writer(u'              <input title="preference api" type="hidden" id="preference-api-url" class="url-endpoint" value="')
                    __M_writer(filters.html_escape(filters.decode.utf8(reverse('preferences_api', kwargs={'username': user.username}))))
                    __M_writer(u'" data-user-is-authenticated="true">\n')
                else:
                    __M_writer(u'              <input title="session update url" type="hidden" id="update-session-url" class="url-endpoint" value="')
                    __M_writer(filters.html_escape(filters.decode.utf8(reverse('session_language'))))
                    __M_writer(u'" data-user-is-authenticated="false">\n')
                __M_writer(u'              <label><span class="sr">')
                __M_writer(filters.html_escape(filters.decode.utf8(_("Choose Language"))))
                __M_writer(u'</span>\n              <select class="input select language-selector" id="settings-language-value" name="language">\n')
                for language in languages:
                    if language[0] == LANGUAGE_CODE:
                        __M_writer(u'                 <option value="')
                        __M_writer(filters.html_escape(filters.decode.utf8(language[0])))
                        __M_writer(u'" selected="selected">')
                        __M_writer(filters.html_escape(filters.decode.utf8(language[1])))
                        __M_writer(u'</option>\n')
                    else:
                        __M_writer(u'                 <option value="')
                        __M_writer(filters.html_escape(filters.decode.utf8(language[0])))
                        __M_writer(u'" >')
                        __M_writer(filters.html_escape(filters.decode.utf8(language[1])))
                        __M_writer(u'</option>\n')
                __M_writer(u'              </select>\n              </label>\n          </form>\n        </nav>\n')
        if user.is_authenticated:
            __M_writer(u'      <nav class="nav-account nav-is-signedin nav-dd ui-right" aria-label="')
            __M_writer(filters.html_escape(filters.decode.utf8(_('Account'))))
            __M_writer(u'">\n        <h2 class="sr-only">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Account Navigation"))))
            __M_writer(u'</h2>\n        <ol>\n          <li class="nav-item nav-account-help">\n            <h3 class="title"><span class="label"><a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(get_online_help_info(online_help_token)['doc_url'])))
            __M_writer(u'" title="')
            __M_writer(filters.html_escape(filters.decode.utf8(_('Contextual Online Help'))))
            __M_writer(u'" target="_blank">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Help"))))
            __M_writer(u'</a></span></h3>\n          </li>\n          <li class="nav-item nav-account-user">\n            ')
            runtime._include_file(context, u'user_dropdown.html', _template_uri, online_help_token=online_help_token)
            __M_writer(u'\n          </li>\n        </ol>\n      </nav>\n\n')
        else:
            __M_writer(u'      ')

            register_url = settings.LMS_ROOT_URL + '/register'
                  
            
            __M_locals_builtin_stored = __M_locals_builtin()
            __M_locals.update(__M_dict_builtin([(__M_key, __M_locals_builtin_stored[__M_key]) for __M_key in ['register_url'] if __M_key in __M_locals_builtin_stored]))
            __M_writer(u'\n      <nav class="nav-not-signedin nav-pitch" aria-label="')
            __M_writer(filters.html_escape(filters.decode.utf8(_('Account'))))
            __M_writer(u'">\n        <h2 class="sr-only">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Account Navigation"))))
            __M_writer(u'</h2>\n        <ol>\n          <li class="nav-item nav-not-signedin-help">\n            <a href="')
            __M_writer(filters.html_escape(filters.decode.utf8(get_online_help_info(online_help_token)['doc_url'])))
            __M_writer(u'" title="')
            __M_writer(filters.html_escape(filters.decode.utf8(_('Contextual Online Help'))))
            __M_writer(u'" target="_blank">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Help"))))
            __M_writer(u'</a>\n          </li>\n')
            if static.get_value('ALLOW_PUBLIC_ACCOUNT_CREATION', settings.FEATURES.get('ALLOW_PUBLIC_ACCOUNT_CREATION')):
                __M_writer(u'              <li class="nav-item nav-not-signedin-signup">\n                <a class="action action-signup" href="')
                __M_writer(filters.html_escape(filters.decode.utf8(register_url)))
                __M_writer(u'?next=')
                __M_writer(filters.html_escape(filters.decode.utf8(current_url)))
                __M_writer(u'">')
                __M_writer(filters.html_escape(filters.decode.utf8(_("Sign Up"))))
                __M_writer(u'</a>\n              </li>\n')
            __M_writer(u'          <li class="nav-item nav-not-signedin-signin">\n            <a class="action action-signin" href="')
            __M_writer(filters.html_escape(filters.decode.utf8(settings.FRONTEND_LOGIN_URL)))
            __M_writer(u'?next=')
            __M_writer(filters.html_escape(filters.decode.utf8(current_url)))
            __M_writer(u'">')
            __M_writer(filters.html_escape(filters.decode.utf8(_("Sign In"))))
            __M_writer(u'</a>\n          </li>\n        </ol>\n      </nav>\n')
        __M_writer(u'    </div>\n  </header>\n</div>\n')
        return ''
    finally:
        context.caller_stack._pop_frame()
コード例 #15
0
def account_settings_context(request):
    """ Context for the account settings page.

    Args:
        request: The request object.

    Returns:
        dict

    """
    user = request.user

    year_of_birth_options = [(unicode(year), unicode(year))
                             for year in UserProfile.VALID_YEARS]
    try:
        user_orders = get_user_orders(user)
    except:  # pylint: disable=bare-except
        log.exception('Error fetching order history from Otto.')
        # Return empty order list as account settings page expect a list and
        # it will be broken if exception raised
        user_orders = []

    context = {
        'auth': {},
        'duplicate_provider':
        None,
        'nav_hidden':
        True,
        'fields': {
            'country': {
                'options': list(countries),
            },
            'gender': {
                'options': [(choice[0], _(choice[1]))
                            for choice in UserProfile.GENDER_CHOICES],  # pylint: disable=translation-of-non-string
            },
            'language': {
                'options': released_languages(),
            },
            'level_of_education': {
                'options':
                [(choice[0], _(choice[1]))
                 for choice in UserProfile.LEVEL_OF_EDUCATION_CHOICES],  # pylint: disable=translation-of-non-string
            },
            'password': {
                'url': reverse('password_reset'),
            },
            'year_of_birth': {
                'options': year_of_birth_options,
            },
            'preferred_language': {
                'options': all_languages(),
            },
            'time_zone': {
                'options': TIME_ZONE_CHOICES,
            }
        },
        'platform_name':
        configuration_helpers.get_value('PLATFORM_NAME',
                                        settings.PLATFORM_NAME),
        'password_reset_support_link':
        configuration_helpers.get_value('PASSWORD_RESET_SUPPORT_LINK',
                                        settings.PASSWORD_RESET_SUPPORT_LINK)
        or settings.SUPPORT_SITE_LINK,
        'user_accounts_api_url':
        reverse("accounts_api", kwargs={'username': user.username}),
        'user_preferences_api_url':
        reverse('preferences_api', kwargs={'username': user.username}),
        'disable_courseware_js':
        True,
        'show_program_listing':
        ProgramsApiConfig.is_enabled(),
        'show_dashboard_tabs':
        True,
        'order_history':
        user_orders,
        'enable_account_deletion':
        configuration_helpers.get_value(
            'ENABLE_ACCOUNT_DELETION',
            settings.FEATURES.get('ENABLE_ACCOUNT_DELETION', False)),
        'extended_profile_fields':
        _get_extended_profile_fields(),
    }

    enterprise_customer = get_enterprise_customer_for_learner(
        site=request.site, user=request.user)
    update_account_settings_context_for_enterprise(context,
                                                   enterprise_customer)

    if third_party_auth.is_enabled():
        # If the account on the third party provider is already connected with another edX account,
        # we display a message to the user.
        context['duplicate_provider'] = pipeline.get_duplicate_provider(
            messages.get_messages(request))

        auth_states = pipeline.get_provider_user_states(user)

        context['auth']['providers'] = [
            {
                'id':
                state.provider.provider_id,
                'name':
                state.provider.name,  # The name of the provider e.g. Facebook
                'connected':
                state.
                has_account,  # Whether the user's edX account is connected with the provider.
                # If the user is not connected, they should be directed to this page to authenticate
                # with the particular provider, as long as the provider supports initiating a login.
                'connect_url':
                pipeline.get_login_url(
                    state.provider.provider_id,
                    pipeline.AUTH_ENTRY_ACCOUNT_SETTINGS,
                    # The url the user should be directed to after the auth process has completed.
                    redirect_url=reverse('account_settings'),
                ),
                'accepts_logins':
                state.provider.accepts_logins,
                # If the user is connected, sending a POST request to this url removes the connection
                # information for this provider from their edX account.
                'disconnect_url':
                pipeline.get_disconnect_url(state.provider.provider_id,
                                            state.association_id),
                # We only want to include providers if they are either currently available to be logged
                # in with, or if the user is already authenticated with them.
            } for state in auth_states
            if state.provider.display_for_login or state.has_account
        ]

    return context
コード例 #16
0
ファイル: header.html.py プロジェクト: lxp20201/lxp
def render_body(context,
                online_help_token,
                use_cookie_banner=False,
                **pageargs):
    __M_caller = context.caller_stack._push_frame()
    try:
        __M_locals = __M_dict_builtin(use_cookie_banner=use_cookie_banner,
                                      pageargs=pageargs,
                                      online_help_token=online_help_token)
        _import_ns = {}
        _mako_get_namespace(context, '__anon_0x7f8feee166d0')._populate(
            _import_ns, [u'login_query'])
        csrf_token = _import_ns.get('csrf_token',
                                    context.get('csrf_token', UNDEFINED))
        marketing_link = _import_ns.get(
            'marketing_link', context.get('marketing_link', UNDEFINED))
        settings = _import_ns.get('settings',
                                  context.get('settings', UNDEFINED))
        request = _import_ns.get('request', context.get('request', UNDEFINED))
        show_program_listing = _import_ns.get(
            'show_program_listing',
            context.get('show_program_listing', UNDEFINED))

        def navigation_top():
            return render_navigation_top(context._locals(__M_locals))

        def navigation_other_global_links():
            return render_navigation_other_global_links(
                context._locals(__M_locals))

        len = _import_ns.get('len', context.get('len', UNDEFINED))
        course = _import_ns.get('course', context.get('course', UNDEFINED))

        def js_extra():
            return render_js_extra(context._locals(__M_locals))

        static = _mako_get_namespace(context, 'static')
        user = _import_ns.get('user', context.get('user', UNDEFINED))
        LANGUAGE_CODE = _import_ns.get('LANGUAGE_CODE',
                                       context.get('LANGUAGE_CODE', UNDEFINED))
        uses_pattern_library = _import_ns.get(
            'uses_pattern_library',
            context.get('uses_pattern_library', UNDEFINED))

        def navigation_global_links_authenticated():
            return render_navigation_global_links_authenticated(
                context._locals(__M_locals))

        __M_writer = context.writer()
        __M_writer(u'\n')
        __M_writer(u'\n\n')
        __M_writer(u'\n')
        __M_writer(u'\n')
        __M_writer(u'\n\n')
        if 'parent' not in context._data or not hasattr(
                context._data['parent'], 'navigation_top'):
            context['self'].navigation_top(**pageargs)

        __M_writer(u'\n\n')
        if uses_pattern_library:
            __M_writer(u'    ')
            if 'parent' not in context._data or not hasattr(
                    context._data['parent'], 'js_extra'):
                context['self'].js_extra(**pageargs)

            __M_writer(u'\n')
        __M_writer(u'\n<header class="global-header theme-header ')
        __M_writer(
            filters.html_escape(filters.decode.utf8('slim' if course else '')))
        __M_writer(
            u'">\n    <div class="theme-header-info">\n        <div class="theme-header-info_contact">\n            <span class="theme-header-info_text">Have any question?</span>\n            <span class="theme-header-info_phone"><i class="fa fa-phone" aria-hidden="true"></i> +1 857 4533328</span>\n            <a class="theme-header-info_mail" href="mailto:[email protected]"><i class="fa fa-envelope" aria-hidden="true"></i>[email protected]</a>\n        </div>\n        <div class="theme-header-info_social">\n            <span class="theme-header-info_text">Find us in social network</span>\n            <ul class="social-list">\n                <li class="social-list_item"><a class="social-list_link" href="https://twitter.com/raccoongangcom" target="_blank"><i class="fa fa-twitter" aria-hidden="true"></i></a></li>\n                <li class="social-list_item"><a class="social-list_link" href="https://www.facebook.com/raccoongangco" target="_blank"><i class="fa fa-facebook" aria-hidden="true"></i></a></li>\n                <li class="social-list_item"><a class="social-list_link" href="https://www.linkedin.com/company/raccoon-gang" target="_blank"><i class="fa fa-linkedin" aria-hidden="true"></i></a></li>\n            </ul>\n        </div>\n    </div>\n    <div class="holder">\n'
        )
        if use_cookie_banner:
            __M_writer(u'            ')
            __M_writer(
                filters.html_escape(
                    filters.decode.utf8(
                        static.renderReact(component="CookiePolicyBanner",
                                           id="cookie-policy-banner",
                                           props={}))))
            __M_writer(u'\n')
        __M_writer(u'        <div class="main-header">\n            ')
        runtime._include_file(context,
                              u'navbar-logo-header.html',
                              _template_uri,
                              online_help_token=online_help_token)
        __M_writer(u'\n')
        if user.is_authenticated:
            __M_writer(u'                ')
            runtime._include_file(context,
                                  u'navbar-authenticated.html',
                                  _template_uri,
                                  online_help_token=online_help_token)
            __M_writer(u'\n')
        else:
            __M_writer(u'                ')
            runtime._include_file(context,
                                  u'navbar-not-authenticated.html',
                                  _template_uri,
                                  online_help_token=online_help_token)
            __M_writer(u'\n')
        __M_writer(
            u'        </div>\n        <div class="mobile-menu hidden" aria-label='
        )
        __M_writer(filters.html_escape(filters.decode.utf8(_("More Options"))))
        __M_writer(
            u' role="menu" id="mobile-menu"></div>\n    </div>\n\n    <div class="theme-main-nav">\n        <div class="theme-main-nav_opener">\n            <span class="line"></span>\n            <span class="line"></span>\n            <span class="line"></span>\n            <span class="line"></span>\n        </div>\n        <div class="theme-main-nav_logo">\n            <a href="'
        )
        __M_writer(
            filters.html_escape(filters.decode.utf8(marketing_link('ROOT'))))
        __M_writer(
            u'">\n          <span class="theme-nav-wrapper_logo-holder theme-nav-wrapper_logo-holder_small">\n              <img src="/static/'
        )
        __M_writer(
            filters.html_escape(
                filters.decode.utf8(
                    settings.FEATURES.get(
                        'MARVEL_YELLOW_DEFAULT_HAWTHORN_SITE_THEME',
                        settings.DEFAULT_SITE_THEME))))
        __M_writer(
            u'/images/logo.png" alt="logo">\n          </span>\n            </a>\n        </div>\n        <nav class="theme-main-nav_holder">\n            <ul class="theme-main-nav_list">\n                <li class="theme-main-nav_item"><a href="/about" class="theme-main-nav_link">'
        )
        __M_writer(
            filters.html_escape(filters.decode.utf8(
                _("About The CintanaTech"))))
        __M_writer(
            u'</a></li>\n                <li class="theme-main-nav_item"><a href="/blog" class="theme-main-nav_link">'
        )
        __M_writer(filters.html_escape(filters.decode.utf8(_("Blog"))))
        __M_writer(
            u'</a></li>\n                <li class="theme-main-nav_item"><a href="/contact" class="theme-main-nav_link">'
        )
        __M_writer(filters.html_escape(filters.decode.utf8(_("Contact Us"))))
        __M_writer(u'</a></li>\n')
        if user.is_authenticated():
            __M_writer(u'                ')
            if 'parent' not in context._data or not hasattr(
                    context._data['parent'],
                    'navigation_global_links_authenticated'):
                context['self'].navigation_global_links_authenticated(
                    **pageargs)

            __M_writer(u'\n')
        else:
            __M_writer(u'            ')
            if 'parent' not in context._data or not hasattr(
                    context._data['parent'], 'navigation_other_global_links'):
                context['self'].navigation_other_global_links(**pageargs)

            __M_writer(u'\n')
        __M_writer(
            u'        </ul>\n        </nav>\n    </div>\n</header>\n\n<script>\n    $(".theme-main-nav_opener").on("click", function open(){\n        if ($(this).parent().hasClass("theme-main-nav__open")){\n            $(this).parent().removeClass("theme-main-nav__open");\n        } else {\n            $(this).parent().addClass("theme-main-nav__open");\n        }\n    });\n</script>\n\n'
        )
        if course:
            __M_writer(
                u'<!--[if lte IE 9]>\n<div class="ie-banner" aria-hidden="true">'
            )
            __M_writer(
                filters.html_escape(
                    filters.decode.utf8(
                        Text(
                            _('{begin_strong}Warning:{end_strong} Your browser is not fully supported. We strongly recommend using {chrome_link} or {ff_link}.'
                              )).
                        format(
                            begin_strong=HTML('<strong>'),
                            end_strong=HTML('</strong>'),
                            chrome_link=HTML(
                                '<a href="https://www.google.com/chrome" target="_blank">Chrome</a>'
                            ),
                            ff_link=HTML(
                                '<a href="http://www.mozilla.org/firefox" target="_blank">Firefox</a>'
                            ),
                        ))))
            __M_writer(u'</div>\n<![endif]-->\n')
        __M_writer(u'\n')
        if settings.FEATURES.get('ENABLE_COOKIE_CONSENT', False):
            __M_writer(u'  ')
            runtime._include_file(context, u'../widgets/cookie-consent.html',
                                  _template_uri)
            __M_writer(u'\n')
        __M_writer(u'\n')
        if header_language_selector_is_enabled():
            __M_writer(u'    ')
            languages = released_languages()

            __M_locals_builtin_stored = __M_locals_builtin()
            __M_locals.update(
                __M_dict_builtin([(__M_key, __M_locals_builtin_stored[__M_key])
                                  for __M_key in ['languages']
                                  if __M_key in __M_locals_builtin_stored]))
            __M_writer(u'\n')
            if len(languages) > 1:
                __M_writer(
                    u'        <form action="/i18n/setlang/" method="post" class="settings-language-form" id="language-settings-form">\n            <input type="hidden" id="csrf_token" name="csrfmiddlewaretoken" value="'
                )
                __M_writer(filters.html_escape(
                    filters.decode.utf8(csrf_token)))
                __M_writer(u'">\n')
                if user.is_authenticated:
                    __M_writer(
                        u'                <input title="preference api" type="hidden" class="url-endpoint" value="'
                    )
                    __M_writer(
                        filters.html_escape(
                            filters.decode.utf8(
                                reverse('preferences_api',
                                        kwargs={'username': user.username}))))
                    __M_writer(u'" data-user-is-authenticated="true">\n')
                else:
                    __M_writer(
                        u'                <input title="session update url" type="hidden" class="url-endpoint" value="'
                    )
                    __M_writer(
                        filters.html_escape(
                            filters.decode.utf8(reverse('session_language'))))
                    __M_writer(u'" data-user-is-authenticated="false">\n')
                __M_writer(u'            <label><span class="sr">')
                __M_writer(
                    filters.html_escape(
                        filters.decode.utf8(_("Choose Language"))))
                __M_writer(
                    u'</span>\n            <select class="input select language-selector" id="settings-language-value" name="language">\n'
                )
                for language in languages:
                    if language[0] == LANGUAGE_CODE:
                        __M_writer(u'                        <option value="')
                        __M_writer(
                            filters.html_escape(
                                filters.decode.utf8(language[0])))
                        __M_writer(u'" selected="selected">')
                        __M_writer(
                            filters.html_escape(
                                filters.decode.utf8(language[1])))
                        __M_writer(u'</option>\n')
                    else:
                        __M_writer(u'                        <option value="')
                        __M_writer(
                            filters.html_escape(
                                filters.decode.utf8(language[0])))
                        __M_writer(u'" >')
                        __M_writer(
                            filters.html_escape(
                                filters.decode.utf8(language[1])))
                        __M_writer(u'</option>\n')
                __M_writer(
                    u'            </select>\n            </label>\n        </form>\n'
                )
        return ''
    finally:
        context.caller_stack._pop_frame()
コード例 #17
0
def footer(request):
    """Retrieve the branded footer.

    This end-point provides information about the site footer,
    allowing for consistent display of the footer across other sites
    (for example, on the marketing site and blog).

    It can be used in one of two ways:
    1) A client renders the footer from a JSON description.
    2) A browser loads an HTML representation of the footer
        and injects it into the DOM.  The HTML includes
        CSS and JavaScript links.

    In case (2), we assume that the following dependencies
    are included on the page:
    a) JQuery (same version as used in edx-platform)
    b) font-awesome (same version as used in edx-platform)
    c) Open Sans web fonts

    Example: Retrieving the footer as JSON

        GET /api/branding/v1/footer
        Accepts: application/json

        {
            "navigation_links": [
                {
                  "url": "http://example.com/about",
                  "name": "about",
                  "title": "About"
                },
                # ...
            ],
            "social_links": [
                {
                    "url": "http://example.com/social",
                    "name": "facebook",
                    "icon-class": "fa-facebook-square",
                    "title": "Facebook",
                    "action": "Sign up on Facebook!"
                },
                # ...
            ],
            "mobile_links": [
                {
                    "url": "http://example.com/android",
                    "name": "google",
                    "image": "http://example.com/google.png",
                    "title": "Google"
                },
                # ...
            ],
            "legal_links": [
                {
                    "url": "http://example.com/terms-of-service.html",
                    "name": "terms_of_service",
                    "title': "Terms of Service"
                },
                # ...
            ],
            "openedx_link": {
                "url": "http://open.edx.org",
                "title": "Powered by Open edX",
                "image": "http://example.com/openedx.png"
            },
            "logo_image": "http://example.com/static/images/logo.png",
            "copyright": "edX, Open edX and their respective logos are registered trademarks of edX Inc."
        }


    Example: Retrieving the footer as HTML

        GET /api/branding/v1/footer
        Accepts: text/html


    Example: Including the footer with the "Powered by Open edX" logo

        GET /api/branding/v1/footer?show-openedx-logo=1
        Accepts: text/html


    Example: Retrieving the footer in a particular language

        GET /api/branding/v1/footer?language=en
        Accepts: text/html


    Example: Retrieving the footer with a language selector

        GET /api/branding/v1/footer?include-language-selector=1
        Accepts: text/html


    Example: Retrieving the footer with all JS and CSS dependencies (for testing)

        GET /api/branding/v1/footer?include-dependencies=1
        Accepts: text/html

    """
    if not branding_api.is_enabled():
        raise Http404

    # Use the content type to decide what representation to serve
    accepts = request.META.get('HTTP_ACCEPT', '*/*')

    # Show the OpenEdX logo in the footer
    show_openedx_logo = bool(request.GET.get('show-openedx-logo', False))

    # Include JS and CSS dependencies
    # This is useful for testing the end-point directly.
    include_dependencies = bool(request.GET.get('include-dependencies', False))

    # Override the language if necessary
    language = request.GET.get('language', translation.get_language())
    try:
        language = get_supported_language_variant(language)
    except LookupError:
        language = settings.LANGUAGE_CODE

    # Include a language selector
    include_language_selector = request.GET.get('include-language-selector',
                                                '') == '1'

    # Render the footer information based on the extension
    if 'text/html' in accepts or '*/*' in accepts:
        cache_params = {
            'language': language,
            'show_openedx_logo': show_openedx_logo,
            'include_dependencies': include_dependencies
        }
        if include_language_selector:
            cache_params['language_selector_options'] = ','.join(
                sorted([lang.code for lang in released_languages()]))
        cache_key = u"branding.footer.{params}.html".format(
            params=six.moves.urllib.parse.urlencode(cache_params))

        content = cache.get(cache_key)
        if content is None:
            with translation.override(language):
                content = _render_footer_html(request, show_openedx_logo,
                                              include_dependencies,
                                              include_language_selector,
                                              language)
                cache.set(cache_key, content, settings.FOOTER_CACHE_TIMEOUT)
        return HttpResponse(content,
                            status=200,
                            content_type="text/html; charset=utf-8")

    elif 'application/json' in accepts:
        cache_key = u"branding.footer.{params}.json".format(
            params=six.moves.urllib.parse.urlencode(
                {
                    'language': language,
                    'is_secure': request.is_secure(),
                }))
        footer_dict = cache.get(cache_key)
        if footer_dict is None:
            with translation.override(language):
                footer_dict = branding_api.get_footer(
                    is_secure=request.is_secure())
                cache.set(cache_key, footer_dict,
                          settings.FOOTER_CACHE_TIMEOUT)
        return JsonResponse(footer_dict,
                            200,
                            content_type="application/json; charset=utf-8")

    else:
        return HttpResponse(status=406)
コード例 #18
0
def render_body(context,
                online_help_token,
                use_cookie_banner=False,
                **pageargs):
    __M_caller = context.caller_stack._push_frame()
    try:
        __M_locals = __M_dict_builtin(use_cookie_banner=use_cookie_banner,
                                      pageargs=pageargs,
                                      online_help_token=online_help_token)
        _import_ns = {}
        _mako_get_namespace(context, '__anon_0x7f4938752a50')._populate(
            _import_ns, [u'login_query'])
        csrf_token = _import_ns.get('csrf_token',
                                    context.get('csrf_token', UNDEFINED))
        settings = _import_ns.get('settings',
                                  context.get('settings', UNDEFINED))

        def navigation_top():
            return render_navigation_top(context._locals(__M_locals))

        len = _import_ns.get('len', context.get('len', UNDEFINED))
        course = _import_ns.get('course', context.get('course', UNDEFINED))

        def js_extra():
            return render_js_extra(context._locals(__M_locals))

        static = _mako_get_namespace(context, 'static')
        user = _import_ns.get('user', context.get('user', UNDEFINED))
        LANGUAGE_CODE = _import_ns.get('LANGUAGE_CODE',
                                       context.get('LANGUAGE_CODE', UNDEFINED))
        uses_pattern_library = _import_ns.get(
            'uses_pattern_library',
            context.get('uses_pattern_library', UNDEFINED))
        __M_writer = context.writer()
        __M_writer(u'\n')
        __M_writer(u'\n\n')
        __M_writer(u'\n')
        __M_writer(u'\n')
        __M_writer(u'\n\n')
        if 'parent' not in context._data or not hasattr(
                context._data['parent'], 'navigation_top'):
            context['self'].navigation_top(**pageargs)

        __M_writer(u'\n\n')
        if uses_pattern_library:
            __M_writer(u'    ')
            if 'parent' not in context._data or not hasattr(
                    context._data['parent'], 'js_extra'):
                context['self'].js_extra(**pageargs)

            __M_writer(u'\n')
        __M_writer(u'\n')

        unsupported_browser_alert_versions = configuration_helpers.get_value(
            'UNSUPPORTED_BROWSER_ALERT_VERSIONS',
            settings.FEATURES.get('UNSUPPORTED_BROWSER_ALERT_VERSIONS'))

        __M_locals_builtin_stored = __M_locals_builtin()
        __M_locals.update(
            __M_dict_builtin([
                (__M_key, __M_locals_builtin_stored[__M_key])
                for __M_key in ['unsupported_browser_alert_versions']
                if __M_key in __M_locals_builtin_stored
            ]))
        __M_writer(u'\n')
        if waffle.switch_is_active('enable_unsupported_browser_alert'):
            __M_writer(u'  <script>\n    var $buoop = {\n        notify:')
            __M_writer(filters.decode.utf8(unsupported_browser_alert_versions))
            __M_writer(
                u',\n        api:5,\n        reminder:0\n    };\n    function $buo_f() {\n        var e = document.createElement("script");\n        e.src = "//browser-update.org/update.min.js";\n        document.body.appendChild(e);\n    };\n    try {document.addEventListener("DOMContentLoaded", $buo_f,false)}\n    catch(e){window.attachEvent("onload", $buo_f)}\n  </script>\n'
            )
        __M_writer(u'\n<header class="global-header ')
        __M_writer(
            filters.html_escape(filters.decode.utf8('slim' if course else '')))
        __M_writer(u'">\n')
        if use_cookie_banner:
            __M_writer(u'        ')
            __M_writer(
                filters.html_escape(
                    filters.decode.utf8(
                        static.renderReact(component="CookiePolicyBanner",
                                           id="cookie-policy-banner",
                                           props={}))))
            __M_writer(u'\n')
        __M_writer(u'    <div class="main-header">\n        ')
        runtime._include_file(context,
                              u'navbar-logo-header.html',
                              _template_uri,
                              online_help_token=online_help_token)
        __M_writer(
            u'\n        <div class="hamburger-menu" role="button" aria-label=')
        __M_writer(filters.html_escape(filters.decode.utf8(_("Options Menu"))))
        __M_writer(
            u' aria-expanded="false" aria-controls="mobile-menu" tabindex="0">\n            <span class="line"></span>\n            <span class="line"></span>\n            <span class="line"></span>\n            <span class="line"></span>\n        </div>\n'
        )
        if user.is_authenticated:
            __M_writer(u'            ')
            runtime._include_file(context,
                                  u'navbar-authenticated.html',
                                  _template_uri,
                                  online_help_token=online_help_token)
            __M_writer(u'\n')
        else:
            __M_writer(u'            ')
            runtime._include_file(context,
                                  u'navbar-not-authenticated.html',
                                  _template_uri,
                                  online_help_token=online_help_token)
            __M_writer(u'\n')
        __M_writer(
            u'    </div>\n    <div class="mobile-menu hidden" aria-label=')
        __M_writer(filters.html_escape(filters.decode.utf8(_("More Options"))))
        __M_writer(u' role="menu" id="mobile-menu"></div>\n</header>\n\n')
        if course:
            __M_writer(
                u'<!--[if lte IE 9]>\n<div class="ie-banner" aria-hidden="true">'
            )
            __M_writer(
                filters.html_escape(
                    filters.decode.utf8(
                        Text(
                            _('{begin_strong}Warning:{end_strong} Your browser is not fully supported. We strongly recommend using {chrome_link} or {ff_link}.'
                              )).
                        format(
                            begin_strong=HTML('<strong>'),
                            end_strong=HTML('</strong>'),
                            chrome_link=HTML(
                                '<a href="https://www.google.com/chrome" target="_blank">Chrome</a>'
                            ),
                            ff_link=HTML(
                                '<a href="http://www.mozilla.org/firefox" target="_blank">Firefox</a>'
                            ),
                        ))))
            __M_writer(u'</div>\n<![endif]-->\n')
        __M_writer(u'\n')
        if settings.FEATURES.get('ENABLE_COOKIE_CONSENT', False):
            __M_writer(u'  ')
            runtime._include_file(context, u'../widgets/cookie-consent.html',
                                  _template_uri)
            __M_writer(u'\n')
        __M_writer(u'\n')
        if header_language_selector_is_enabled():
            __M_writer(u'    ')
            languages = released_languages()

            __M_locals_builtin_stored = __M_locals_builtin()
            __M_locals.update(
                __M_dict_builtin([(__M_key, __M_locals_builtin_stored[__M_key])
                                  for __M_key in ['languages']
                                  if __M_key in __M_locals_builtin_stored]))
            __M_writer(u'\n')
            if len(languages) > 1:
                __M_writer(
                    u'        <form action="/i18n/setlang/" method="post" class="settings-language-form" id="language-settings-form">\n            <input type="hidden" id="csrf_token" name="csrfmiddlewaretoken" value="'
                )
                __M_writer(filters.html_escape(
                    filters.decode.utf8(csrf_token)))
                __M_writer(u'">\n')
                if user.is_authenticated:
                    __M_writer(
                        u'                <input title="preference api" type="hidden" class="url-endpoint" value="'
                    )
                    __M_writer(
                        filters.html_escape(
                            filters.decode.utf8(
                                reverse('preferences_api',
                                        kwargs={'username': user.username}))))
                    __M_writer(u'" data-user-is-authenticated="true">\n')
                else:
                    __M_writer(
                        u'                <input title="session update url" type="hidden" class="url-endpoint" value="'
                    )
                    __M_writer(
                        filters.html_escape(
                            filters.decode.utf8(reverse('session_language'))))
                    __M_writer(u'" data-user-is-authenticated="false">\n')
                __M_writer(u'            <label><span class="sr">')
                __M_writer(
                    filters.html_escape(
                        filters.decode.utf8(_("Choose Language"))))
                __M_writer(
                    u'</span>\n            <select class="input select language-selector" id="settings-language-value" name="language">\n'
                )
                for language in languages:
                    if language[0] == LANGUAGE_CODE:
                        __M_writer(u'                        <option value="')
                        __M_writer(
                            filters.html_escape(
                                filters.decode.utf8(language[0])))
                        __M_writer(u'" selected="selected">')
                        __M_writer(
                            filters.html_escape(
                                filters.decode.utf8(language[1])))
                        __M_writer(u'</option>\n')
                    else:
                        __M_writer(u'                        <option value="')
                        __M_writer(
                            filters.html_escape(
                                filters.decode.utf8(language[0])))
                        __M_writer(u'" >')
                        __M_writer(
                            filters.html_escape(
                                filters.decode.utf8(language[1])))
                        __M_writer(u'</option>\n')
                __M_writer(
                    u'            </select>\n            </label>\n        </form>\n'
                )
        return ''
    finally:
        context.caller_stack._pop_frame()
コード例 #19
0
ファイル: views.py プロジェクト: caesar2164/edx-platform
def account_settings_context(request):
    """ Context for the account settings page.

    Args:
        request: The request object.

    Returns:
        dict

    """
    user = request.user

    year_of_birth_options = [(unicode(year), unicode(year)) for year in UserProfile.VALID_YEARS]
    try:
        user_orders = get_user_orders(user)
    except:  # pylint: disable=bare-except
        log.exception('Error fetching order history from Otto.')
        # Return empty order list as account settings page expect a list and
        # it will be broken if exception raised
        user_orders = []

    context = {
        'auth': {},
        'duplicate_provider': None,
        'nav_hidden': True,
        'fields': {
            'country': {
                'options': list(countries),
            }, 'gender': {
                'options': [(choice[0], _(choice[1])) for choice in UserProfile.GENDER_CHOICES],  # pylint: disable=translation-of-non-string
            }, 'language': {
                'options': released_languages(),
            }, 'level_of_education': {
                'options': [(choice[0], _(choice[1])) for choice in UserProfile.LEVEL_OF_EDUCATION_CHOICES],  # pylint: disable=translation-of-non-string
            }, 'password': {
                'url': reverse('password_reset'),
            }, 'year_of_birth': {
                'options': year_of_birth_options,
            }, 'preferred_language': {
                'options': all_languages(),
            }, 'time_zone': {
                'options': TIME_ZONE_CHOICES,
            }
        },
        'is_shib_auth': False,
        'platform_name': configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME),
        'user_accounts_api_url': reverse("accounts_api", kwargs={'username': user.username}),
        'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}),
        'disable_courseware_js': True,
        'show_program_listing': ProgramsApiConfig.current().show_program_listing,
        'order_history': user_orders
    }

    if third_party_auth.is_enabled():
        # If the account on the third party provider is already connected with another edX account,
        # we display a message to the user.
        context['duplicate_provider'] = pipeline.get_duplicate_provider(messages.get_messages(request))

        auth_states = pipeline.get_provider_user_states(user)

        context['auth']['providers'] = [{
            'id': state.provider.provider_id,
            'name': state.provider.name,  # The name of the provider e.g. Facebook
            'connected': state.has_account,  # Whether the user's edX account is connected with the provider.
            # If the user is not connected, they should be directed to this page to authenticate
            # with the particular provider, as long as the provider supports initiating a login.
            'connect_url': pipeline.get_login_url(
                state.provider.provider_id,
                pipeline.AUTH_ENTRY_ACCOUNT_SETTINGS,
                # The url the user should be directed to after the auth process has completed.
                redirect_url=reverse('account_settings'),
            ),
            'accepts_logins': state.provider.accepts_logins,
            # If the user is connected, sending a POST request to this url removes the connection
            # information for this provider from their edX account.
            'disconnect_url': pipeline.get_disconnect_url(state.provider.provider_id, state.association_id),
            # We only want to include providers if they are either currently available to be logged
            # in with, or if the user is already authenticated with them.
        } for state in auth_states if state.provider.display_for_login or state.has_account]

        if any(state.provider.provider_id == 'saml-sunet' for state in auth_states if state.has_account):
            context['is_shib_auth'] = True

    return context
コード例 #20
0
def account_settings_context(request):
    """ Context for the account settings page.

    Args:
        request: The request object.

    Returns:
        dict

    """
    user = request.user

    year_of_birth_options = [(unicode(year), unicode(year)) for year in UserProfile.VALID_YEARS]
    try:
        user_orders = get_user_orders(user)
    except:  # pylint: disable=bare-except
        log.exception('Error fetching order history from Otto.')
        # Return empty order list as account settings page expect a list and
        # it will be broken if exception raised
        user_orders = []

    beta_language = {}
    dark_lang_config = DarkLangConfig.current()
    if dark_lang_config.enable_beta_languages:
        user_preferences = get_user_preferences(user)
        pref_language = user_preferences.get('pref-lang')
        if pref_language in dark_lang_config.beta_languages_list:
            beta_language['code'] = pref_language
            beta_language['name'] = settings.LANGUAGE_DICT.get(pref_language)

    context = {
        'auth': {},
        'duplicate_provider': None,
        'nav_hidden': True,
        'fields': {
            'country': {
                'options': list(countries),
            }, 'gender': {
                'options': [(choice[0], _(choice[1])) for choice in UserProfile.GENDER_CHOICES],
            }, 'language': {
                'options': released_languages(),
            }, 'level_of_education': {
                'options': [(choice[0], _(choice[1])) for choice in UserProfile.LEVEL_OF_EDUCATION_CHOICES],
            }, 'password': {
                'url': reverse('password_reset'),
            }, 'year_of_birth': {
                'options': year_of_birth_options,
            }, 'preferred_language': {
                'options': all_languages(),
            }, 'time_zone': {
                'options': TIME_ZONE_CHOICES,
            }
        },
        'platform_name': configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME),
        'password_reset_support_link': configuration_helpers.get_value(
            'PASSWORD_RESET_SUPPORT_LINK', settings.PASSWORD_RESET_SUPPORT_LINK
        ) or settings.SUPPORT_SITE_LINK,
        'user_accounts_api_url': reverse("accounts_api", kwargs={'username': user.username}),
        'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}),
        'disable_courseware_js': True,
        'show_program_listing': ProgramsApiConfig.is_enabled(),
        'show_dashboard_tabs': True,
        'order_history': user_orders,
        'disable_order_history_tab': should_redirect_to_order_history_microfrontend(),
        'enable_account_deletion': configuration_helpers.get_value(
            'ENABLE_ACCOUNT_DELETION', settings.FEATURES.get('ENABLE_ACCOUNT_DELETION', False)
        ),
        'extended_profile_fields': _get_extended_profile_fields(),
        'beta_language': beta_language,
    }

    enterprise_customer = get_enterprise_customer_for_learner(user=request.user)
    update_account_settings_context_for_enterprise(context, enterprise_customer)

    if third_party_auth.is_enabled():
        # If the account on the third party provider is already connected with another edX account,
        # we display a message to the user.
        context['duplicate_provider'] = pipeline.get_duplicate_provider(messages.get_messages(request))

        auth_states = pipeline.get_provider_user_states(user)

        context['auth']['providers'] = [{
            'id': state.provider.provider_id,
            'name': state.provider.name,  # The name of the provider e.g. Facebook
            'connected': state.has_account,  # Whether the user's edX account is connected with the provider.
            # If the user is not connected, they should be directed to this page to authenticate
            # with the particular provider, as long as the provider supports initiating a login.
            'connect_url': pipeline.get_login_url(
                state.provider.provider_id,
                pipeline.AUTH_ENTRY_ACCOUNT_SETTINGS,
                # The url the user should be directed to after the auth process has completed.
                redirect_url=reverse('account_settings'),
            ),
            'accepts_logins': state.provider.accepts_logins,
            # If the user is connected, sending a POST request to this url removes the connection
            # information for this provider from their edX account.
            'disconnect_url': pipeline.get_disconnect_url(state.provider.provider_id, state.association_id),
            # We only want to include providers if they are either currently available to be logged
            # in with, or if the user is already authenticated with them.
        } for state in auth_states if state.provider.display_for_login or state.has_account]

    return context
コード例 #21
0
ファイル: views.py プロジェクト: edx/edx-platform
def footer(request):
    """Retrieve the branded footer.

    This end-point provides information about the site footer,
    allowing for consistent display of the footer across other sites
    (for example, on the marketing site and blog).

    It can be used in one of two ways:
    1) A client renders the footer from a JSON description.
    2) A browser loads an HTML representation of the footer
        and injects it into the DOM.  The HTML includes
        CSS and JavaScript links.

    In case (2), we assume that the following dependencies
    are included on the page:
    a) JQuery (same version as used in edx-platform)
    b) font-awesome (same version as used in edx-platform)
    c) Open Sans web fonts

    Example: Retrieving the footer as JSON

        GET /api/branding/v1/footer
        Accepts: application/json

        {
            "navigation_links": [
                {
                  "url": "http://example.com/about",
                  "name": "about",
                  "title": "About"
                },
                # ...
            ],
            "social_links": [
                {
                    "url": "http://example.com/social",
                    "name": "facebook",
                    "icon-class": "fa-facebook-square",
                    "title": "Facebook",
                    "action": "Sign up on Facebook!"
                },
                # ...
            ],
            "mobile_links": [
                {
                    "url": "http://example.com/android",
                    "name": "google",
                    "image": "http://example.com/google.png",
                    "title": "Google"
                },
                # ...
            ],
            "legal_links": [
                {
                    "url": "http://example.com/terms-of-service.html",
                    "name": "terms_of_service",
                    "title': "Terms of Service"
                },
                # ...
            ],
            "openedx_link": {
                "url": "http://open.edx.org",
                "title": "Powered by Open edX",
                "image": "http://example.com/openedx.png"
            },
            "logo_image": "http://example.com/static/images/logo.png",
            "copyright": "edX, Open edX and their respective logos are registered trademarks of edX Inc."
        }


    Example: Retrieving the footer as HTML

        GET /api/branding/v1/footer
        Accepts: text/html


    Example: Including the footer with the "Powered by Open edX" logo

        GET /api/branding/v1/footer?show-openedx-logo=1
        Accepts: text/html


    Example: Retrieving the footer in a particular language

        GET /api/branding/v1/footer?language=en
        Accepts: text/html


    Example: Retrieving the footer with a language selector

        GET /api/branding/v1/footer?include-language-selector=1
        Accepts: text/html


    Example: Retrieving the footer with all JS and CSS dependencies (for testing)

        GET /api/branding/v1/footer?include-dependencies=1
        Accepts: text/html

    """
    if not branding_api.is_enabled():
        raise Http404

    # Use the content type to decide what representation to serve
    accepts = request.META.get('HTTP_ACCEPT', '*/*')

    # Show the OpenEdX logo in the footer
    show_openedx_logo = bool(request.GET.get('show-openedx-logo', False))

    # Include JS and CSS dependencies
    # This is useful for testing the end-point directly.
    include_dependencies = bool(request.GET.get('include-dependencies', False))

    # Override the language if necessary
    language = request.GET.get('language', translation.get_language())
    try:
        language = get_supported_language_variant(language)
    except LookupError:
        language = settings.LANGUAGE_CODE

    # Include a language selector
    include_language_selector = request.GET.get('include-language-selector', '') == '1'

    # Render the footer information based on the extension
    if 'text/html' in accepts or '*/*' in accepts:
        cache_params = {
            'language': language,
            'show_openedx_logo': show_openedx_logo,
            'include_dependencies': include_dependencies
        }
        if include_language_selector:
            cache_params['language_selector_options'] = ','.join(sorted([lang.code for lang in released_languages()]))
        cache_key = u"branding.footer.{params}.html".format(params=six.moves.urllib.parse.urlencode(cache_params))

        content = cache.get(cache_key)
        if content is None:
            with translation.override(language):
                content = _render_footer_html(
                    request, show_openedx_logo, include_dependencies, include_language_selector, language
                )
                cache.set(cache_key, content, settings.FOOTER_CACHE_TIMEOUT)
        return HttpResponse(content, status=200, content_type="text/html; charset=utf-8")

    elif 'application/json' in accepts:
        cache_key = u"branding.footer.{params}.json".format(
            params=six.moves.urllib.parse.urlencode({
                'language': language,
                'is_secure': request.is_secure(),
            })
        )
        footer_dict = cache.get(cache_key)
        if footer_dict is None:
            with translation.override(language):
                footer_dict = branding_api.get_footer(is_secure=request.is_secure())
                cache.set(cache_key, footer_dict, settings.FOOTER_CACHE_TIMEOUT)
        return JsonResponse(footer_dict, 200, content_type="application/json; charset=utf-8")

    else:
        return HttpResponse(status=406)
コード例 #22
0
 def test_released_languages(self):
     """
     Tests for the released languages.
     """
     released_languages = language_api.released_languages()
     self.assertGreaterEqual(len(released_languages), 1)