diff --git a/lms/djangoapps/courseware/access.py b/lms/djangoapps/courseware/access.py index ba9b8a3bc0..0d4a37eda5 100644 --- a/lms/djangoapps/courseware/access.py +++ b/lms/djangoapps/courseware/access.py @@ -5,6 +5,8 @@ like DISABLE_START_DATES""" import logging import time +import student.models + from django.conf import settings from xmodule.course_module import CourseDescriptor @@ -124,6 +126,10 @@ def _has_access_course_desc(user, course, action): debug("Allow: in enrollment period") return True + # if user is in CourseEnrollmentAllowed with right course_id then can also enroll + if user is not None and student.models.CourseEnrollmentAllowed.objects.filter(email=user.email, course_id=course.id): + return True + # otherwise, need staff access return _has_staff_access_to_descriptor(user, course) diff --git a/lms/djangoapps/instructor/views.py b/lms/djangoapps/instructor/views.py index b5caeac964..0ea3cf0435 100644 --- a/lms/djangoapps/instructor/views.py +++ b/lms/djangoapps/instructor/views.py @@ -335,26 +335,27 @@ def instructor_dashboard(request, course_id): elif action == 'Enroll student': student = request.POST.get('enstudent','') - datatable = {} - try: - nce = CourseEnrollment(user=User.objects.get(email=student), course_id=course_id) - nce.save() - msg += "Enrolled student with email '%s'" % student - except Exception as err: - msg += "Error! Failed to enroll student with email '%s'\n" % student - msg += str(err) + '\n' + ret = _do_enroll_students(course, course_id, student) + datatable = ret['datatable'] elif action == 'Un-enroll student': student = request.POST.get('enstudent','') datatable = {} + isok = False + cea = CourseEnrollmentAllowed.objects.filter(course_id=course_id, email=student) + if cea: + cea.delete() + msg += "Un-enrolled student with email '%s'" % student + isok = True try: nce = CourseEnrollment.objects.get(user=User.objects.get(email=student), course_id=course_id) nce.delete() msg += "Un-enrolled student with email '%s'" % student except Exception as err: - msg += "Error! Failed to un-enroll student with email '%s'\n" % student - msg += str(err) + '\n' + if not isok: + msg += "Error! Failed to un-enroll student with email '%s'\n" % student + msg += str(err) + '\n' elif action == 'Un-enroll ALL students': @@ -582,7 +583,7 @@ def get_student_grade_summary_data(request, course, course_id, get_grades=True, if get_grades: gradeset = grades.grade(student, request, course, keep_raw_scores=get_raw_scores) - # log.debug('student={0}, gradeset={1}'.format(student,gradeset)) + log.debug('student={0}, gradeset={1}'.format(student,gradeset)) if get_raw_scores: student_grades = [score.earned for score in gradeset['raw_scores']] else: