Skip to content

Commit 35da94d

Browse files
dwong2708marlonkeating
authored andcommitted
fix: certificates_enabled flag now correctly returns its boolean value
1 parent 062958c commit 35da94d

4 files changed

Lines changed: 26 additions & 7 deletions

File tree

cms/djangoapps/contentstore/api/tests/test_validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def test_staff_succeeds(self):
103103
'has_update': True,
104104
},
105105
'certificates': {
106-
'is_enabled': True,
106+
'is_enabled': False,
107107
'is_activated': False,
108108
'has_certificate': False,
109109
},

cms/djangoapps/contentstore/api/views/course_validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def _grades_validation(self, course):
217217

218218
def _certificates_validation(self, course):
219219
is_activated, certificates = CertificateManager.is_activated(course)
220-
certificates_enabled = certificates is not None
220+
certificates_enabled = CertificateManager.is_enabled(course)
221221
return dict(
222222
is_activated=is_activated,
223223
has_certificate=certificates_enabled and len(certificates) > 0,

cms/djangoapps/contentstore/utils.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2124,11 +2124,7 @@ def get_certificates_context(course, user):
21242124
handler_name='certificate_activation_handler',
21252125
course_key=course_key
21262126
)
2127-
course_modes = [
2128-
mode.slug for mode in CourseMode.modes_for_course(
2129-
course_id=course_key, include_expired=True
2130-
) if mode.slug != 'audit'
2131-
]
2127+
course_modes = CertificateManager.get_course_modes(course)
21322128

21332129
has_certificate_modes = len(course_modes) > 0
21342130

cms/djangoapps/contentstore/views/certificates.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from django.utils.translation import gettext as _
3535
from django.views.decorators.csrf import ensure_csrf_cookie
3636
from django.views.decorators.http import require_http_methods
37+
from common.djangoapps.course_modes.models import CourseMode
3738
from eventtracking import tracker
3839
from opaque_keys import InvalidKeyError
3940
from opaque_keys.edx.keys import AssetKey, CourseKey
@@ -271,6 +272,28 @@ def get_certificates(course, only_active=False):
271272
certificates = [certificate for certificate in certificates if certificate.get('is_active', False)]
272273
return certificates
273274

275+
@staticmethod
276+
def get_course_modes(course):
277+
"""
278+
Retrieve certificate modes for the given course,
279+
including expired modes but excluding audit mode.
280+
"""
281+
course_modes = [
282+
mode.slug for mode in CourseMode.modes_for_course(
283+
course=course, include_expired=True
284+
) if mode.slug != CourseMode.AUDIT
285+
]
286+
return course_modes
287+
288+
@staticmethod
289+
def is_enabled(course):
290+
"""
291+
Is enabled when there is at least one course mode for the given course,
292+
including expired modes but excluding audit mode
293+
"""
294+
course_modes = CertificateManager.get_course_modes(course)
295+
return len(course_modes) > 0
296+
274297
@staticmethod
275298
def remove_certificate(request, store, course, certificate_id):
276299
"""

0 commit comments

Comments
 (0)