Пример #1
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),
    )