Skip to content
enrollment.py 37.7 KiB
Newer Older
                        participation=self.instance,
                        permission=perm)
            pp.save()
            pps.append(pp)
        self.instance.individual_permissions.set(pps)

    class Meta:
        model = Participation
        exclude = (
                "role",
                "course",
                )

        widgets = {
                "user": UserSearchWidget,
                }


@course_view
def edit_participation(
        pctx: CoursePageContext, participation_id: int) -> http.HttpResponse:
    if not pctx.has_permission(pperm.edit_participation):
        raise PermissionDenied()

    request = pctx.request

    num_participation_id = int(participation_id)

    if num_participation_id == -1:
        participation = Participation(
                course=pctx.course,
                status=participation_status.active)
        add_new = True
    else:
        participation = get_object_or_404(Participation, id=num_participation_id)
        add_new = False

    if participation.course.id != pctx.course.id:
        raise SuspiciousOperation("may not edit participation in different course")

    if request.method == "POST":
        form = EditParticipationForm(
                add_new, pctx, request.POST, instance=participation)
        reset_form = False
        try:
            if form.is_valid():
                if "submit" in request.POST:
                    form.save()

                    messages.add_message(request, messages.SUCCESS,
                            _("Changes saved."))

                elif "approve" in request.POST:

                    # FIXME: Double-saving
                    participation = form.save()
                    participation.status = participation_status.active
                    participation.save()
                    reset_form = True

                    send_enrollment_decision(participation, True, pctx.request)

                    messages.add_message(request, messages.SUCCESS,
                            _("Successfully enrolled."))

                elif "deny" in request.POST:

                    # FIXME: Double-saving
                    participation = form.save()
                    participation.status = participation_status.denied
                    participation.save()
                    reset_form = True

                    send_enrollment_decision(participation, False, pctx.request)

                    messages.add_message(request, messages.SUCCESS,
                            _("Successfully denied."))

                elif "drop" in request.POST:
                    # FIXME: Double-saving
                    participation = form.save()
                    participation.status = participation_status.dropped
                    participation.save()
                    reset_form = True

                    messages.add_message(request, messages.SUCCESS,
                            _("Successfully dropped."))
        except IntegrityError as e:
            messages.add_message(request, messages.ERROR,
                    _("A data integrity issue was detected when saving "
                        "this participation. Maybe a participation for "
                        "this user already exists? (%s)")
                    % str(e))
        if reset_form:
            form = EditParticipationForm(
                    add_new, pctx, instance=participation)
        form = EditParticipationForm(add_new, pctx, instance=participation)

    return render_course_page(pctx, "course/generic-course-form.html", {
        "form_description": _("Edit Participation"),
        "form": form
        })

# }}}

# vim: foldmethod=marker