Merge pull request #23963 from edx/ndalfonso/AA-157-dates-page-missed-deadlines
AA-157 dates page missed deadlines
This commit is contained in:
@@ -1043,6 +1043,8 @@ def dates(request, course_id):
|
||||
Display the course's dates.html, or 404 if there is no such course.
|
||||
Assumes the course_id is in a valid format.
|
||||
"""
|
||||
from lms.urls import COURSE_DATES_NAME, RESET_COURSE_DEADLINES_NAME
|
||||
|
||||
course_key = CourseKey.from_string(course_id)
|
||||
|
||||
# Enable NR tracing for this view based on course
|
||||
@@ -1076,6 +1078,10 @@ def dates(request, course_id):
|
||||
user_timezone = user_timezone_locale['user_timezone']
|
||||
user_language = user_timezone_locale['user_language']
|
||||
|
||||
display_reset_dates_text = False
|
||||
if RELATIVE_DATES_FLAG.is_enabled(course.id):
|
||||
display_reset_dates_text = reset_deadlines_banner_should_display(course_key, request)
|
||||
|
||||
context = {
|
||||
'course': course,
|
||||
'course_date_blocks': course_date_blocks,
|
||||
@@ -1086,6 +1092,10 @@ def dates(request, course_id):
|
||||
'supports_preview_menu': True,
|
||||
'can_masquerade': can_masquerade,
|
||||
'masquerade': masquerade,
|
||||
'display_reset_dates_text': display_reset_dates_text,
|
||||
'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)}
|
||||
}
|
||||
|
||||
return render_to_response('courseware/dates.html', context)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
padding: 24px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 24px;
|
||||
justify-content: space-between;
|
||||
max-width: $text-width-readability-max;
|
||||
|
||||
.upgrade-banner-text {
|
||||
@@ -26,6 +26,7 @@
|
||||
line-height: 24px;
|
||||
color: #414141;
|
||||
flex: 1 1 20em;
|
||||
max-width: 70%;
|
||||
}
|
||||
|
||||
.upgrade-button {
|
||||
|
||||
@@ -30,19 +30,43 @@ from openedx.core.djangolib.markup import HTML, Text
|
||||
% if has_locked_assignments and verified_upgrade_link:
|
||||
<div class="upgrade-banner">
|
||||
<div class="upgrade-banner-text">
|
||||
<strong>${_('You are auditing this course.')}</strong>
|
||||
${_('This means that you are unable to participate in graded assignments.')}
|
||||
${_('To complete graded assignments as part of this course, you can upgrade today.')}
|
||||
<strong>${_('You are auditing this course,')}</strong>
|
||||
${_(' which means that you are unable to participate in graded assignments.')}
|
||||
% if display_reset_dates_text:
|
||||
${_(' It looks like you missed some important deadlines based on our suggested schedule. To complete graded assignments as part of this course and shift the past due assignments into the future, you can upgrade today.')}
|
||||
% else:
|
||||
${_(' To complete graded assignments as part of this course, you can upgrade today.')}
|
||||
% endif
|
||||
</div>
|
||||
<div class="upgrade-button">
|
||||
<a href="${verified_upgrade_link}">
|
||||
<button type="button">
|
||||
${_('Upgrade now')}
|
||||
% if display_reset_dates_text:
|
||||
${_('Upgrade to shift due dates')}
|
||||
% else:
|
||||
${_('Upgrade now')}
|
||||
% endif
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
% endif
|
||||
% if display_reset_dates_text and learner_is_verified:
|
||||
<div class="upgrade-banner">
|
||||
<div class="upgrade-banner-text">
|
||||
<strong>${_('It looks like you missed some important deadlines based on our suggested schedule.')}</strong>
|
||||
${_('To keep yourself on track, you can update this schedule and shift the past due assignments into the future. Don’t worry—you won’t lose any of the progress you’ve made when you shift your due dates. ')}
|
||||
</div>
|
||||
<div class="upgrade-button">
|
||||
<form method="post" action="${reset_deadlines_url}">
|
||||
<input type="hidden" id="csrf_token" name="csrfmiddlewaretoken" value="${csrf_token}">
|
||||
<input type="hidden" name="reset_deadlines_redirect_url_base" value="${reset_deadlines_redirect_url_base}">
|
||||
<input type="hidden" name="reset_deadlines_redirect_url_id_dict" value="${reset_deadlines_redirect_url_id_dict}">
|
||||
<button class="upgrade-button">${_("Reset my deadlines")}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
% endif
|
||||
|
||||
<% due_next_set = False %>
|
||||
% for block in course_date_blocks:
|
||||
|
||||
@@ -57,6 +57,7 @@ from util import views as util_views
|
||||
|
||||
RESET_COURSE_DEADLINES_NAME = 'reset_course_deadlines'
|
||||
RENDER_XBLOCK_NAME = 'render_xblock'
|
||||
COURSE_DATES_NAME = 'dates'
|
||||
|
||||
if settings.DEBUG or settings.FEATURES.get('ENABLE_DJANGO_ADMIN_SITE'):
|
||||
django_autodiscover()
|
||||
@@ -486,7 +487,7 @@ urlpatterns += [
|
||||
settings.COURSE_ID_PATTERN,
|
||||
),
|
||||
courseware_views.dates,
|
||||
name='dates',
|
||||
name=COURSE_DATES_NAME,
|
||||
),
|
||||
|
||||
# Takes optional student_id for instructor use--shows profile as that student sees it.
|
||||
|
||||
@@ -6,6 +6,7 @@ Common utilities for the course experience, including course outline.
|
||||
from datetime import timedelta
|
||||
|
||||
from completion.models import BlockCompletion
|
||||
from django.db.models import Q
|
||||
from django.utils import timezone
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from six.moves import range
|
||||
@@ -266,9 +267,11 @@ def reset_deadlines_banner_should_display(course_key, request):
|
||||
request.user and course_overview and has_access(request.user, 'staff', course_overview, course_overview.id)
|
||||
)
|
||||
if is_self_paced and (not is_course_staff) and (not course_end_date or timezone.now() < course_end_date):
|
||||
if (CourseEnrollment.objects.filter(
|
||||
course=course_overview, user=request.user, mode=CourseMode.VERIFIED
|
||||
).exists()):
|
||||
if CourseEnrollment.objects.filter(
|
||||
course=course_overview, user=request.user,
|
||||
).filter(
|
||||
Q(mode=CourseMode.AUDIT) | Q(mode=CourseMode.VERIFIED)
|
||||
).exists():
|
||||
course_block_tree = get_course_outline_block_tree(
|
||||
request, str(course_key), request.user
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user