repairs https://openedx.atlassian.net/browse/TNL-2007 and https://openedx.atlassian.net/browse/TNL-2009 Original Commit Messages: Update ccx dashboard display to match new course display Fix display of CCX dates on dashboard to use dates from the CCX instead of the related course. The fix is implemented by providing date- and course-related APIs on the CCX object itself. These APIs are mimicked from the same APIs available on a course descriptor. bring the methods for printing start and end datetimes into line with course by adding UTC under the proper circumstances add test coverage for new APIs defined on the CCX model fix quality violation
217 lines
8.4 KiB
HTML
217 lines
8.4 KiB
HTML
<%! from django.utils.translation import ugettext as _ %>
|
|
<%! from django.template import RequestContext %>
|
|
<%! import third_party_auth %>
|
|
<%! from third_party_auth import pipeline %>
|
|
<%! from microsite_configuration import microsite %>
|
|
|
|
<%!
|
|
from django.core.urlresolvers import reverse
|
|
%>
|
|
|
|
<%
|
|
cert_name_short = settings.CERT_NAME_SHORT
|
|
cert_name_long = settings.CERT_NAME_LONG
|
|
%>
|
|
|
|
<%inherit file="main.html" />
|
|
|
|
<%namespace name='static' file='static_content.html'/>
|
|
|
|
<%block name="pagetitle">${_("Dashboard")}</%block>
|
|
<%block name="bodyclass">view-dashboard is-authenticated</%block>
|
|
<%block name="nav_skip">#my-courses</%block>
|
|
|
|
<%block name="header_extras">
|
|
% for template_name in ["donation"]:
|
|
<script type="text/template" id="${template_name}-tpl">
|
|
<%static:include path="dashboard/${template_name}.underscore" />
|
|
</script>
|
|
% endfor
|
|
</%block>
|
|
|
|
<%block name="js_extra">
|
|
<%static:js group='dashboard'/>
|
|
<script type="text/javascript">
|
|
$(document).ready(function() {
|
|
edx.dashboard.legacy.init({
|
|
dashboard: "${reverse('dashboard')}",
|
|
signInUser: "${reverse('signin_user')}",
|
|
changeEmailSettings: "${reverse('change_email_settings')}",
|
|
verifyToggleBannerFailedOff: "${reverse('verify_student_toggle_failed_banner_off')}",
|
|
});
|
|
});
|
|
</script>
|
|
</%block>
|
|
|
|
<div class="dashboard-notifications" tabindex="-1">
|
|
% if reverifications["must_reverify"] or reverifications["denied"]:
|
|
## Section Element must be outside of the re-verify template. The template is re-used for courseware, and has separate styling.
|
|
<section class="dashboard-banner">
|
|
<%include file='dashboard/_dashboard_prompt_midcourse_reverify.html' />
|
|
</section>
|
|
% endif
|
|
|
|
%if message:
|
|
<section class="dashboard-banner">
|
|
${message}
|
|
</section>
|
|
%endif
|
|
|
|
%if enrollment_message:
|
|
<section class="dashboard-banner">
|
|
${enrollment_message}
|
|
</section>
|
|
%endif
|
|
</div>
|
|
|
|
<section class="container dashboard" id="dashboard-main">
|
|
<section class="my-courses" id="my-courses" role="main" aria-label="Content">
|
|
<header class="wrapper-header-courses">
|
|
<h2 class="header-courses">${_("Current Courses")}</h2>
|
|
</header>
|
|
|
|
|
|
% if len(course_enrollment_pairs) > 0:
|
|
<ul class="listing-courses">
|
|
<% share_settings = settings.FEATURES.get('DASHBOARD_SHARE_SETTINGS', {}) %>
|
|
% for dashboard_index, (course, enrollment) in enumerate(course_enrollment_pairs):
|
|
<% show_courseware_link = (course.id in show_courseware_links_for) %>
|
|
<% cert_status = cert_statuses.get(course.id) %>
|
|
<% show_email_settings = (course.id in show_email_settings_for) %>
|
|
<% course_mode_info = all_course_modes.get(course.id) %>
|
|
<% show_refund_option = (course.id in show_refund_option_for) %>
|
|
<% is_paid_course = (course.id in enrolled_courses_either_paid) %>
|
|
<% is_course_blocked = (course.id in block_courses) %>
|
|
<% course_verification_status = verification_status_by_course.get(course.id, {}) %>
|
|
<% course_requirements = courses_requirements_not_met.get(course.id) %>
|
|
<%include file='dashboard/_dashboard_course_listing.html' args="course=course, enrollment=enrollment, show_courseware_link=show_courseware_link, cert_status=cert_status, show_email_settings=show_email_settings, course_mode_info=course_mode_info, show_refund_option = show_refund_option, is_paid_course = is_paid_course, is_course_blocked = is_course_blocked, verification_status=course_verification_status, course_requirements=course_requirements, dashboard_index=dashboard_index, share_settings=share_settings" />
|
|
% endfor
|
|
|
|
% if settings.FEATURES.get('CUSTOM_COURSES_EDX', False):
|
|
% for ccx, membership, course in ccx_membership_triplets:
|
|
<% show_courseware_link = ccx.has_started() %>
|
|
<% is_course_blocked = False %>
|
|
<%include file='ccx/_dashboard_ccx_listing.html' args="ccx=ccx, membership=membership, course=course, show_courseware_link=show_courseware_link, is_course_blocked=is_course_blocked" />
|
|
% endfor
|
|
% endif
|
|
|
|
</ul>
|
|
% else:
|
|
<section class="empty-dashboard-message">
|
|
% if settings.FEATURES.get('COURSES_ARE_BROWSABLE'):
|
|
<p>${_("Looks like you haven't enrolled in any courses yet.")}</p>
|
|
<a href="${marketing_link('COURSES')}">
|
|
${_("Find courses now!")}
|
|
</a>
|
|
% else:
|
|
<p>${_("Looks like you haven't enrolled in any courses yet.")}</p>
|
|
%endif
|
|
</section>
|
|
% endif
|
|
|
|
% if staff_access and len(errored_courses) > 0:
|
|
<div id="course-errors">
|
|
<h2>${_("Course-loading errors")}</h2>
|
|
|
|
% for course_dir, errors in errored_courses.items():
|
|
<h3>${course_dir | h}</h3>
|
|
<ul>
|
|
% for (msg, err) in errors:
|
|
<li>${msg}
|
|
<ul><li><pre>${err}</pre></li></ul>
|
|
</li>
|
|
% endfor
|
|
</ul>
|
|
% endfor
|
|
</div>
|
|
% endif
|
|
</section>
|
|
<section class="profile-sidebar" role="region" aria-label="User info">
|
|
<section class="user-info">
|
|
<ul>
|
|
<li class="heads-up">
|
|
<span class="title">${_("Want to change your account settings?")}</span>
|
|
<span class="copy">${_("Click the arrow next to your username above.")}</span>
|
|
</li>
|
|
|
|
% if len(order_history_list):
|
|
<li class="order-history">
|
|
<span class="title">${_("Order History")}</span>
|
|
% for order_history_item in order_history_list:
|
|
<span><a href="${order_history_item['receipt_url']}" target="_blank" class="edit-name">${order_history_item['order_date']}</a></span>
|
|
% endfor
|
|
</li>
|
|
% endif
|
|
|
|
<%include file='dashboard/_dashboard_status_verification.html' />
|
|
|
|
<%include file='dashboard/_dashboard_reverification_sidebar.html' />
|
|
|
|
</ul>
|
|
</section>
|
|
</section>
|
|
</section>
|
|
|
|
<section id="email-settings-modal" class="modal" aria-hidden="true">
|
|
<div class="inner-wrapper" role="dialog" aria-labelledby="email-settings-title">
|
|
<button class="close-modal">
|
|
<i class="icon fa fa-remove"></i>
|
|
<span class="sr">
|
|
## Translators: this is a control to allow users to exit out of this modal interface (a menu or piece of UI that takes the full focus of the screen)
|
|
${_("Close")}
|
|
</span>
|
|
</button>
|
|
|
|
<header>
|
|
<h2 id="email-settings-title">
|
|
${_("Email Settings for {course_number}").format(course_number='<span id="email_settings_course_number"></span>')}
|
|
<span class="sr">,
|
|
## Translators: this text gives status on if the modal interface (a menu or piece of UI that takes the full focus of the screen) is open or not
|
|
${_("window open")}
|
|
</span>
|
|
</h2>
|
|
<hr/>
|
|
</header>
|
|
|
|
<form id="email_settings_form" method="post">
|
|
<input name="course_id" id="email_settings_course_id" type="hidden" />
|
|
<label>${_("Receive course emails")} <input type="checkbox" id="receive_emails" name="receive_emails" /></label>
|
|
<div class="submit">
|
|
<input type="submit" id="submit" value="${_("Save Settings")}" />
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="unenroll-modal" class="modal unenroll-modal" aria-hidden="true">
|
|
<div class="inner-wrapper" role="dialog" aria-labelledby="unenrollment-modal-title">
|
|
<button class="close-modal">
|
|
<i class="icon fa fa-remove"></i>
|
|
<span class="sr">
|
|
## Translators: this is a control to allow users to exit out of this modal interface (a menu or piece of UI that takes the full focus of the screen)
|
|
${_("Close")}
|
|
</span>
|
|
</button>
|
|
|
|
<header>
|
|
<h2 id="unenrollment-modal-title">
|
|
<span id='track-info'></span>
|
|
<span id='refund-info'></span>
|
|
<span class="sr">,
|
|
## Translators: this text gives status on if the modal interface (a menu or piece of UI that takes the full focus of the screen) is open or not
|
|
${_("window open")}
|
|
</span>
|
|
</h2>
|
|
<hr/>
|
|
</header>
|
|
<div id="unenroll_error" class="modal-form-error"></div>
|
|
<form id="unenroll_form" method="post" data-remote="true" action="${reverse('change_enrollment')}">
|
|
<input name="course_id" id="unenroll_course_id" type="hidden" />
|
|
<input name="enrollment_action" type="hidden" value="unenroll" />
|
|
<div class="submit">
|
|
<input name="submit" type="submit" value="${_("Unenroll")}" />
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</section>
|