Only prompt to upgrade in order to completed graded content (or shift dates) when content_type_gating is enabled
This commit is contained in:
@@ -67,7 +67,7 @@ class DatesTabView(RetrieveAPIView):
|
||||
course_key = CourseKey.from_string(course_key_string)
|
||||
course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=False)
|
||||
blocks = get_course_date_blocks(course, request.user, request, include_access=True, include_past_dates=True)
|
||||
display_reset_dates_text, _ = dates_banner_should_display(course_key, request)
|
||||
display_reset_dates_text = dates_banner_should_display(course_key, request)
|
||||
|
||||
learner_is_verified = False
|
||||
enrollment = get_enrollment(request.user.username, course_key_string)
|
||||
|
||||
@@ -1063,7 +1063,7 @@ def dates(request, course_id):
|
||||
user_timezone = user_timezone_locale['user_timezone']
|
||||
user_language = user_timezone_locale['user_language']
|
||||
|
||||
missed_deadlines, enrollment_mode = dates_banner_should_display(course_key, request)
|
||||
missed_deadlines = dates_banner_should_display(course_key, request)
|
||||
|
||||
context = {
|
||||
'course': course,
|
||||
@@ -1081,7 +1081,6 @@ def dates(request, course_id):
|
||||
course_key=course_key,
|
||||
),
|
||||
'missed_deadlines': missed_deadlines,
|
||||
'enrollment_mode': enrollment_mode,
|
||||
'reset_deadlines_url': reverse(RESET_COURSE_DEADLINES_NAME),
|
||||
'reset_deadlines_redirect_url_base': COURSE_DATES_NAME,
|
||||
'reset_deadlines_redirect_url_id_dict': {'course_id': str(course.id)}
|
||||
@@ -1667,7 +1666,7 @@ def render_xblock(request, usage_key_string, check_if_enrolled=True):
|
||||
'mark-completed-on-view-after-delay': completion_service.get_complete_on_view_delay_ms()
|
||||
}
|
||||
|
||||
missed_deadlines, enrollment_mode = dates_banner_should_display(course_key, request)
|
||||
missed_deadlines = dates_banner_should_display(course_key, request)
|
||||
|
||||
context = {
|
||||
'fragment': block.render('student_view', context=student_view_context),
|
||||
@@ -1682,7 +1681,6 @@ def render_xblock(request, usage_key_string, check_if_enrolled=True):
|
||||
'staff_access': bool(request.user.has_perm(VIEW_XQA_INTERFACE, course)),
|
||||
'xqa_server': settings.FEATURES.get('XQA_SERVER', 'http://your_xqa_server.com'),
|
||||
'missed_deadlines': missed_deadlines,
|
||||
'enrollment_mode': enrollment_mode,
|
||||
'web_app_course_url': reverse(COURSE_HOME_VIEW_NAME, args=[course.id]),
|
||||
'on_courseware_page': True,
|
||||
'content_type_gating_enabled': ContentTypeGatingConfig.enabled_for_enrollment(
|
||||
|
||||
@@ -17,9 +17,6 @@ from course_modes.models import CourseMode
|
||||
</div>
|
||||
% endif
|
||||
<%
|
||||
has_locked_assignments = any(hasattr(block, 'contains_gated_content') and block.contains_gated_content for block in course_date_blocks if isinstance(block, CourseAssignmentDate)) if (course_date_blocks and on_dates_tab) else False
|
||||
is_verified = enrollment_mode == CourseMode.VERIFIED
|
||||
is_audit = enrollment_mode == CourseMode.AUDIT
|
||||
additional_styling_class = 'on-mobile' if is_mobile_app else 'has-button'
|
||||
%>
|
||||
|
||||
@@ -98,13 +95,13 @@ additional_styling_class = 'on-mobile' if is_mobile_app else 'has-button'
|
||||
% endif
|
||||
</div>
|
||||
</%def>
|
||||
% if on_dates_tab and is_audit and has_locked_assignments and not missed_deadlines:
|
||||
% if on_dates_tab and content_type_gating_enabled and not missed_deadlines:
|
||||
${upgrade_to_complete_graded_banner()}
|
||||
% elif missed_deadlines:
|
||||
% if is_verified:
|
||||
${reset_dates_banner()}
|
||||
% elif is_audit:
|
||||
% if content_type_gating_enabled:
|
||||
${upgrade_to_reset_banner()}
|
||||
% else:
|
||||
${reset_dates_banner()}
|
||||
% endif
|
||||
% endif
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ from waffle.models import Switch
|
||||
from waffle.testutils import override_switch
|
||||
|
||||
from course_modes.models import CourseMode
|
||||
from course_modes.tests.factories import CourseModeFactory
|
||||
from lms.djangoapps.courseware.tests.factories import StaffFactory
|
||||
from lms.urls import RESET_COURSE_DEADLINES_NAME
|
||||
from gating import api as lms_gating_api
|
||||
@@ -33,6 +34,7 @@ from openedx.core.djangoapps.schedules.models import Schedule
|
||||
from openedx.core.djangoapps.schedules.tests.factories import ScheduleFactory
|
||||
from openedx.core.lib.gating import api as gating_api
|
||||
from openedx.features.course_experience import RELATIVE_DATES_FLAG
|
||||
from openedx.features.content_type_gating.models import ContentTypeGatingConfig
|
||||
from openedx.features.course_experience.views.course_outline import (
|
||||
DEFAULT_COMPLETION_TRACKING_START,
|
||||
CourseOutlineFragmentView
|
||||
@@ -170,20 +172,29 @@ class TestCourseOutlinePage(SharedModuleStoreTestCase):
|
||||
|
||||
@RELATIVE_DATES_FLAG.override(active=True)
|
||||
@ddt.data(
|
||||
(CourseMode.AUDIT, False, True),
|
||||
(CourseMode.VERIFIED, False, True),
|
||||
(CourseMode.MASTERS, False, False),
|
||||
(CourseMode.VERIFIED, True, False),
|
||||
([CourseMode.AUDIT, CourseMode.VERIFIED], CourseMode.AUDIT, False, True),
|
||||
([CourseMode.AUDIT, CourseMode.VERIFIED], CourseMode.VERIFIED, False, True),
|
||||
([CourseMode.AUDIT, CourseMode.VERIFIED, CourseMode.MASTERS], CourseMode.MASTERS, False, True),
|
||||
([CourseMode.PROFESSIONAL], CourseMode.PROFESSIONAL, False, True),
|
||||
([CourseMode.AUDIT, CourseMode.VERIFIED], CourseMode.VERIFIED, True, False),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_reset_course_deadlines_banner_shows_for_self_paced_course(
|
||||
self,
|
||||
course_modes,
|
||||
enrollment_mode,
|
||||
is_course_staff,
|
||||
should_display
|
||||
):
|
||||
ContentTypeGatingConfig.objects.create(
|
||||
enabled=True,
|
||||
enabled_as_of=datetime.datetime(2018, 1, 1),
|
||||
)
|
||||
course = self.courses[0]
|
||||
enrollment = CourseEnrollment.objects.get(course_id=course.id)
|
||||
for mode in course_modes:
|
||||
CourseModeFactory.create(course_id=course.id, mode_slug=mode)
|
||||
|
||||
enrollment = CourseEnrollment.objects.get(course_id=course.id, user=self.user)
|
||||
enrollment.mode = enrollment_mode
|
||||
enrollment.save()
|
||||
self.user.is_staff = is_course_staff
|
||||
|
||||
@@ -97,15 +97,9 @@ class CourseOutlineFragmentView(EdxFragmentView):
|
||||
reset_deadlines_url = reverse(RESET_COURSE_DEADLINES_NAME)
|
||||
reset_deadlines_redirect_url_base = COURSE_HOME_VIEW_NAME
|
||||
|
||||
course_enrollment = None
|
||||
if not request.user.is_anonymous:
|
||||
course_enrollment = CourseEnrollment.objects.filter(course=course_overview, user=request.user).filter(
|
||||
Q(mode=CourseMode.AUDIT) | Q(mode=CourseMode.VERIFIED)).first()
|
||||
|
||||
context['reset_deadlines_url'] = reset_deadlines_url
|
||||
context['reset_deadlines_redirect_url_base'] = reset_deadlines_redirect_url_base
|
||||
context['reset_deadlines_redirect_url_id_dict'] = {'course_id': str(course.id)}
|
||||
context['enrollment_mode'] = getattr(course_enrollment, 'mode', None)
|
||||
context['verified_upgrade_link'] = verified_upgrade_deadline_link(request.user, course=course)
|
||||
context['on_course_outline_page'] = True
|
||||
context['content_type_gating_enabled'] = ContentTypeGatingConfig.enabled_for_enrollment(
|
||||
|
||||
Reference in New Issue
Block a user