basic flow from enroll mode selection to verify screen

This commit is contained in:
David Ormsbee
2013-08-22 13:56:23 -04:00
parent 1676fc31a5
commit 0dd5819683
10 changed files with 130 additions and 38 deletions

View File

@@ -52,6 +52,10 @@ class CourseMode(models.Model):
modes = [cls.DEFAULT_MODE]
return modes
@classmethod
def modes_for_course_dict(cls, course_id):
return { mode.slug : mode for mode in cls.modes_for_course(course_id) }
def __unicode__(self):
return u"{} : {}, min={}, prices={}".format(
self.course_id, self.mode_slug, self.min_price, self.suggested_prices

View File

@@ -0,0 +1,9 @@
from django.conf.urls import include, patterns, url
from django.views.generic import TemplateView
from course_modes import views
urlpatterns = patterns(
'',
url(r'^choose', views.ChooseModeView.as_view(), name="course_modes_choose"),
)

View File

@@ -1,9 +1,18 @@
from django.http import HttpResponse
from django.core.urlresolvers import reverse
from django.http import (
HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, Http404
)
from django.shortcuts import redirect
from django.views.generic.base import View
from django.utils.translation import ugettext as _
from django.utils.http import urlencode
from mitxmako.shortcuts import render_to_response
from course_modes.models import CourseMode
from courseware.access import has_access
from student.models import CourseEnrollment
from student.views import course_from_id
class ChooseModeView(View):
@@ -11,17 +20,42 @@ class ChooseModeView(View):
course_id = request.GET.get("course_id")
context = {
"course_id" : course_id,
"available_modes" : CourseMode.modes_for_course(course_id)
"modes" : CourseMode.modes_for_course_dict(course_id)
}
return render_to_response("course_modes/choose.html", context)
def post(self, request):
course_id = request.GET.get("course_id")
mode_slug = request.POST.get("mode_slug")
user = request.user
# This is a bit redundant with logic in student.views.change_enrollement,
# but I don't really have the time to refactor it more nicely and test.
course = course_from_id(course_id)
if has_access(user, course, 'enroll'):
pass
if not has_access(user, course, 'enroll'):
return HttpResponseBadRequest(_("Enrollment is closed"))
requested_mode = self.get_requested_mode(request.POST.get("mode"))
allowed_modes = CourseMode.modes_for_course_dict(course_id)
if requested_mode not in allowed_modes:
return HttpResponseBadRequest(_("Enrollment mode not supported"))
if requested_mode in ("audit", "honor"):
CourseEnrollment.enroll(user, course_id)
return redirect('dashboard')
if requested_mode == "verified":
return redirect(
"{}?{}".format(
reverse('verify_student_verify'),
urlencode(dict(course_id=course_id))
)
)
def get_requested_mode(self, user_choice):
choices = {
"Select Audit" : "audit",
"Select Certificate" : "verified"
}
return choices.get(user_choice)

View File

@@ -24,8 +24,7 @@ from django.db import IntegrityError, transaction
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, HttpResponseNotAllowed, Http404
from django.shortcuts import redirect
from django_future.csrf import ensure_csrf_cookie
from django.utils.http import cookie_date
from django.utils.http import base36_to_int
from django.utils.http import cookie_date, base36_to_int, urlencode
from django.utils.translation import ugettext as _
from django.views.decorators.http import require_POST
@@ -372,7 +371,12 @@ def change_enrollment(request):
# where they can choose which mode they want.
available_modes = CourseMode.modes_for_course(course_id)
if len(available_modes) > 1:
return HttpResponse(reverse("course_modes.views.choose"))
return HttpResponse(
"{}?{}".format(
reverse("course_modes_choose"),
urlencode(dict(course_id=course_id))
)
)
org, course_num, run = course_id.split("/")
statsd.increment("common.student.enrollment",