Files
@ 7db401e9a280
Branch filter:
Location: symposion_app/symposion/teams/views.py - annotation
7db401e9a280
3.2 KiB
text/x-python
show members and applicants on team detail page
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | 86a346f62804 a4dea58195bc 86a346f62804 86a346f62804 86a346f62804 a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc 7de1763de0d0 7de1763de0d0 a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 7de1763de0d0 7de1763de0d0 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 a4dea58195bc 86a346f62804 86a346f62804 86a346f62804 86a346f62804 86a346f62804 4f888ffd576e e96e416bdce9 86a346f62804 6e67b505013b 86a346f62804 6e67b505013b 4f888ffd576e a4dea58195bc a4dea58195bc 1bfd0cc2f048 86a346f62804 a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc e96e416bdce9 a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc e96e416bdce9 a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc a4dea58195bc 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 e96e416bdce9 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 1bfd0cc2f048 | from django.http import Http404
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from symposion.teams.models import Team, Membership
## 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:
return True
elif team.access == "invitation" and state is "invited":
return True
elif user.is_staff and state is None:
return True
else:
return False
def can_leave(team, user):
state = team.get_state_for_user(user)
if state == "member": # managers can't leave at the moment
return True
else:
return False
def can_apply(team, user):
state = team.get_state_for_user(user)
if team.access == "application" and state is None:
return True
elif user.is_staff and state is None:
return True
else:
return False
## 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()
return render(request, "teams/team_detail.html", {
"team": team,
"state": state,
"can_join": can_join(team, request.user),
"can_leave": can_leave(team, request.user),
"can_apply": can_apply(team, request.user),
})
@login_required
def team_join(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_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()
# contrib.message
return redirect("team_detail", slug=slug)
else:
return redirect("team_detail", slug=slug)
@login_required
def team_leave(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_leave(team, request.user) and request.method == "POST":
membership = Membership.objects.get(team=team, user=request.user)
membership.delete()
# contrib.message
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 and not request.user.is_staff:
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)
|