Esempio n. 1
0
def set_completed_confirm(request, project_author, project_pk):
    user = request.user
    project = get_object_or_404(Project, pk=project_pk)

    # only a project's author can edit it
    if not user == project.author:
        return oops("")

    if project.wont_be_completed:
        return oops("The project is set as 'won't be completed': you can't do that.")

    return generic_confirmation_view(
        request, "Are you sure you want to set the project as completed?", "ok/", project.get_absolute_url()
    )
Esempio n. 2
0
def set_project_admin_confirm(request, project_author, project_pk):
    project = get_object_or_404(Project, pk=project_pk)

    if not project.looking_for_admin:
        return oops("")

    if project.wont_be_completed:
        return oops("The project is set as 'won't be completed': you can't do that.")

    return generic_confirmation_view(
        request,
        "Are you sure you want to become admin for this project?",
        project.get_absolute_url() + "become_admin/ok/",
        project.get_absolute_url(),
    )
Esempio n. 3
0
def join_project(request, project_author, project_pk):
    user = request.user
    project = get_object_or_404(Project, pk=project_pk)

    if project.wont_be_completed:
        return oops("This project won't be completed: you can't join it.")

    if request.method == "POST":
        form = JoinForm(request.POST)
        role = form.cleaned_data["role"]
        if form.is_valid():
            project.add_interested_user(user, role)

            project_notification(
                project,
                user,
                "Clusterify -- user wants to join project",
                render_to_string(
                    "projects/emails/author_approve_join.txt",
                    {"project": project, "role": role, "joining_user": user, "site_url": get_full_url()},
                ),
                True,
            )
        else:
            user.message_set.create(
                message="Something was wrong with your form. Please note that your role description may not be longer than 120 characters. "
                % role
            )

    return HttpResponseRedirect(project.get_absolute_url())
Esempio n. 4
0
def set_wont_be_completed_doit(request, project_author, project_pk):
    user = request.user
    project = get_object_or_404(Project, pk=project_pk)

    # only a project's author can edit it
    if not user == project.author and not project.p_completed:
        return render_to_response("oops.html", {}, context_instance=RequestContext(request))

    if project.wont_be_completed:
        return oops("The project is already set as 'won't be completed': you can't do that.")

    project.wont_be_completed = True
    project.looking_for_admin = False  # no point anymore
    project.save()

    project_notification(
        project,
        user,
        "Clusterify -- project has been set as 'won't be completed'",
        render_to_string(
            "projects/emails/project_wont_be_completed.txt", {"project": project, "site_url": get_full_url()}
        ),
    )

    return HttpResponseRedirect(project.get_absolute_url())
Esempio n. 5
0
def set_completed_doit(request, project_author, project_pk):
    user = request.user
    project = get_object_or_404(Project, pk=project_pk)

    # only a project's author can edit it
    if not user == project.author:
        return oops("")

    if project.wont_be_completed:
        return oops("The project is set as 'won't be completed': you can't do that.")

    project.p_completed = True
    project.looking_for_admin = False
    project.save()

    return HttpResponseRedirect(project.get_absolute_url())
Esempio n. 6
0
def set_project_admin_doit(request, project_author, project_pk):
    user = request.user
    project = get_object_or_404(Project, pk=project_pk)

    if not project.looking_for_admin:
        return oops("")

    if project.wont_be_completed:
        return oops("The project is set as 'won't be completed': you can't do that.")

    project.author = user
    project.join_user(user)
    project.looking_for_admin = False
    project.save()

    # TODO: post notification of admin change

    user.message_set.create(message="You are now admin for this project.")

    return HttpResponseRedirect(project.get_absolute_url())
Esempio n. 7
0
def set_wont_be_completed_confirm(request, project_author, project_pk):
    user = request.user
    project = get_object_or_404(Project, pk=project_pk)

    # only a project's author can edit it
    if not user == project.author:
        return oops("")

    return generic_confirmation_view(
        request,
        "Are you sure you want to set this project as 'won't be completed'. This will remove the project from the 'proposed' lists without putting it on the 'completed' list.",
        "ok/",
        project.get_absolute_url(),
    )
Esempio n. 8
0
def add_or_edit_project(request, project_author=None, project_pk=None, is_add=False):
    user = request.user

    project = None
    if not is_add:
        project = get_object_or_404(Project, pk=project_pk)

        if project.wont_be_completed:
            return oops("This project is set as 'won't be completed': you can't edit it")

            # only a project's author can edit it
        if not user == project.author:
            return oops("Only a project's author can edit it.")

    if request.method == "POST":
        if is_add:
            project = Project(proposed_by=user, author=user)
        elif project.author != user:
            return oops("Only a project's author can edit it.")

        form = ProjectForm(request.POST)
        if form.is_valid():
            project.title = form.cleaned_data["title"]
            # if form.cleaned_data['event']:
            # 	project.event = get_object_or_404(Event, pk=form.cleaned_data['event'])
            project.description_markdown = form.cleaned_data["description"]
            if form.cleaned_data["time_estimate"]:
                project.hour_estimate = form.cleaned_data["time_estimate"]
            if project.p_completed:
                project.showcase_markdown = form.cleaned_data["showcase"]

            if not project.p_completed:
                not_involved = form.cleaned_data["not_involved"]
                if not_involved:
                    project.looking_for_admin = True
                    if not is_add:
                        user.message_set.create(
                            message="The project is now set as 'looking for admin'. You have admin rights until someone else clicks 'Become admin for this project'."
                        )
                        project.remove_member(user)
                else:
                    project.looking_for_admin = False

            tags = form.cleaned_data["tags"]

            project.save()

            # Need to save() before calling this, so we couldn't do it up there
            if is_add and not not_involved:
                project.join_user(user)

            project.set_tags(tags)

            return HttpResponseRedirect(project.get_absolute_url())
    elif not is_add:
        # initialize the form with existing project info
        form = ProjectForm(
            initial={
                "title": project.title,
                "description": project.description_markdown,
                "showcase": project.showcase_markdown,
                "tags": project.get_editable_tags,
                "time_estimate": project.hour_estimate,
            }
        )
    else:
        form = ProjectForm()

    return render_to_response(
        "projects/add_or_edit_project.html",
        {"form": form, "is_editing": not is_add, "project": project},
        context_instance=RequestContext(request),
    )