diff --git a/djangoapps/student/views.py b/djangoapps/student/views.py index 5983ccab12bd057aa6768d5d9302bef286d35480..aa3d0fb326fd6b307f006b139e3f6bc563009438 100644 --- a/djangoapps/student/views.py +++ b/djangoapps/student/views.py @@ -383,8 +383,11 @@ def change_name_request(request): if not request.user.is_authenticated: raise Http404 - pnc = PendingNameChange() - pnc.user = request.User + try: + pnc = PendingNameChange.objects.get(user = request.user) + except: + pnc = PendingNameChange() + pnc.user = request.user pnc.new_name = request.POST['new_name'] pnc.rationale = request.POST['rationale'] if len(pnc.new_name)<2: @@ -395,37 +398,59 @@ def change_name_request(request): return HttpResponse(json.dumps({'success':True})) @ensure_csrf_cookie -def change_name_list(request): +def pending_name_changes(request): + print request.user.is_staff, request.user if not request.user.is_staff: + print "AAAA" raise Http404 changes = list(PendingNameChange.objects.all()) - json = [{'new_name': c.new_name, - 'rationale':c.rationale, - 'old_name':UserProfile.Objects.get(username=c.user).name, - 'email':c.user.email, - 'id':c.id} for c in changes] - return render_to_response('name_changes.html', json) + js = {'students' : [{'new_name': c.new_name, + 'rationale':c.rationale, + 'old_name':UserProfile.objects.get(user=c.user).name, + 'email':c.user.email, + 'uid':c.user.id, + 'cid':c.id} for c in changes]} + return render_to_response('name_changes.html', js) @ensure_csrf_cookie -def change_name_reject(request): +def reject_name_change(request): ''' Course staff clicks 'reject' on a given name change ''' if not request.user.is_staff: raise Http404 - pnc = PendingNameChange.objects.get(id = int(request.POST['id'])) + try: + pnc = PendingNameChange.objects.get(id = int(request.POST['id'])) + except: + return HttpResponse(json.dumps({'success':False, 'error':'Invalid ID'})) + pnc.delete() return HttpResponse(json.dumps({'success':True})) @ensure_csrf_cookie -def change_name_accept(request): +def accept_name_change(request): ''' Course staff clicks 'accept' on a given name change ''' - pnc = PendingNameChange.objects.get(id = int(request.POST['id'])) + if not request.user.is_staff: + raise Http404 + + try: + pnc = PendingNameChange.objects.get(id = int(request.POST['id'])) + except: + return HttpResponse(json.dumps({'success':False, 'error':'Invalid ID'})) u = pnc.user up = UserProfile.objects.get(user=u) - up.name = pnc.name + + # Save old name + meta = up.get_meta() + print meta + if 'old_names' not in meta: + meta['old_names'] = [] + meta['old_names'].append(up.name) + up.set_meta(meta) + + up.name = pnc.new_name up.save() pnc.delete() - return HttpResponse(json.dumps({'success':True})) + return HttpResponse(json.dumps({'success':True})) diff --git a/templates/name_changes.html b/templates/name_changes.html index d123fdb55c583432f60537ac464cebbed11a0886..1316084c3408bbdc7a3f91a80d881e02602aeed7 100644 --- a/templates/name_changes.html +++ b/templates/name_changes.html @@ -1,12 +1,42 @@ <%inherit file="main.html" /> <%include file="navigation.html" args="active_page=''" /> <section class="main-content"> +<script> +function name_confirm(id) { + postJSON('/accept_name_change',{"id":id}, + function(data){ + if(data.success){ + $("#div"+id).html("Accepted"); + } else { + alert('Error'); + } + }); +} + +function name_deny(id) { + postJSON('/reject_name_change',{"id":id}, + function(data){ + if(data.success){ + $("#div"+id).html("Rejected"); + } else { + alert('Error'); + } + }); +} +</script> + <div class="gradebook-wrapper"> <section class="gradebook-content"> <h1>Pending name changes</h1> <table> % for s in students: - <tr><td><a href=/profile/${s.uid}/>${s.oldname}</td><td>${s.newname}</td><td onclick="update({$s.uid});">[Change]</td></tr> + <tr> + <td><a href=/profile/${s['uid']}/>${s['old_name']}</td> + <td>${s['new_name']|h}</td> + <td>${s['email']|h}</td> + <td>${s['rationale']|h}</td> + <td><span id="div${s['cid']}"><span onclick="name_confirm(${s['cid']});">[Confirm]</span> + <span onclick="name_deny(${s['cid']});">[Reject]</span></span></td></tr> % endfor </table> </section> diff --git a/templates/profile.html b/templates/profile.html index 9b79ce9780dca1bbb5971c36a9b375594723a4f0..9c76ac9b2cf9a548d121059b8a5c261e5d7ab4ab 100644 --- a/templates/profile.html +++ b/templates/profile.html @@ -102,13 +102,13 @@ $(function() { var new_name = $('#new_name_field').val(); var rationale = $('#name_rationale_field').val(); - postJSON('/change_email',{"new_name":new_name, + postJSON('/change_name',{"new_name":new_name, "rationale":rationale}, function(data){ if(data.success){ - $("#change_email").html("Request submitted. We'll send you an e-mail if we approve the change or need further information."); + $("#apply_name_change").html("Request submitted. We'll send you an e-mail if we approve the change or need further information."); } else { - $("#change_email_error").html(data.error); + $("#apply_name_change_error").html(data.error); } }); log_event("profile", {"type":"name_change_request", @@ -190,7 +190,7 @@ $(function() { </li> <li> - E-mail: <strong>${email}</strong> <a href="#change_email" rel="leanModal" class="edit-email">Edit</a> + E-mail: <strong>${email}</strong> <a href="#change_email" rel="leanModal" class="edit-email">Change</a> </li> <li> Location: <div id="location_sub">${location}</div><div id="description"></div> <a href="#" id="change_location">Edit</a> @@ -249,6 +249,7 @@ $(function() { <div id="change_email" class="leanModal_box"> <h1>Change e-mail</h1> + <div id="apply_name_change_error"></div> <form id="change_email_form"> <div id="change_email_error"> </div> <fieldset> diff --git a/urls.py b/urls.py index 2488e77e246e4006f7e38e68f77c7d632f0afaaa..8a2ef623652aab38d4af25dbc9d32d1396e3abf8 100644 --- a/urls.py +++ b/urls.py @@ -11,6 +11,10 @@ urlpatterns = ('', url(r'^$', 'student.views.index'), # Main marketing page, or redirect to courseware url(r'^change_email$', 'student.views.change_email_request'), url(r'^email_confirm/(?P<key>[^/]*)$', 'student.views.confirm_email_change'), + url(r'^change_name$', 'student.views.change_name_request'), + url(r'^accept_name_change$', 'student.views.accept_name_change'), + url(r'^reject_name_change$', 'student.views.reject_name_change'), + url(r'^pending_name_changes$', 'student.views.pending_name_changes'), url(r'^gradebook$', 'courseware.views.gradebook'), url(r'^event$', 'track.views.user_track'), url(r'^t/(?P<template>[^/]*)$', 'static_template_view.views.index'),