def project(request, group_slug=None, form_class=ProjectUpdateForm, adduser_form_class=AddUserForm, template_name="projects/project.html"): project = get_object_or_404(Project, slug=group_slug) if not request.user.is_authenticated(): is_member = False else: is_member = project.user_is_member(request.user) action = request.POST.get("action") if request.user == project.creator and action == "update": project_form = form_class(request.POST, instance=project) if project_form.is_valid(): project = project_form.save() else: project_form = form_class(instance=project) if request.user == project.creator and action == "add": adduser_form = adduser_form_class(request.POST, project=project) if adduser_form.is_valid(): adduser_form.save(request.user) adduser_form = adduser_form_class(project=project) # clear form else: adduser_form = adduser_form_class(project=project) if action == "join": if not is_member: project_member = ProjectMember(project=project, user=request.user) project.members.add(project_member) project_member.save() request.user.message_set.create( message=_("You have joined the project %(project_name)s") % {"project_name": project.name}) is_member = True if notification: pass # @@@ no notification on joining yet else: request.user.message_set.create( message=_("You have already joined project %(project_name)s") % {"project_name": project.name}) if action == "leave": if is_member: project_member = ProjectMember.objects.get(project=project, user=request.user) project_member.delete() request.user.message_set.create(message="You have left the project %(project_name)s" % {"project_name": project.name}) is_member = False if notification: pass # @@@ no notification on departure yet else: request.user.message_set.create( message=_("You are not a member of project %(project_name)s") % {"project_name": project.name}) return render_to_response(template_name, { "project_form": project_form, "adduser_form": adduser_form, "project": project, "group": project, # @@@ this should be the only context var for the project "is_member": is_member, }, context_instance=RequestContext(request))