@@ -7,13 +7,13 @@ from django.contrib import messages
from symposion.utils.mail import send_email
from symposion.teams.forms import TeamInvitationForm
from symposion.teams.models import Team, Membership
## perm checks
# perm checks
#
# @@@ these can be moved
def can_join(team, user):
state = team.get_state_for_user(user)
if team.access == "open" and state is None:
@@ -47,35 +47,35 @@ def can_invite(team, user):
if team.access == "invitation":
if state == "manager" or user.is_staff:
return True
return False
## views
# views
@login_required
def team_detail(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 and not request.user.is_staff:
raise Http404()
if can_invite(team, request.user):
if request.method == "POST":
form = TeamInvitationForm(request.POST, team=team)
if form.is_valid():
form.invite()
send_email([form.user.email], "teams_user_invited", context={"team": team})
messages.success(request, "Invitation created.")
return redirect("team_detail", slug=slug)
else:
form = TeamInvitationForm(team=team)
form = None
return render(request, "teams/team_detail.html", {
"team": team,
"state": state,
"invite_form": form,
"can_join": can_join(team, request.user),
"can_leave": can_leave(team, request.user),
@@ -86,13 +86,13 @@ def team_detail(request, slug):
def team_join(request, slug):
if can_join(team, request.user) and request.method == "POST":
membership, created = Membership.objects.get_or_create(team=team, user=request.user)
membership.state = "member"
membership.save()
messages.success(request, "Joined team.")
@@ -103,13 +103,13 @@ def team_join(request, slug):
def team_leave(request, slug):
if can_leave(team, request.user) and request.method == "POST":
membership = Membership.objects.get(team=team, user=request.user)
membership.delete()
messages.success(request, "Left team.")
return redirect("dashboard")
@@ -119,13 +119,13 @@ def team_leave(request, slug):
def team_apply(request, slug):
if can_apply(team, request.user) and request.method == "POST":
membership.state = "applied"
managers = [m.user.email for m in team.managers()]
send_email(managers, "teams_user_applied", context={