diff --git a/symposion/teams/urls.py b/symposion/teams/urls.py index c96ca0d8c8c1ba34ecbaec53bb9686b676ba0a03..691e458b61001731106d781c66cdf60c83f76dc9 100644 --- a/symposion/teams/urls.py +++ b/symposion/teams/urls.py @@ -5,5 +5,6 @@ urlpatterns = patterns("symposion.teams.views", url(r"^(?P[\w\-]+)/$", "team_detail", name="team_detail"), url(r"^(?P[\w\-]+)/join/$", "team_join", name="team_join"), url(r"^(?P[\w\-]+)/leave/$", "team_leave", name="team_leave"), + url(r"^(?P[\w\-]+)/apply/$", "team_apply", name="team_apply"), ) diff --git a/symposion/teams/views.py b/symposion/teams/views.py index a2d719d0f2a1335d50f81bc6ce38f78bc7df873c..0227d8d5da7eedfb46538b6d9a243e84bad4509d 100644 --- a/symposion/teams/views.py +++ b/symposion/teams/views.py @@ -29,6 +29,14 @@ def can_leave(team, user): return False +def can_apply(team, user): + state = team.get_state_for_user(user) + if team.access == "application" and state is None: + return True + else: + return False + + ## views @@ -44,6 +52,7 @@ def team_detail(request, slug): "state": state, "can_join": can_join(team, request.user), "can_leave": can_leave(team, request.user), + "can_apply": can_apply(team, request.user), }) @@ -78,3 +87,20 @@ def team_leave(request, slug): return redirect("dashboard") else: return redirect("team_detail", slug=slug) + + +@login_required +def team_apply(request, slug): + team = get_object_or_404(Team, slug=slug) + state = team.get_state_for_user(request.user) + if team.access == "invitation" and state is None: + raise Http404() + + if can_apply(team, request.user) and request.method == "POST": + membership, created = Membership.objects.get_or_create(team=team, user=request.user) + membership.state = "applied" + membership.save() + # contrib.message + return redirect("team_detail", slug=slug) + else: + return redirect("team_detail", slug=slug) diff --git a/symposion_project/templates/teams/team_detail.html b/symposion_project/templates/teams/team_detail.html index b423b6d5839563e257913b76c22d21ae27955c5e..1469ea95089b98f61039eba8b45b70dae2706834 100644 --- a/symposion_project/templates/teams/team_detail.html +++ b/symposion_project/templates/teams/team_detail.html @@ -19,4 +19,11 @@ {% endif %} + {% if can_apply %} +
+ {% csrf_token %} + +
+ {% endif %} + {% endblock %}