def __init__(self, request, course_identifier): self.request = request self.course_identifier = course_identifier self.course = get_object_or_404(Course, identifier=course_identifier) self.role, self.participation = get_role_and_participation( request, self.course) from course.views import check_course_state check_course_state(self.course, self.role) self.course_commit_sha = get_course_commit_sha( self.course, self.participation) self.repo = get_course_repo(self.course)
def __init__(self, request, course_identifier): self.request = request self.course_identifier = course_identifier self.course = get_object_or_404(Course, identifier=course_identifier) self.role, self.participation = get_role_and_participation( request, self.course) from course.views import check_course_state check_course_state(self.course, self.role) self.course_commit_sha = get_course_commit_sha(self.course, self.participation) self.repo = get_course_repo(self.course)
def __init__(self, request, course_identifier): self.request = request self.course_identifier = course_identifier from course.models import Course self.course = get_object_or_404(Course, identifier=course_identifier) from course.views import get_role_and_participation self.role, self.participation = get_role_and_participation( request, self.course) from course.views import check_course_state check_course_state(self.course, self.role) self.course_commit_sha = get_course_commit_sha( self.course, self.participation) self.repo = get_course_repo(self.course) # logic duplicated in course.content.get_course_commit_sha sha = self.course.active_git_commit_sha.encode() if (self.participation is not None and self.participation.preview_git_commit_sha): preview_sha = self.participation.preview_git_commit_sha.encode() repo = get_course_repo(self.course) from course.content import SubdirRepoWrapper if isinstance(repo, SubdirRepoWrapper): repo = repo.repo try: repo[preview_sha] except KeyError: from django.contrib import messages messages.add_message(request, messages.ERROR, _("Preview revision '%s' does not exist--" "showing active course content instead.") % preview_sha.decode()) preview_sha = None if preview_sha is not None: sha = preview_sha self.course_commit_sha = sha
def enroll(request, course_identifier): course = get_object_or_404(Course, identifier=course_identifier) role, participation = get_role_and_participation(request, course) if role != participation_role.unenrolled: messages.add_message(request, messages.ERROR, _("Already enrolled. Cannot re-renroll.")) return redirect("relate-course_page", course_identifier) if not course.accepts_enrollment: messages.add_message(request, messages.ERROR, _("Course is not accepting enrollments.")) return redirect("relate-course_page", course_identifier) if request.method != "POST": # This can happen if someone tries to refresh the page, or switches to # desktop view on mobile. messages.add_message(request, messages.ERROR, _("Can only enroll using POST request")) return redirect("relate-course_page", course_identifier) user = request.user ustatus = get_user_status(user) if (course.enrollment_required_email_suffix and ustatus.status != user_status.active): messages.add_message( request, messages.ERROR, _("Your email address is not yet confirmed. " "Confirm your email to continue.")) return redirect("relate-course_page", course_identifier) preapproval = None if request.user.email: try: preapproval = ParticipationPreapproval.objects.get( course=course, email__iexact=request.user.email) except ParticipationPreapproval.DoesNotExist: pass if (preapproval is None and course.enrollment_required_email_suffix and not user.email.endswith(course.enrollment_required_email_suffix)): messages.add_message( request, messages.ERROR, _("Enrollment not allowed. Please use your '%s' email to " "enroll.") % course.enrollment_required_email_suffix) return redirect("relate-course_page", course_identifier) def enroll(status, role): participations = Participation.objects.filter(course=course, user=user) assert participations.count() <= 1 if participations.count() == 0: participation = Participation() participation.user = user participation.course = course participation.role = role participation.status = status participation.save() else: (participation, ) = participations participation.status = status participation.save() return participation role = participation_role.student if preapproval is not None: role = preapproval.role if course.enrollment_approval_required and preapproval is None: enroll(participation_status.requested, role) with translation.override(settings.RELATE_ADMIN_EMAIL_LOCALE): from django.template.loader import render_to_string message = render_to_string( "course/enrollment-request-email.txt", { "user": user, "course": course, "admin_uri": request.build_absolute_uri( reverse("admin:course_participation_changelist") + "?status__exact=requested") }) from django.core.mail import send_mail send_mail(string_concat("[%s] ", _("New enrollment request")) % course_identifier, message, settings.ROBOT_EMAIL_FROM, recipient_list=[course.notify_email]) messages.add_message( request, messages.INFO, _("Enrollment request sent. You will receive notifcation " "by email once your request has been acted upon.")) else: enroll(participation_status.active, role) messages.add_message(request, messages.SUCCESS, _("Successfully enrolled.")) return redirect("relate-course_page", course_identifier)
def enroll_view(request, course_identifier): course = get_object_or_404(Course, identifier=course_identifier) role, participation = get_role_and_participation(request, course) if role != participation_role.unenrolled: messages.add_message(request, messages.ERROR, _("Already enrolled. Cannot re-renroll.")) return redirect("relate-course_page", course_identifier) if not course.accepts_enrollment: messages.add_message(request, messages.ERROR, _("Course is not accepting enrollments.")) return redirect("relate-course_page", course_identifier) if request.method != "POST": # This can happen if someone tries to refresh the page, or switches to # desktop view on mobile. messages.add_message(request, messages.ERROR, _("Can only enroll using POST request")) return redirect("relate-course_page", course_identifier) user = request.user if (course.enrollment_required_email_suffix and user.status != user_status.active): messages.add_message(request, messages.ERROR, _("Your email address is not yet confirmed. " "Confirm your email to continue.")) return redirect("relate-course_page", course_identifier) preapproval = None if request.user.email: try: preapproval = ParticipationPreapproval.objects.get( course=course, email__iexact=request.user.email) except ParticipationPreapproval.DoesNotExist: if user.institutional_id: if not (course.preapproval_require_verified_inst_id and not user.institutional_id_verified): try: preapproval = ParticipationPreapproval.objects.get( course=course, institutional_id__iexact=user.institutional_id) except ParticipationPreapproval.DoesNotExist: pass pass if ( preapproval is None and course.enrollment_required_email_suffix and not user.email.endswith(course.enrollment_required_email_suffix)): messages.add_message(request, messages.ERROR, _("Enrollment not allowed. Please use your '%s' email to " "enroll.") % course.enrollment_required_email_suffix) return redirect("relate-course_page", course_identifier) role = participation_role.student if preapproval is not None: role = preapproval.role if course.enrollment_approval_required and preapproval is None: handle_enrollment_request(course, user, participation_status.requested, role, request) with translation.override(settings.RELATE_ADMIN_EMAIL_LOCALE): from django.template.loader import render_to_string message = render_to_string("course/enrollment-request-email.txt", { "user": user, "course": course, "admin_uri": mark_safe( request.build_absolute_uri( reverse("admin:course_participation_changelist") + "?status__exact=requested&course__id__exact=%d" % course.id)) }) from django.core.mail import send_mail send_mail( string_concat("[%s] ", _("New enrollment request")) % course_identifier, message, settings.ROBOT_EMAIL_FROM, recipient_list=[course.notify_email]) messages.add_message(request, messages.INFO, _("Enrollment request sent. You will receive notifcation " "by email once your request has been acted upon.")) else: handle_enrollment_request(course, user, participation_status.active, role, request) messages.add_message(request, messages.SUCCESS, _("Successfully enrolled.")) return redirect("relate-course_page", course_identifier)
def enroll(request, course_identifier): if request.method != "POST": raise SuspiciousOperation("can only enroll using POST request") course = get_object_or_404(Course, identifier=course_identifier) role, participation = get_role_and_participation(request, course) if role != participation_role.unenrolled: messages.add_message(request, messages.ERROR, "Already enrolled. Cannot re-renroll.") return redirect("course.views.course_page", course_identifier) user = request.user ustatus = get_user_status(user) if (course.enrollment_required_email_suffix and ustatus.status != user_status.active): messages.add_message( request, messages.ERROR, "Your email address is not yet confirmed. " "Confirm your email to continue.") return redirect("course.views.course_page", course_identifier) if (course.enrollment_required_email_suffix and not user.email.endswith(course.enrollment_required_email_suffix)): messages.add_message( request, messages.ERROR, "Enrollment not allowed. Please use your '%s' email to " "enroll." % course.enrollment_required_email_suffix) return redirect("course.views.course_page", course_identifier) def enroll(status, role): participations = Participation.objects.filter(course=course, user=user) assert participations.count() <= 1 if participations.count() == 0: participation = Participation() participation.user = user participation.course = course participation.role = role participation.status = status participation.save() else: (participation, ) = participations participation.status = status participation.save() return participation preapproval = None if request.user.email: try: preapproval = ParticipationPreapproval.objects.get( course=course, email__iexact=request.user.email) except ParticipationPreapproval.DoesNotExist: pass role = participation_role.student if preapproval is not None: role = preapproval.role if course.enrollment_approval_required and preapproval is None: enroll(participation_status.requested, role) from django.template.loader import render_to_string message = render_to_string( "course/enrollment-request-email.txt", { "user": user, "course": course, "admin_uri": request.build_absolute_uri( reverse("admin:course_participation_changelist")) }) from django.core.mail import send_mail send_mail("[%s] New enrollment request" % course_identifier, message, settings.ROBOT_EMAIL_FROM, recipient_list=[course.notify_email]) messages.add_message( request, messages.INFO, "Enrollment request sent. You will receive notifcation " "by email once your request has been acted upon.") else: enroll(participation_status.active, role) messages.add_message(request, messages.SUCCESS, "Successfully enrolled.") return redirect("course.views.course_page", course_identifier)
def enroll(request, course_identifier): if request.method != "POST": raise SuspiciousOperation("can only enroll using POST request") course = get_object_or_404(Course, identifier=course_identifier) role, participation = get_role_and_participation(request, course) if role != participation_role.unenrolled: messages.add_message(request, messages.ERROR, "Already enrolled. Cannot re-renroll.") return redirect("course.views.course_page", course_identifier) user = request.user ustatus = get_user_status(user) if (course.enrollment_required_email_suffix and ustatus.status != user_status.active): messages.add_message(request, messages.ERROR, "Your email address is not yet confirmed. " "Confirm your email to continue.") return redirect("course.views.course_page", course_identifier) if (course.enrollment_required_email_suffix and not user.email.endswith(course.enrollment_required_email_suffix)): messages.add_message(request, messages.ERROR, "Enrollment not allowed. Please use your '%s' email to " "enroll." % course.enrollment_required_email_suffix) return redirect("course.views.course_page", course_identifier) def enroll(status, role): participations = Participation.objects.filter(course=course, user=user) assert participations.count() <= 1 if participations.count() == 0: participation = Participation() participation.user = user participation.course = course participation.role = role participation.status = status participation.save() else: (participation,) = participations participation.status = status participation.save() return participation preapproval = None if request.user.email: try: preapproval = ParticipationPreapproval.objects.get( course=course, email__iexact=request.user.email) except ParticipationPreapproval.DoesNotExist: pass role = participation_role.student if preapproval is not None: role = preapproval.role if course.enrollment_approval_required and preapproval is None: enroll(participation_status.requested, role) from django.template.loader import render_to_string message = render_to_string("course/enrollment-request-email.txt", { "user": user, "course": course, "admin_uri": request.build_absolute_uri( reverse("admin:course_participation_changelist")) }) from django.core.mail import send_mail send_mail("[%s] New enrollment request" % course_identifier, message, settings.ROBOT_EMAIL_FROM, recipient_list=[course.email]) messages.add_message(request, messages.INFO, "Enrollment request sent. You will receive notifcation " "by email once your request has been acted upon.") else: enroll(participation_status.active, role) messages.add_message(request, messages.SUCCESS, "Successfully enrolled.") return redirect("course.views.course_page", course_identifier)