AA-85 mobile reset dates
- render reset dates banner in webview for mobile app. - improve banner redirect mechanism
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)]))
|
||||
|
||||
Reference in New Issue
Block a user