Files
@ 7fe481ee98c5
Branch filter:
Location: symposion_app/symposion/teams/views.py - annotation
7fe481ee98c5
5.1 KiB
text/x-python
implemented team accept/reject
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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | 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 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 2c69596ec668 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 7fe481ee98c5 | 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)
@login_required
def team_promote(request, pk):
if request.method == "POST":
membership = get_object_or_404(Membership, pk=pk)
state = membership.team.get_state_for_user(request.user)
if request.user.is_staff or state == "manager":
if membership.state == "member":
membership.state = "manager"
membership.save()
# contrib.message
return redirect("team_detail", slug=membership.team.slug)
@login_required
def team_demote(request, pk):
if request.method == "POST":
membership = get_object_or_404(Membership, pk=pk)
state = membership.team.get_state_for_user(request.user)
if request.user.is_staff or state == "manager":
if membership.state == "manager":
membership.state = "member"
membership.save()
# contrib.message
return redirect("team_detail", slug=membership.team.slug)
@login_required
def team_accept(request, pk):
if request.method == "POST":
membership = get_object_or_404(Membership, pk=pk)
state = membership.team.get_state_for_user(request.user)
if request.user.is_staff or state == "manager":
if membership.state == "applied":
membership.state = "member"
membership.save()
# contrib.message
return redirect("team_detail", slug=membership.team.slug)
@login_required
def team_reject(request, pk):
if request.method == "POST":
membership = get_object_or_404(Membership, pk=pk)
state = membership.team.get_state_for_user(request.user)
if request.user.is_staff or state == "manager":
if membership.state == "applied":
membership.state = "rejected"
membership.save()
# contrib.message
return redirect("team_detail", slug=membership.team.slug)
|