Files
@ 4272c8f8a8b4
Branch filter:
Location: symposion_app/symposion/teams/forms.py - annotation
4272c8f8a8b4
1.7 KiB
text/x-python
implemented invitations
4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 4272c8f8a8b4 | from django import forms
from django.contrib.auth.models import User
from symposion.teams.models import Membership
class TeamInvitationForm(forms.Form):
email = forms.EmailField(help_text="email address must be that of a user on the site")
def __init__(self, *args, **kwargs):
self.team = kwargs.pop("team")
super(TeamInvitationForm, self).__init__(*args, **kwargs)
def clean(self):
cleaned_data = super(TeamInvitationForm, self).clean()
email = cleaned_data.get("email")
if email is None:
raise forms.ValidationError("valid email address required")
try:
user = User.objects.get(email=email)
except User.DoesNotExist:
# eventually we can invite them but for now assume they are
# already on the site
raise forms.ValidationError("no known user with email address %s" % email)
state = self.team.get_state_for_user(user)
if state in ["member", "manager"]:
raise forms.ValidationError("user already in team")
if state in ["invited"]:
raise forms.ValidationError("user already invited to team")
self.user = user
self.state = state
return cleaned_data
def invite(self):
if self.state is None:
Membership.objects.create(team=self.team, user=self.user, state="invited")
elif self.state == "applied":
# if they applied we shortcut invitation process
membership = Membership.objects.get(team=self.team, user=self.user)
membership.state = "member"
membership.save()
|