Newer
Older
<%! from django.utils.translation import ugettext as _ %>
<%!
from django.core.urlresolvers import reverse
from courseware.courses import course_image_url, get_course_about_section
from xmodule.modulestore import MONGO_MODULESTORE_TYPE
from xmodule.modulestore.django import modulestore
%>
<%inherit file="main.html" />
<%namespace name='static' file='static_content.html'/>
<%block name="title"><title>${_("Dashboard")}</title></%block>
Brian Talbot
committed
<%block name="bodyclass">view-dashboard is-authenticated</%block>
<%block name="js_extra">
<script type="text/javascript">
(function() {
$(".email-settings").click(function(event) {
$("#email_settings_course_id").val( $(event.target).data("course-id") );
$("#email_settings_course_number").text( $(event.target).data("course-number") );
if($(event.target).data("optout") == "False") {
$("#receive_emails").prop('checked', true);
}
});
$(".unenroll").click(function(event) {
$("#unenroll_course_id").val( $(event.target).data("course-id") );
$("#unenroll_course_number").text( $(event.target).data("course-number") );
$('#unenroll_form').on('ajax:complete', function(event, xhr) {
if(xhr.status == 200) {
location.href = "${reverse('dashboard')}";
} else if (xhr.status == 403) {
location.href = "${reverse('signin_user')}?course_id=" +
$("#unenroll_course_id").val() + "&enrollment_action=unenroll";
$('#unenroll_error').html(
xhr.responseText ? xhr.responseText : "An error occurred. Please try again later."
).stop().css("display", "block");
}
});
$('#pwd_reset_button').click(function() {
$.post('${reverse("password_reset")}',
{"email" : $('#id_email').val()},
function(data){
$("#password_reset_complete_link").click();
});
});
$("#change_email_form").submit(function(){
var new_email = $('#new_email_field').val();
var new_password = $('#new_email_password').val();
$.post('${reverse("change_email")}',
{"new_email" : new_email, "password" : new_password},
function(data) {
if (data.success) {
$("#change_email_title").html("Please verify your new email");
$("#change_email_form").html("<p>You'll receive a confirmation in your " +
"in-box. Please click the link in the " +
"email to confirm the email change.</p>");
$("#change_email_form").html("<p>${_('You\'ll receive a confirmation in your in-box. Please click the link in the email to confirm the email change.')}</p>");
$("#change_email_error").html(data.error).stop().css("display", "block");
$("#change_name_form").submit(function(){
var new_name = $('#new_name_field').val();
var rationale = $('#name_rationale_field').val();
$.post('${reverse("change_name")}',
{"new_name":new_name, "rationale":rationale},
function(data) {
if(data.success) {
location.reload();
// $("#change_name_body").html("<p>Name changed.</p>");
} else {
$("#change_name_error").html(data.error).stop().css("display", "block");
}
});
return false;
});
$("#email_settings_form").submit(function(){
$.ajax({
type: "POST",
url: '${reverse("change_email_settings")}',
data: $(this).serializeArray(),
success: function(data) {
if(data.success) {
location.href = "${reverse('dashboard')}";
}
},
error: function(xhr, textStatus, error) {
if (xhr.status == 403) {
Brian Talbot
committed
location.href = "${reverse('signin_user')}";
}
}
});
return false;
});
})(this)
</script>
</%block>
<section class="container dashboard">
%if message:
<section class="dashboard-banner">
${message}
</section>
%endif
<section class="profile-sidebar">
<h1 class="user-name">${ user.username }</h1>
Galen Frechette
committed
<section class="user-info">
<ul>
<li>
<span class="title"><div class="icon name-icon"></div>${_("Full Name")} (<a href="#apply_name_change" rel="leanModal" class="edit-name">${_("edit")}</a>)</span> <span class="data">${ user.profile.name | h }</span>
<span class="title"><div class="icon email-icon"></div>${_("Email")}
% if external_auth_map is None or 'shib' not in external_auth_map.external_domain:
(<a href="#change_email" rel="leanModal" class="edit-email">${_("edit")}</a>)
% endif
</span> <span class="data">${ user.email | h }</span>
Galen Frechette
committed
</li>
% if external_auth_map is None or 'shib' not in external_auth_map.external_domain:
Galen Frechette
committed
<li>
<span class="title"><a href="#password_reset_complete" rel="leanModal" id="pwd_reset_button">${_("Reset Password")}</a></span>
<form id="password_reset_form" method="post" data-remote="true" action="${reverse('password_reset')}">
<input id="id_email" type="hidden" name="email" maxlength="75" value="${user.email}" />
<!-- <input type="submit" id="pwd_reset_button" value="${_('Reset Password')}" /> -->
Galen Frechette
committed
</li>
Galen Frechette
committed
</ul>
</section>
<section class="my-courses">
<header>
Brian Talbot
committed
<ul class="listing-courses">
% for course, enrollment in courses:
<li class="course-item">
<article class="course ${enrollment.mode}">
Brian Wilson
committed
<%
Brian Talbot
committed
course_target = reverse('info', args=[course.id])
Brian Wilson
committed
%>
Brian Talbot
committed
% if course.id in show_courseware_links_for:
<a href="${course_target}" class="cover">
<img src="${course_image_url(course)}" alt="${_('{course_number} {course_name} Cover Image').format(course_number=course.number, course_name=course.display_name_with_default) |h}" />
</a>
% else:
<div class="cover">
<img src="${course_image_url(course)}" alt="${_('{course_number} {course_name} Cover Image').format(course_number=course.number, course_name=course.display_name_with_default) | h}" />
</div>
Brian Talbot
committed
Brian Talbot
committed
% if enrollment.mode == "verified":
<span class="sts-enrollment">
<span class="label">${_("Enrolled as: ")}</span>
<img class="deco-graphic" src="${static.url('images/vcert-ribbon-s.png')}" alt="ID Verified Ribbon/Badge">
<span class="sts-enrollment-value">${_("ID Verified")}</span>
</span>
% endif
Brian Talbot
committed
<section class="info">
<hgroup>
<p class="date-block">
% if course.has_ended():
${_("Course Completed - {end_date}").format(end_date=course.end_date_text)}
% elif course.has_started():
${_("Course Started - {start_date}").format(start_date=course.start_date_text)}
% else: # hasn't started yet
${_("Course Starts - {start_date}").format(start_date=course.start_date_text)}
Brian Talbot
committed
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
</p>
<h2 class="university">${get_course_about_section(course, 'university')}</h2>
<h3>
% if course.id in show_courseware_links_for:
<a href="${course_target}">${course.display_number_with_default | h} ${course.display_name_with_default}</a>
% else:
<span>${course.display_number_with_default | h} ${course.display_name_with_default}</span>
% endif
</h3>
</hgroup>
<%
testcenter_exam_info = course.current_test_center_exam
registration = exam_registrations.get(course.id)
testcenter_register_target = reverse('begin_exam_registration', args=[course.id])
%>
% if testcenter_exam_info is not None:
% if registration is None and testcenter_exam_info.is_registering():
<div class="message message-status is-shown exam-register">
<a href="${testcenter_register_target}" class="button exam-button" id="exam_register_button">${_("Register for Pearson exam")}</a>
<p class="message-copy">${_("Registration for the Pearson exam is now open and will close on {end_date}").format(end_date="<strong>{}</strong>".format(testcenter_exam_info.registration_end_date_text))}</p>
</div>
% endif
<!-- display a registration for a current exam, even if the registration period is over -->
% if registration is not None:
% if registration.is_accepted:
<div class="message message-status is-shown exam-schedule">
<a href="${registration.registration_signup_url}" class="button exam-button">${_("Schedule Pearson exam")}</a>
<p class="exam-registration-number">${_("{link_start}Registration{link_end} number: {number}").format(
link_start='<a href="{url}" id="exam_register_link">'.format(url=testcenter_register_target),
link_end='</a>',
number=registration.client_candidate_id,
)}</p>
<p class="message-copy">${_("Write this down! You'll need it to schedule your exam.")}</p>
</div>
% endif
% if registration.is_rejected:
<div class="message message-status is-shown exam-schedule">
<p class="message-copy">
<strong>${_("Your registration for the Pearson exam has been rejected. Please {link_start}see your registration status details{link_end}.").format(
link_start='<a href="{url}" id="exam_register_link">'.format(url=testcenter_register_target),
link_end='</a>')}</strong>
${_("Otherwise {link_start}contact edX at {email}{link_end} for further help.").format(
link_start='<a class="contact-link" href="mailto:{email}?subject=Pearson VUE Exam - {about} {number}">'.format(email="exam-help@edx.org", about=get_course_about_section(course, 'university'), number=course.display_number_with_default),
link_end='</a>',
email="exam-help@edx.org",
)}
</div>
% endif
% if not registration.is_accepted and not registration.is_rejected:
<div class="message message-status is-shown">
<p class="message-copy"><strong>${_("Your {link_start}registration for the Pearson exam{link_end} is pending.").format(link_start='<a href="{url}" id="exam_register_link">'.format(url=testcenter_register_target), link_end='</a>')}</strong>
${_("Within a few days, you should see a confirmation number here, which can be used to schedule your exam.")}
</p>
</div>
% endif
% endif
% endif
Brian Talbot
committed
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
<%
cert_status = cert_statuses.get(course.id)
%>
% if course.has_ended() and cert_status:
<%
if cert_status['status'] == 'generating':
status_css_class = 'course-status-certrendering'
elif cert_status['status'] == 'ready':
status_css_class = 'course-status-certavailable'
elif cert_status['status'] == 'notpassing':
status_css_class = 'course-status-certnotavailable'
else:
status_css_class = 'course-status-processing'
%>
<div class="message message-status ${status_css_class} is-shown">
% if cert_status['status'] == 'processing':
<p class="message-copy">${_("Final course details are being wrapped up at this time. Your final standing will be available shortly.")}</p>
% elif cert_status['status'] in ('generating', 'ready', 'notpassing', 'restricted'):
<p class="message-copy">${_("Your final grade:")}
<span class="grade-value">${"{0:.0f}%".format(float(cert_status['grade'])*100)}</span>.
% if cert_status['status'] == 'notpassing':
${_("Grade required for a certificate:")} <span class="grade-value">
${"{0:.0f}%".format(float(course.lowest_passing_grade)*100)}</span>.
% elif cert_status['status'] == 'restricted':
<p class="message-copy">
${_("Your certificate is being held pending confirmation that the issuance of your certificate is in compliance with strict U.S. embargoes on Iran, Cuba, Syria and Sudan. If you think our system has mistakenly identified you as being connected with one of those countries, please let us know by contacting {email}.").format(email='<a class="contact-link" href="mailto:{email}">{email}</a>.'.format(email=settings.CONTACT_EMAIL))}
</p>
% endif
</p>
% endif
% if cert_status['show_disabled_download_button'] or cert_status['show_download_url'] or cert_status['show_survey_button']:
<ul class="actions">
% if cert_status['show_disabled_download_button']:
<li class="action"><span class="disabled">
${_("Your Certificate is Generating")}</span></li>
% elif cert_status['show_download_url']:
<li class="action">
<a class="btn" href="${cert_status['download_url']}"
title="${_('This link will open/download a PDF document')}">
Download Your PDF Certificate</a></li>
% endif
% if cert_status['show_survey_button']:
<li class="action"><a class="cta" href="${cert_status['survey_url']}">
${_('Complete our course feedback survey')}</a></li>
% endif
</ul>
% endif
</div>
Brian Talbot
committed
% if course.id in show_courseware_links_for:
% if course.has_ended():
<a href="${course_target}" class="enter-course archived">${_('View Archived Course')}</a>
% else:
<a href="${course_target}" class="enter-course">${_('View Course')}</a>
% endif
% endif
Brian Talbot
committed
Brian Talbot
committed
<a href="#unenroll-modal" class="unenroll" rel="leanModal" data-course-id="${course.id}" data-course-number="${course.number}">${_('Unregister')}</a>
Galen Frechette
committed
Brian Talbot
committed
% if settings.MITX_FEATURES['ENABLE_INSTRUCTOR_EMAIL'] and modulestore().get_modulestore_type(course.id) == MONGO_MODULESTORE_TYPE:
<!-- Only show the Email Settings link/modal if this course has bulk email feature enabled -->
<a href="#email-settings-modal" class="email-settings" rel="leanModal" data-course-id="${course.id}" data-course-number="${course.number}" data-optout="${course.id in course_optouts}">${_('Email Settings')}</a>
% endif
</section>
</article>
</li>
Brian Talbot
committed
</ul>
% else:
<section class="empty-dashboard-message">
<p>${_("Looks like you haven't registered for any courses yet.")}</p>
% if staff_access and len(errored_courses) > 0:
<div id="course-errors">
% 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
% endif
Bridger Maxwell
committed
<section id="email-settings-modal" class="modal">
<div class="inner-wrapper">
<header>
<h2>${_('Email Settings for {course_number}').format(course_number='<span id="email_settings_course_number"></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>
<a href="#" role="button" class="close-modal" title="${_('Close Modal')}">✕</a>
</div>
</section>
Bridger Maxwell
committed
<section id="unenroll-modal" class="modal unenroll-modal">
<div class="inner-wrapper">
<header>
<h2>${_('Are you sure you want to unregister from {course_number}?').format(course_number='<span id="unenroll_course_number"></span>')}</h2>
Bridger Maxwell
committed
</header>
<div id="unenroll_error" class="modal-form-error"></div>
Bridger Maxwell
committed
<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="${_('Unregister')}" />
Bridger Maxwell
committed
</div>
</form>
<a href="#" role="button" class="close-modal" title="${_('Close Modal')}">✕</a>
Bridger Maxwell
committed
</div>
</section>
<section id="password_reset_complete" class="modal">
<div class="inner-wrapper">
<hr/>
</header>
<form> <!-- Here for styling reasons -->
<section>
<p>${_('An email has been sent to {email}. Follow the link in the email to change your password.').format(email=user.email)}</p>
</section>
</form>
<a href="#" role="button" class="close-modal" title="${_('Close Modal')}">✕</a>
Bridger Maxwell
committed
<section id="change_email" class="modal">
<div class="inner-wrapper">
<header>
<h2><span id="change_email_title">${_("Change Email")}</span></h2>
<hr/>
</header>
<div id="change_email_body">
<form id="change_email_form">
<div id="change_email_error" class="modal-form-error"> </div>
<div class="input-group">
<label>${_('Please enter your new email address:')}</label>
<input id="new_email_field" type="email" value="" />
<label>${_('Please confirm your password:')}</label>
<input id="new_email_password" value="" type="password" />
</div>
<p>${_('We will send a confirmation to both {email} and your new email as part of the process.').format(email=user.email)}</p>
<div class="submit">
<input type="submit" id="submit_email_change" value="${_('Change Email')}"/>
</div>
</fieldset>
</form>
</div>
<a href="#" role="button" class="close-modal" title="${_('Close Modal')}">✕</a>
</div>
</section>
<section id="apply_name_change" class="modal">
<div class="inner-wrapper">
<header>
<hr/>
</header>
<div id="change_name_body">
<form id="change_name_form">
<div id="change_name_error" class="modal-form-error"> </div>
<p>${_("To uphold the credibility of {platform} certificates, all name changes will be logged and recorded.").format(platform=settings.PLATFORM_NAME)}</p>
<br/>
<fieldset>
<div class="input-group">
<label>${_("Enter your desired full name, as it will appear on the {platform} certificates:").format(platform=settings.PLATFORM_NAME)}</label>
<input id="new_name_field" value="" type="text" />
<label>${_("Reason for name change:")}</label>
<textarea id="name_rationale_field" value=""></textarea>
</div>
<div class="submit">
<input type="submit" id="submit" value="${_('Change My Name')}">
<a href="#" role="button" class="close-modal" title="${_('Close Modal')}">✕</a>