From 36373bb457fc114bd729cef81444bf8c6442f94c Mon Sep 17 00:00:00 2001 From: Bridger Maxwell Date: Fri, 20 Jul 2012 12:21:35 -0400 Subject: [PATCH] Added an unenroll link (and confirmation) to the dashboard. Enrolling is now a POST of a form. --- lms/djangoapps/courseware/views.py | 38 +++++++++++++++----- lms/templates/dashboard.html | 50 ++++++++++++++++++++++++++ lms/templates/portal/course_about.html | 28 ++++++++++++++- lms/urls.py | 8 +++-- 4 files changed, 112 insertions(+), 12 deletions(-) diff --git a/lms/djangoapps/courseware/views.py b/lms/djangoapps/courseware/views.py index 07303be06a..77ecc990c3 100644 --- a/lms/djangoapps/courseware/views.py +++ b/lms/djangoapps/courseware/views.py @@ -1,4 +1,5 @@ from collections import defaultdict +import json import logging import urllib import itertools @@ -8,7 +9,7 @@ from django.core.context_processors import csrf from django.core.urlresolvers import reverse from django.contrib.auth.models import User from django.contrib.auth.decorators import login_required -from django.http import Http404 +from django.http import Http404, HttpResponse from django.shortcuts import redirect from mitxmako.shortcuts import render_to_response, render_to_string #from django.views.decorators.csrf import ensure_csrf_cookie @@ -271,14 +272,37 @@ def course_about(request, course_id): @login_required -@ensure_csrf_cookie -def enroll(request, course_id): - course = check_course(course_id, course_must_be_open=False) +def change_enrollment(request): + if request.method != "POST": + raise Http404 + + course_id = request.POST.get("course_id", None) + if course_id == None: + return HttpResponse(json.dumps({'success': False, 'error': 'There was an error receiving the course id.'})) + action = request.POST.get("enrollment_action" , "") + user = request.user - enrollment, created = CourseEnrollment.objects.get_or_create(user=user, course_id=course.id) + if action == "enroll": + # Make sure the course exists + # We don't do this check on unenroll, or a bad course id can't be unenrolled from + course = check_course(course_id, course_must_be_open=False) + + enrollment, created = CourseEnrollment.objects.get_or_create(user=user, course_id=course.id) + return HttpResponse(json.dumps({'success': True})) + + elif action == "unenroll": + try: + enrollment = CourseEnrollment.objects.get(user=user, course_id=course_id) + enrollment.delete() + return HttpResponse(json.dumps({'success': True})) + except CourseEnrollment.DoesNotExist: + return HttpResponse(json.dumps({'success': False, 'error': 'You are not enrolled for this course.'})) + else: + return HttpResponse(json.dumps({'success': False, 'error': 'Invalid enrollment_action.'})) + + return HttpResponse(json.dumps({'success': False, 'error': 'We weren\'t able to unenroll you. Please try again.'})) - return redirect(reverse('dashboard')) @ensure_csrf_cookie @@ -295,5 +319,3 @@ def university_profile(request, org_id): template_file = "university_profile/{0}.html".format(org_id).lower() return render_to_response(template_file, context) - - diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index bdae0dc527..e94701ef60 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -51,6 +51,7 @@

Class Starts - 9/2/2012

+ Unenroll
@@ -75,3 +76,52 @@
+ + + + + + + + diff --git a/lms/templates/portal/course_about.html b/lms/templates/portal/course_about.html index 95afcfd73c..d5ba8e24ae 100644 --- a/lms/templates/portal/course_about.html +++ b/lms/templates/portal/course_about.html @@ -22,7 +22,7 @@ %if registered: You are registered for this course (${course.number}). %else: - Register for ${course.number} + Register for ${course.number} %endif %else: Register for ${course.number} @@ -105,4 +105,30 @@ +%if not registered: +
+
+ + +
+ +
+
+
+ +%endif + + <%include file="../video_modal.html" /> diff --git a/lms/urls.py b/lms/urls.py index bce5ad930e..f116ea6037 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -100,14 +100,16 @@ if settings.COURSEWARE_ENABLED: url(r'^save_circuit/(?P[^/]*)$', 'circuit.views.save_circuit'), url(r'^calculate$', 'util.views.calculate'), url(r'^heartbeat$', include('heartbeat.urls')), - + + + url(r'^change_enrollment$', + 'courseware.views.change_enrollment', name="change_enrollment"), + # Multicourse related: url(r'^courses/?$', 'courseware.views.courses', name="courses"), #About the course url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/about$', 'courseware.views.course_about', name="about_course"), - url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/enroll$', - 'courseware.views.enroll', name="enroll"), #Inside the course url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/info$',