Skip to content

Commit 9084150

Browse files
committed
Get SDOs the user can send liaison on behalf of. See ietf-tools#345
- Legacy-Id: 2335
1 parent 9923b59 commit 9084150

File tree

3 files changed

+73
-4
lines changed

3 files changed

+73
-4
lines changed

ietf/liaisons/accounts.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def is_iab_executive_director(person):
3333
return has_role(person, Role.IAB_EXCUTIVE_DIRECTOR)
3434

3535

36-
def can_add_liaison(user):
36+
def can_add_outgoing_liaison(user):
3737
person = get_person_for_user(user)
3838
if not person:
3939
return False
@@ -43,3 +43,26 @@ def can_add_liaison(user):
4343
is_iabchair(person) or is_iab_executive_director(person)):
4444
return True
4545
return False
46+
47+
48+
def is_sdo_liaison_manager(person):
49+
return bool(person.liaisonmanagers_set.all())
50+
51+
52+
def is_sdo_authorized_individual(person):
53+
return bool(person.sdoauthorizedindividual_set.all())
54+
55+
56+
def can_add_incoming_liaison(user):
57+
person = get_person_for_user(user)
58+
if not person:
59+
return False
60+
61+
if (is_sdo_liaison_manager(person) or
62+
is_sdo_authorized_individual(person)):
63+
return True
64+
return False
65+
66+
67+
def can_add_liaison(user):
68+
return can_add_incoming_liaison(user) or can_add_outgoing_liaison(user)

ietf/liaisons/forms.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from django.template.loader import render_to_string
33

44
from ietf.liaisons.models import LiaisonDetail
5-
from ietf.liaisons.accounts import get_person_for_user
5+
from ietf.liaisons.accounts import (can_add_outgoing_liaison, can_add_incoming_liaison,
6+
get_person_for_user)
67

78

89
class LiaisonForm(forms.ModelForm):
@@ -23,10 +24,23 @@ class Meta:
2324
def __init__(self, user, *args, **kwargs):
2425
super(LiaisonForm, self).__init__(*args, **kwargs)
2526
self.person = get_person_for_user(user)
27+
self.set_from_field()
28+
self.set_replyto_field()
29+
self.set_organization_field()
2630

2731
def __unicode__(self):
2832
return self.as_div()
2933

34+
def set_from_field(self):
35+
assert NotImplemented
36+
37+
def set_replyto_field(self):
38+
email = self.person.email()
39+
self.fields['replyto'].initial = email and email[1]
40+
41+
def set_organization_field(self):
42+
assert NotImplemented
43+
3044
def as_div(self):
3145
return render_to_string('liaisons/liaisonform.html', {'form': self})
3246

@@ -43,3 +57,35 @@ def get_fieldsets(self):
4357
# if there is no fields in this fieldset, we continue to next fieldset
4458
continue
4559
yield fieldset_dict
60+
61+
62+
class IncomingLiaisonForm(LiaisonForm):
63+
64+
def set_from_field(self):
65+
sdo_managed = [i.sdo for i in self.person.liaisonmanagers_set.all()]
66+
sdo_authorized = [i.sdo for i in self.person.sdoauthorizedindividual_set.all()]
67+
sdos = set(sdo_managed).union(sdo_authorized)
68+
self.fields['from_field'].choices = [(i.pk, '%s (%s)' % (i.sdo_name, self.person)) for i in sdos]
69+
70+
def set_organization_field(self):
71+
organizations = ['The IETF', 'The IESG', 'The IAB']
72+
organizations.append('-- IETF Areas ---')
73+
organizations.append('-- IETF Working Groups ---')
74+
75+
76+
class OutgoingLiaisonForm(LiaisonForm):
77+
78+
def set_from_field(self):
79+
pass
80+
81+
def set_organization_field(self):
82+
pass
83+
84+
85+
def liaison_form_factory(request):
86+
user = request.user
87+
if can_add_incoming_liaison(user):
88+
return IncomingLiaisonForm(user)
89+
elif can_add_outgoing_liaison(user):
90+
return OutgoingLiaisonForm(user)
91+
return None

ietf/liaisons/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
from django.template import RequestContext
44

55
from ietf.liaisons.decorators import can_submit_liaison
6-
from ietf.liaisons.forms import LiaisonForm
6+
from ietf.liaisons.forms import liaison_form_factory
77

88

99
@can_submit_liaison
1010
def add_liaison(request):
11-
form = LiaisonForm(request.user)
11+
form = liaison_form_factory(request)
1212

1313
return render_to_response(
1414
'liaisons/liaisondetail_edit.html',

0 commit comments

Comments
 (0)