diff --git a/cms/djangoapps/contentstore/api/tests/test_quality.py b/cms/djangoapps/contentstore/api/tests/test_quality.py index 0ef6720db9dae17811b21cbd402bc19d37761e2a..4addfed5be54743ba3b3b366ad30cade916851b1 100644 --- a/cms/djangoapps/contentstore/api/tests/test_quality.py +++ b/cms/djangoapps/contentstore/api/tests/test_quality.py @@ -125,6 +125,7 @@ class CourseQualityViewTest(SharedModuleStoreTestCase, APITestCase): 'total_visible': 1, 'total_number': 1, 'highlights_enabled': False, + 'highlights_active_for_course': False, }, 'subsections': { 'num_with_one_block_type': 1, diff --git a/cms/djangoapps/contentstore/api/tests/test_validation.py b/cms/djangoapps/contentstore/api/tests/test_validation.py index 87b580d7bc43a680c33cc2dd0fc99100849da74b..d7036e26c31f6efbcfafc0f398bbc94a48b5958d 100644 --- a/cms/djangoapps/contentstore/api/tests/test_validation.py +++ b/cms/djangoapps/contentstore/api/tests/test_validation.py @@ -92,6 +92,7 @@ class CourseValidationViewTest(SharedModuleStoreTestCase, APITestCase): 'has_update': True, }, 'certificates': { + 'is_enabled': True, 'is_activated': False, 'has_certificate': False, }, @@ -101,5 +102,4 @@ class CourseValidationViewTest(SharedModuleStoreTestCase, APITestCase): }, 'is_self_paced': True, } - self.assertDictEqual(resp.data, expected_data) diff --git a/cms/djangoapps/contentstore/api/views/course_quality.py b/cms/djangoapps/contentstore/api/views/course_quality.py index e2ecfc841aae381508cb94f3e15b836145c860cc..4bff8e3c2dc3a842cdf2ffb14ff7b3da3cd5accf 100644 --- a/cms/djangoapps/contentstore/api/views/course_quality.py +++ b/cms/djangoapps/contentstore/api/views/course_quality.py @@ -5,6 +5,7 @@ from scipy import stats from rest_framework.generics import GenericAPIView from rest_framework.response import Response +from contentstore.views.item import highlights_setting from edxval.api import get_videos_for_course from openedx.core.djangoapps.request_cache.middleware import request_cached from openedx.core.lib.api.view_utils import DeveloperErrorViewMixin, view_auth_classes @@ -122,12 +123,13 @@ class CourseQualityView(DeveloperErrorViewMixin, GenericAPIView): def _sections_quality(self, course): sections, visible_sections = self._get_sections(course) - sections_with_highlights = [s for s in visible_sections if s.highlights] + sections_with_highlights = [section for section in visible_sections if section.highlights] return dict( total_number=len(sections), total_visible=len(visible_sections), number_with_highlights=len(sections_with_highlights), - highlights_enabled=course.highlights_enabled_for_messaging, + highlights_active_for_course=course.highlights_enabled_for_messaging, + highlights_enabled=highlights_setting.is_enabled(), ) def _subsections_quality(self, course, request): diff --git a/cms/djangoapps/contentstore/api/views/course_validation.py b/cms/djangoapps/contentstore/api/views/course_validation.py index b69b414561449e52bacc41cbd0fdef20b0959aff..a05704c0ad5d50ce29ba5459ce25708f112557f6 100644 --- a/cms/djangoapps/contentstore/api/views/course_validation.py +++ b/cms/djangoapps/contentstore/api/views/course_validation.py @@ -205,9 +205,11 @@ class CourseValidationView(DeveloperErrorViewMixin, GenericAPIView): def _certificates_validation(self, course): is_activated, certificates = CertificateManager.is_activated(course) + certificates_enabled = certificates is not None return dict( is_activated=is_activated, - has_certificate=len(certificates) > 0, + has_certificate=certificates_enabled and len(certificates) > 0, + is_enabled=certificates_enabled, ) def _updates_validation(self, course, request): diff --git a/cms/templates/checklists.html b/cms/templates/checklists.html index 8951a5c33de645eec2f0268744c5fa56ed778222..6c6bf24643a4200deb86f334ab4e09461d117121 100644 --- a/cms/templates/checklists.html +++ b/cms/templates/checklists.html @@ -2,11 +2,13 @@ <%inherit file="base.html" /> <%def name="online_help_token()"><% return "files" %></%def> <%! + from cms.djangoapps.contentstore import utils from cms.djangoapps.contentstore.config.waffle_utils import should_show_checklists_quality from django.core.urlresolvers import reverse from django.utils.translation import ugettext as _ from openedx.core.djangolib.markup import HTML, Text from openedx.core.djangolib.js_utils import js_escaped_string, dump_js_escaped_json + from util.course import has_certificates_enabled %> <%block name="title">${_("Checklists")}</%block> <%block name="bodyclass">is-signedin course view-checklists</%block> @@ -34,8 +36,12 @@ <div class="wrapper-content wrapper"> <div class="content"> <%static:studiofrontend entry="courseHealthCheck"> - <% - course_key = context_course.id + + <% + course_key = unicode(context_course.id) + certificates_url = '' + if has_certificates_enabled(context_course): + certificates_url = utils.reverse_course_url('certificates_list_handler', course_key) %> { "lang": "${language_code | n, js_escaped_string}", @@ -54,11 +60,11 @@ }, "enable_quality": ${should_show_checklists_quality(context_course.id) | n, dump_js_escaped_json}, "links": { - "certificates": ${reverse('certificates_list_handler', kwargs={'course_key_string': unicode(course_key)})| n, dump_js_escaped_json}, - "course_outline": ${reverse('course_handler', kwargs={'course_key_string': unicode(course_key)})| n, dump_js_escaped_json}, - "course_updates": ${reverse('course_info_handler', kwargs={'course_key_string': unicode(course_key)})| n, dump_js_escaped_json}, - "grading_policy": ${reverse('grading_handler', kwargs={'course_key_string': unicode(course_key)})| n, dump_js_escaped_json}, - "settings": ${reverse('settings_handler', kwargs={'course_key_string': unicode(course_key)})| n, dump_js_escaped_json} + "certificates": ${certificates_url | n, dump_js_escaped_json}, + "course_outline": ${utils.reverse_course_url('course_handler', course_key) | n, dump_js_escaped_json}, + "course_updates": ${utils.reverse_course_url('course_info_handler', course_key) | n, dump_js_escaped_json}, + "grading_policy": ${utils.reverse_course_url('grading_handler', course_key) | n, dump_js_escaped_json}, + "settings": ${utils.reverse_course_url('settings_handler', course_key) | n, dump_js_escaped_json} } } </%static:studiofrontend> diff --git a/common/djangoapps/util/course.py b/common/djangoapps/util/course.py index f4405d89025f89a1753d9358a68f531f9a1f3ef0..598e7034568e7f29e0ca34033f38ea18e6b7ff91 100644 --- a/common/djangoapps/util/course.py +++ b/common/djangoapps/util/course.py @@ -57,3 +57,14 @@ def get_link_for_about_page(course): ) return course_about_url + + +def has_certificates_enabled(course): + """ + Arguments: + course: This can be either a course overview object or a course descriptor. + Returns a boolean if the course has enabled certificates + """ + if not settings.FEATURES.get('CERTIFICATES_HTML_VIEW', False): + return False + return course.cert_html_view_enabled