def post(self, request, course_id, format=None): """ Enroll in Course """ user = request.user err = {} try: course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id) course = course_from_key(course_key) except ItemNotFoundError: err['err_type'] = 'InvalidCourseId' err['err_msg'] = _("Course id is invalid") return Response(err, status=status.HTTP_400_BAD_REQUEST) if not has_access(user, 'enroll', course): err['err_type'] = 'InvalidEnrollment' err['err_msg'] = _("Enrollment is closed") return Response(err, status=status.HTTP_400_BAD_REQUEST) # see if we have already filled up all allowed enrollments is_course_full = CourseEnrollment.is_course_full(course) if is_course_full: err['err_type'] = 'InvalidEnrollment' err['err_msg'] = _("Course is full") return Response(err, status=status.HTTP_400_BAD_REQUEST) # If this course is available in multiple modes, redirect them to a page # where they can choose which mode they want. available_modes = CourseMode.modes_for_course(course_id) available_modes_dict = CourseMode.modes_for_course_dict(course_id, available_modes) if CourseMode.has_verified_mode(available_modes_dict): err['err_type'] = 'InvalidEnrollment' err['err_msg'] = _("Missing course mode") return Response(err, status=status.HTTP_400_BAD_REQUEST) current_mode = available_modes[0] course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id) dog_stats_api.increment( "common.student.enrollment", tags=[u"org:{0}".format(course_key.org), u"course:{0}".format(course_key.course), u"run:{0}".format(course_key.run)] ) server_track(request, 'api.course.enrollment', { 'username': user.username, 'course_id': course_id, }) CourseEnrollment.enroll(user, course.id, mode=current_mode.slug) return Response()
def post(self, request, course_id, format=None): """ Get Enroll the current course. The new version edX has lot of enroll modes. """ course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id) user = request.user try: course = course_from_key(course_key) except ItemNotFoundError: return error.ErrorResponse(error.INVALID_PARAMETER, "Course id is invalid", status=status.HTTP_404_NOT_FOUND) if not has_access(user, 'enroll', course): return error.ErrorResponse(error.INVALID_ENROLLMENT, "Enrollment is closed", status=status.HTTP_400_BAD_REQUEST) if CourseEnrollment.is_course_full(course): return error.ErrorResponse(error.INVALID_ENROLLMENT, "Course is full", status=status.HTTP_400_BAD_REQUEST) available_modes = CourseMode.modes_for_course(course_id) available_modes_dict = CourseMode.modes_for_course_dict(course_id, available_modes) if CourseMode.has_verified_mode(available_modes_dict): return error.ErrorResponse(error.INVALID_ENROLLMENT, "付费课程请在网站加入", status=status.HTTP_400_BAD_REQUEST) current_mode = available_modes[0] course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id) dog_stats_api.increment( "common.student.enrollment", tags=["org:{0}".format(course_key.org), "course:{0}".format(course_key.course), "run:{0}".format(course_key.run)] ) server_track(request, 'api.course.enrollment', { 'username': user.username, 'course_id': course_id, }) CourseEnrollment.enroll(user, course.id, mode=current_mode.slug) return Response(status=status.HTTP_201_CREATED)