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), )