Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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)