예제 #1
0
def report_thread(request, thread):
    """
    Makes a report for a thread.
    """

    # Cancel button support
    if request.POST.get("cancel"):
        return redirect(thread.urls.view)

    # Form processing
    if request.method == "POST":
        form = ReportForm(request.POST)
        if form.is_valid():
            Report.objects.create(
                thread=thread,
                type=form.cleaned_data['type'],
                comment=form.cleaned_data['comment'],
                reporter=request.user,
                accused=thread.author,
            )
            flash(request, "Report submitted. Thanks!")
        return redirect(thread.urls.view)
    else:
        form = ReportForm()

    return render(request, "threads/report.html", {
        "form": form,
        "report_url": thread.urls.report,
    })
예제 #2
0
def report_thread(request, thread):
    """
    Makes a report for a thread.
    """

    # Cancel button support
    if request.POST.get("cancel"):
        return redirect(thread.urls.view)

    # Form processing
    if request.method == "POST":
        form = ReportForm(request.POST)
        if form.is_valid():
            Report.objects.create(
                thread=thread,
                type=form.cleaned_data['type'],
                comment=form.cleaned_data['comment'],
                reporter=request.user,
                accused=thread.author,
            )
            flash(request, "Report submitted. Thanks!")
        return redirect(thread.urls.view)
    else:
        form = ReportForm()

    return render(request, "threads/report.html", {
        "form": form,
        "report_url": thread.urls.report,
    })
예제 #3
0
def join(request, group):
    """
    Joins a group (optionally prompting for more info)
    """
    # TODO: make all joins POST with CSRF
    # No more info form for now, and no pending statuses
    membership = group.membership(request.user)
    if membership is None:
        GroupMember.objects.create(
            group=group,
            user=request.user,
            status="member",
        )
        flash(request, "You are now a member of the group!")

    return redirect(group.urls.view)
예제 #4
0
def join(request, group):
    """
    Joins a group (optionally prompting for more info)
    """
    # TODO: make all joins POST with CSRF
    # No more info form for now, and no pending statuses
    membership = group.membership(request.user)
    if membership is None:
        GroupMember.objects.create(
            group=group,
            user=request.user,
            status="member",
        )
        flash(request, "You are now a member of the group!")

    return redirect(group.urls.view)
예제 #5
0
def settings(request):
    """
    The user's own settings
    """
    user = request.user

    if request.method == "POST":
        form = ChangePasswordForm(user, request.POST)
        if form.is_valid():
            user.set_password(form.cleaned_data['new_password'])
            user.save()
            update_session_auth_hash(request, user)
            flash(request, "Password changed!")
            return redirect(".")
    else:
        form = ChangePasswordForm(user)

    return render(request, "users/settings.html", {
        "form": form,
    })
예제 #6
0
def edit(request, group):
    """
    Edits group settings
    """
    if request.method == "POST":
        form = EditGroupForm(request.POST)
        if form.is_valid():
            group.description = form.cleaned_data['description']
            group.colour = form.cleaned_data['colour']
            group.save()
            flash(request, "Settings saved.")
            return redirect(group.urls.edit)
    else:
        form = EditGroupForm(initial={
            "description": group.description,
            "colour": group.colour,
        })
    return render(request, "groups/edit.html", {
        "group": group,
        "form": form,
    })
예제 #7
0
def edit(request, group):
    """
    Edits group settings
    """
    if request.method == "POST":
        form = EditGroupForm(request.POST)
        if form.is_valid():
            group.description = form.cleaned_data['description']
            group.colour = form.cleaned_data['colour']
            group.save()
            flash(request, "Settings saved.")
            return redirect(group.urls.edit)
    else:
        form = EditGroupForm(initial={
            "description": group.description,
            "colour": group.colour,
        })
    return render(request, "groups/edit.html", {
        "group": group,
        "form": form,
    })
예제 #8
0
def leave(request, group):
    """
    Leaves a group (optionally prompting for confirmation if getting back
    into the group is not trivial)
    """
    # TODO: make all leaves POST with CSRF
    # Just protect against the last admin leaving for now.
    membership = group.membership(request.user)
    if membership is None or membership.status == "banned":
        return redirect(group.urls.view)

    if membership.status == "admin":
        if group.members.filter(status="admin").count() == 1:
            return render(request, "groups/leave_error.html", {
                "group": group,
                "reason": "you are the last admin",
            })

    membership.delete()
    flash(request, "You are no longer a member of the group.")

    return redirect(group.urls.view)
예제 #9
0
def leave(request, group):
    """
    Leaves a group (optionally prompting for confirmation if getting back
    into the group is not trivial)
    """
    # TODO: make all leaves POST with CSRF
    # Just protect against the last admin leaving for now.
    membership = group.membership(request.user)
    if membership is None or membership.status == "banned":
        return redirect(group.urls.view)

    if membership.status == "admin":
        if group.members.filter(status="admin").count() == 1:
            return render(request, "groups/leave_error.html", {
                "group": group,
                "reason": "you are the last admin",
            })

    membership.delete()
    flash(request, "You are no longer a member of the group.")

    return redirect(group.urls.view)