From 238a2d53e353ce39975a6d2d3de44bdd2bca2852 Mon Sep 17 00:00:00 2001 From: Diana Huang Date: Fri, 6 Sep 2013 17:20:24 -0400 Subject: [PATCH] Don't allow people into the verification flow if they've already been verified --- common/djangoapps/course_modes/views.py | 2 ++ common/djangoapps/student/models.py | 17 +++++++++++++++++ lms/djangoapps/verify_student/views.py | 11 +++++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py index cf9f4095ab..641185eb5b 100644 --- a/common/djangoapps/course_modes/views.py +++ b/common/djangoapps/course_modes/views.py @@ -22,6 +22,8 @@ class ChooseModeView(View): @method_decorator(login_required) def get(self, request, course_id, error=None): + if CourseEnrollment.enrollment_mode_for_user(request.user, course_id) == 'verified': + return redirect(reverse('dashboard')) modes = CourseMode.modes_for_course_dict(course_id) context = { "course_id": course_id, diff --git a/common/djangoapps/student/models.py b/common/djangoapps/student/models.py index 5f29ffa6aa..71cff4183b 100644 --- a/common/djangoapps/student/models.py +++ b/common/djangoapps/student/models.py @@ -843,6 +843,23 @@ class CourseEnrollment(models.Model): except cls.DoesNotExist: return False + @classmethod + def enrollment_mode_for_user(cls, user, course_id): + """ + Returns the enrollment mode for the given user for the given course + + `user` is a Django User object + `course_id` is our usual course_id string (e.g. "edX/Test101/2013_Fall) + """ + try: + record = CourseEnrollment.objects.get(user=user, course_id=course_id) + if record.is_active: + return record.mode + else: + return None + except cls.DoesNotExist: + return None + @classmethod def enrollments_for_user(cls, user): return CourseEnrollment.objects.filter(user=user, is_active=1) diff --git a/lms/djangoapps/verify_student/views.py b/lms/djangoapps/verify_student/views.py index 390a7ce381..85e7cb5309 100644 --- a/lms/djangoapps/verify_student/views.py +++ b/lms/djangoapps/verify_student/views.py @@ -41,6 +41,8 @@ class VerifyView(View): return redirect( reverse('verify_student_verified', kwargs={'course_id': course_id})) + elif CourseEnrollment.enrollment_mode_for_user(request.user, course_id) == 'verified': + return redirect(reverse('dashboard')) else: # If they haven't completed a verification attempt, we have to # restart with a new one. We can't reuse an older one because we @@ -65,7 +67,7 @@ class VerifyView(View): ], "currency": verify_mode.currency.upper(), "chosen_price": chosen_price, - "min_price" : verify_mode.min_price, + "min_price": verify_mode.min_price, } return render_to_response('verify_student/photo_verification.html', context) @@ -81,6 +83,8 @@ class VerifiedView(View): """ Handle the case where we have a get request """ + if CourseEnrollment.enrollment_mode_for_user(request.user, course_id) == 'verified': + return redirect(reverse('dashboard')) verify_mode = CourseMode.mode_for_course(course_id, "verified") if course_id in request.session.get("donation_for_course", {}): chosen_price = request.session["donation_for_course"][course_id] @@ -138,15 +142,18 @@ def create_order(request): return HttpResponse(json.dumps(params), content_type="text/json") + @login_required def show_requirements(request, course_id): """ Show the requirements necessary for """ + if CourseEnrollment.enrollment_mode_for_user(request.user, course_id) == 'verified': + return redirect(reverse('dashboard')) context = { "course_id": course_id, "is_not_active": not request.user.is_active, - "course_name" : course_from_id(course_id).display_name, + "course_name": course_from_id(course_id).display_name, } return render_to_response("verify_student/show_requirements.html", context)