diff --git a/common/djangoapps/enrollment/tests/test_views.py b/common/djangoapps/enrollment/tests/test_views.py index 45d13e3a32..7b211f6c26 100644 --- a/common/djangoapps/enrollment/tests/test_views.py +++ b/common/djangoapps/enrollment/tests/test_views.py @@ -1064,23 +1064,6 @@ class EnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase, Ente self.assertEqual(enrollment.mode, mode) self.assertEqual(enrollment.attributes.get(namespace='order', name='order_number').value, order_number) - # Updating an enrollment should update attributes (for audit mode enrollments also) - order_number = 'EDX-3000' - enrollment_attributes = [{ - 'namespace': 'order', - 'name': 'order_number', - 'value': order_number, - }] - self.assert_enrollment_status( - as_server=True, - mode='audit', - enrollment_attributes=enrollment_attributes - ) - enrollment.refresh_from_db() - self.assertTrue(enrollment.is_active) - self.assertEqual(enrollment.mode, mode) - self.assertEqual(enrollment.attributes.get(namespace='order', name='order_number').value, order_number) - @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') class EnrollmentEmbargoTest(EnrollmentTestMixin, UrlResetMixin, ModuleStoreTestCase): diff --git a/common/djangoapps/enrollment/views.py b/common/djangoapps/enrollment/views.py index 891d5a5874..85d518b9f9 100644 --- a/common/djangoapps/enrollment/views.py +++ b/common/djangoapps/enrollment/views.py @@ -747,16 +747,13 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn): mode_changed = enrollment and mode is not None and enrollment['mode'] != mode active_changed = enrollment and is_active is not None and enrollment['is_active'] != is_active missing_attrs = [] - audit_with_order = False if enrollment_attributes: actual_attrs = [ u"{namespace}:{name}".format(**attr) for attr in enrollment_attributes ] missing_attrs = set(REQUIRED_ATTRIBUTES.get(mode, [])) - set(actual_attrs) - audit_with_order = mode == 'audit' and 'order:order_number' in actual_attrs - # Remove audit_with_order when no longer needed - implemented for REV-141 - if has_api_key_permissions and (mode_changed or active_changed or audit_with_order): + if has_api_key_permissions and (mode_changed or active_changed): if mode_changed and active_changed and not is_active: # if the requester wanted to deactivate but specified the wrong mode, fail # the request (on the assumption that the requester had outdated information diff --git a/lms/djangoapps/mobile_api/users/views.py b/lms/djangoapps/mobile_api/users/views.py index 1799ec57dc..ed80649d52 100644 --- a/lms/djangoapps/mobile_api/users/views.py +++ b/lms/djangoapps/mobile_api/users/views.py @@ -18,7 +18,6 @@ from courseware.courses import get_current_child from courseware.model_data import FieldDataCache from courseware.module_render import get_module_for_descriptor from courseware.views.index import save_positions_recursively_up -from experiments.models import ExperimentData, ExperimentKeyValue from lms.djangoapps.courseware.access_utils import ACCESS_GRANTED from mobile_api.utils import API_V05 from openedx.features.course_duration_limits.access import check_course_expired @@ -289,44 +288,6 @@ class UserCourseEnrollmentsList(generics.ListAPIView): """ return check_org is None or (check_org.lower() == course_org.lower()) - def hide_course_for_enrollment_fee_experiment(self, user, enrollment, experiment_id=9): - """ - Hide enrolled courses from mobile app as part of REV-73/REV-19 - """ - course_key = enrollment.course_overview.id - try: - courses_excluded_from_mobile = ExperimentKeyValue.objects.get( - experiment_id=10, - key="mobile_app_exclusion" - ).value - courses_excluded_from_mobile = json.loads(courses_excluded_from_mobile.replace('\r', '').replace('\n', '')) - if enrollment.mode == 'audit' and str(course_key) in courses_excluded_from_mobile.keys(): - activationTime = dateparse.parse_datetime(courses_excluded_from_mobile[str(course_key)]) - if activationTime and enrollment.created and enrollment.created > activationTime: - return True - except (ExperimentKeyValue.DoesNotExist, AttributeError): - pass - - try: - ExperimentData.objects.get( - user=user, - experiment_id=experiment_id, - key='enrolled_{0}'.format(course_key), - ) - except ExperimentData.DoesNotExist: - return False - - try: - ExperimentData.objects.get( - user=user, - experiment_id=experiment_id, - key='paid_{0}'.format(course_key), - ) - except ExperimentData.DoesNotExist: - return True - - return False - def get_serializer_context(self): context = super(UserCourseEnrollmentsList, self).get_serializer_context() context['api_version'] = self.kwargs.get('api_version') @@ -354,12 +315,8 @@ class UserCourseEnrollmentsList(generics.ListAPIView): enrollment for enrollment in same_org if is_mobile_available_for_user(self.request.user, enrollment.course_overview) ) - not_hidden_for_experiments = ( - enrollment for enrollment in mobile_available - if not self.hide_course_for_enrollment_fee_experiment(self.request.user, enrollment) - ) not_duration_limited = ( - enrollment for enrollment in not_hidden_for_experiments + enrollment for enrollment in mobile_available if check_course_expired(self.request.user, enrollment.course) == ACCESS_GRANTED ) diff --git a/lms/static/js/dashboard/legacy.js b/lms/static/js/dashboard/legacy.js index e475cefdd2..28d93102ce 100644 --- a/lms/static/js/dashboard/legacy.js +++ b/lms/static/js/dashboard/legacy.js @@ -86,29 +86,26 @@ function setDialogAttributes(isPaidCourse, certNameLong, courseNumber, courseName, enrollmentMode, showRefundOption, courseKey) { - // This flag is added for REV-19 experiment - var auditRefundableCourses = (window.experimentVariables || {}).auditRefundableCourses, - courseInExperiment = auditRefundableCourses ? auditRefundableCourses.indexOf(courseKey) > -1 : false, - diagAttr = {}; + var diagAttr = {}; - if (isPaidCourse || courseInExperiment) { + if (isPaidCourse) { if (showRefundOption) { diagAttr['data-refund-info'] = gettext('You will be refunded the amount you paid.'); } else { diagAttr['data-refund-info'] = gettext('You will not be refunded the amount you paid.'); } diagAttr['data-track-info'] = gettext('Are you sure you want to unenroll from the purchased course ' + - '%(courseName)s (%(courseNumber)s)?'); + '{courseName} ({courseNumber})?'); } else if (enrollmentMode !== 'verified') { - diagAttr['data-track-info'] = gettext('Are you sure you want to unenroll from %(courseName)s ' + - '(%(courseNumber)s)?'); + diagAttr['data-track-info'] = gettext('Are you sure you want to unenroll from {courseName} ' + + '({courseNumber})?'); } else if (showRefundOption) { diagAttr['data-track-info'] = gettext('Are you sure you want to unenroll from the verified ' + - '%(certNameLong)s track of %(courseName)s (%(courseNumber)s)?'); + '{certNameLong} track of {courseName} ({courseNumber})?'); diagAttr['data-refund-info'] = gettext('You will be refunded the amount you paid.'); } else { diagAttr['data-track-info'] = gettext('Are you sure you want to unenroll from the verified ' + - '%(certNameLong)s track of %(courseName)s (%(courseNumber)s)?'); + '{certNameLong} track of {courseName} ({courseNumber})?'); diagAttr['data-refund-info'] = gettext('The refund deadline for this course has passed,' + 'so you will not receive a refund.'); } @@ -158,11 +155,26 @@ $('#track-info').empty(); $('#refund-info').empty(); - $('#track-info').html(interpolate(dialogMessageAttr['data-track-info'], { - courseNumber: ['', courseNumber, ''].join(''), - courseName: ['', courseName, ''].join(''), - certNameLong: ['', certNameLong, ''].join('') - }, true)); + edx.HtmlUtils.setHtml( + $('#track-info'), + edx.HtmlUtils.interpolateHtml(dialogMessageAttr['data-track-info'], { + courseNumber: edx.HtmlUtils.joinHtml( + edx.HtmlUtils.HTML(''), + courseNumber, + edx.HtmlUtils.HTML('') + ), + courseName: edx.HtmlUtils.joinHtml( + edx.HtmlUtils.HTML(''), + courseName, + edx.HtmlUtils.HTML('') + ), + certNameLong: edx.HtmlUtils.joinHtml( + edx.HtmlUtils.HTML(''), + certNameLong, + edx.HtmlUtils.HTML('') + ) + }, true) + ); if ('data-refund-info' in dialogMessageAttr) {