コード例 #1
0
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))