AA-85 mobile reset dates

- render reset dates banner in webview for mobile app.
- improve banner redirect mechanism
This commit is contained in:
Nicholas D'Alfonso
2020-03-30 11:35:02 -04:00
parent 18c5333a68
commit ac9d2bfd30
16 changed files with 245 additions and 69 deletions

View File

@@ -5,9 +5,14 @@ Fragment for rendering the course dates sidebar.
from django.http import Http404
from django.template.loader import render_to_string
from django.urls import reverse
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import ensure_csrf_cookie
from django.utils.translation import get_language_bidi
from opaque_keys.edx.keys import CourseKey
from web_fragments.fragment import Fragment
from openedx.features.course_experience import RELATIVE_DATES_FLAG
from openedx.features.course_experience.utils import reset_deadlines_banner_should_display
from lms.djangoapps.courseware.courses import get_course_date_blocks, get_course_with_access
from openedx.core.djangoapps.plugin_api.views import EdxFragmentView
@@ -49,10 +54,10 @@ class CourseDatesFragmentMobileView(CourseDatesFragmentView):
"""
template_name = 'course_experience/mobile/course-dates-fragment.html'
@method_decorator(ensure_csrf_cookie)
def get(self, request, *args, **kwargs):
if not request.user.is_authenticated:
raise Http404
print('****************', CourseDatesFragmentMobileView.__dict__)
return super(CourseDatesFragmentMobileView, self).get(request, *args, **kwargs)
def css_dependencies(self):
@@ -67,3 +72,37 @@ class CourseDatesFragmentMobileView(CourseDatesFragmentView):
return self.get_css_dependencies('style-mobile-rtl')
else:
return self.get_css_dependencies('style-mobile')
def render_to_fragment(self, request, course_id=None, **kwargs):
"""
Render the course dates fragment.
"""
from lms.urls import RESET_COURSE_DEADLINES_NAME
from openedx.features.course_experience.urls import COURSE_DATES_FRAGMENT_VIEW_NAME
course_key = CourseKey.from_string(course_id)
course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=False)
course_date_blocks = get_course_date_blocks(course, request.user, request, num_assignments=2)
display_reset_dates_banner = False
if RELATIVE_DATES_FLAG.is_enabled(course.id):
display_reset_dates_banner = reset_deadlines_banner_should_display(course_key, request)
reset_deadlines_url = reverse(RESET_COURSE_DEADLINES_NAME) if display_reset_dates_banner else None
reset_deadlines_redirect_url_base = COURSE_DATES_FRAGMENT_VIEW_NAME if (
reset_deadlines_url) else None
context = {
'course_date_blocks': [block for block in course_date_blocks if block.title != 'current_datetime'],
'display_reset_dates_banner': display_reset_dates_banner,
'reset_deadlines_url': reset_deadlines_url,
'reset_deadlines_redirect_url_base': reset_deadlines_redirect_url_base,
'reset_deadlines_redirect_url_id_dict': {'course_id': course_id}
}
html = render_to_string(self.template_name, context)
dates_fragment = Fragment(html)
self.add_fragment_resource_urls(dates_fragment)
return dates_fragment

View File

@@ -160,24 +160,3 @@ class CourseOutlineFragmentView(EdxFragmentView):
if children:
children[0]['resume_block'] = True
self.mark_first_unit_to_resume(children[0])
@ensure_csrf_cookie
def reset_course_deadlines(request, course_id):
"""
Set the start_date of a schedule to today, which in turn will adjust due dates for
sequentials belonging to a self paced course
"""
course_key = CourseKey.from_string(course_id)
masquerade_details, masquerade_user = setup_masquerade(
request,
course_key,
has_access(request.user, 'staff', course_key)
)
if masquerade_details and masquerade_details.role == 'student' and masquerade_details.user_name:
# Masquerading as a specific student, so reset that student's schedule
user = masquerade_user
else:
user = request.user
reset_self_paced_schedule(user, course_key)
return redirect(reverse('openedx.course_experience.course_home', args=[six.text_type(course_key)]))