OpenEdx证书功能的启用

     在OpenEdx(Ginkgo)的CMS界面中,课程管理的URL为/course/course-v1:edX+DemoX+Demo_Course,开始查找对应的URL文件。在urls.py文件中找了
url(r’^course/{}?$’.format(settings.COURSE_KEY_PATTERN), ‘course_handler’, name=’course_handler’),顺便看下COURSE_KEY_PATTERN的内容,在lms/envs/common.py文件中找到如下定义
COURSE_KEY_PATTERN = r'(?P<course_key_string>[^/+]+(/|\+)[^/+]+(/|\+)[^/?]+)’

      在文件cms/djangoapps/contentstore/views/course.py中查找到了定义
def course_handler(request, course_key_string=None)并跟踪到了函数
def course_index(request, course_key)该函数的模板为course_outline.html
看了course_outline.html文件,但是实际的标题头部的证书菜单的内容是在cms/templates/widgets/header.html文件中定义的。
该文件有如下字段
% if certificates_url:
    <li class=”nav-item nav-course-settings-certificates”>
        <a href=”${certificates_url}”>${_(“Certificates”)}</a>
    </li>
% endif
并在搜索中找到了同一个模板文件的内容:
      <%
            course_key = context_course.id
            index_url = reverse(‘contentstore.views.course_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            course_team_url = reverse(‘contentstore.views.course_team_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            assets_url = reverse(‘contentstore.views.assets_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            textbooks_url = reverse(‘contentstore.views.textbooks_list_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            videos_url = reverse(‘contentstore.views.videos_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            import_url = reverse(‘contentstore.views.import_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            course_info_url = reverse(‘contentstore.views.course_info_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            export_url = reverse(‘contentstore.views.export_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            settings_url = reverse(‘contentstore.views.settings_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            grading_url = reverse(‘contentstore.views.grading_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            advanced_settings_url = reverse(‘contentstore.views.advanced_settings_handler’, kwargs={‘course_key_string’: unicode(course_key)})
            tabs_url = reverse(‘contentstore.views.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(‘contentstore.views.certificates.certificates_list_handler’, kwargs={‘course_key_string’: unicode(course_key)})
      %>
其中settings.FEATURES.get(“CERTIFICATES_HTML_VIEW”)是要在配置文件中启用的内容,同时在课程设置中启用html证书。修改配置后,证书菜单能显示出,但可能提示“This course does not use a mode that offers certificates.”
      分析代码发现与提示管理的参数为“has_certificate_modes”在程序文件cms/djangoapps/contentstore/views/certificates.py中。即course_models列表数量大于0,该课程即为发证书课程。这里有个前提,即course_models中实例的课程类型mode.slug!=’audit’。
     跟踪文件发现course_models定义在common/djangoapps/course_modes/models.py文件中,对于CourseModel.modes_for_course(cls, course_id, include_expired=False, only_selectable=True):的说明如下:
“””
        Returns a list of the non-expired modes for a given course id
        If no modes have been set in the table, returns the default mode
        Arguments:
            course_id (CourseKey): Search for course modes for this course.
        Keyword Arguments:
            include_expired (bool): If True, expired course modes will be included
            in the returned JSON data. If False, these modes will be omitted.
            only_selectable (bool): If True, include only modes that are shown
                to users on the track selection page.  (Currently, “credit” modes
                aren’t available to users until they complete the course, so
                they are hidden in track selection.)
        Returns:
            list of `Mode` tuples
        “””
跟踪到此,发现默认的课程的类型为”audit”,改为其他类型即可。见common/djangoapps/course_modes/models.py中的DEFAULT_MODE定义,其设置来源于settings.py文件。修改lms/envs和cms/envs中的common.py文件即可。修改内容如下:
COURSE_MODE_DEFAULTS = {
    ‘bulk_sku’: None,
    ‘currency’: ‘usd’,
    ‘description’: None,
    ‘expiration_datetime’: None,
    ‘min_price’: 0,
    ‘name’: _(‘Audit’),
    ‘sku’: None,
    #’slug’: ‘audit’,
    ‘slug’: ‘honor’,             #必须使用honor否则会出现问题
    ‘suggested_prices’: ”,
}
完成后重启edxapp,此时cms的证书菜单已经可以使用并添加证书。

发表评论

电子邮件地址不会被公开。 必填项已用*标注