Skip to content

Commit 56ddf4c

Browse files
committed
checkpoint. includes moderate change to how personnel changes are sent out
- Legacy-Id: 10020
1 parent 89f038a commit 56ddf4c

5 files changed

Lines changed: 129 additions & 60 deletions

File tree

ietf/doc/views_charter.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from ietf.utils.history import find_history_active_at
3030
from ietf.utils.mail import send_mail_preformatted
3131
from ietf.utils.textupload import get_cleaned_text_file_content
32-
from ietf.group.mails import email_iesg_secretary_re_charter
32+
from ietf.group.mails import email_admin_re_charter
3333

3434
class ChangeStateForm(forms.Form):
3535
charter_state = forms.ModelChoiceField(State.objects.filter(used=True, type="charter"), label="Charter state", empty_label=None, required=False)
@@ -141,7 +141,7 @@ def change_state(request, name, option=None):
141141
charter.save()
142142

143143
if message or charter_state.slug == "intrev" or charter_state.slug == "extrev":
144-
email_iesg_secretary_re_charter(request, group, "Charter state changed to %s" % charter_state.name, message)
144+
email_admin_re_charter(request, group, "Charter state changed to %s" % charter_state.name, message,'charter_state_edit_admin_needed')
145145

146146
# TODO - do we need a seperate set of recipients for state changes to charters vrs other kind of documents
147147
email_state_changed(request, charter, "State changed to %s." % charter_state, 'doc_state_edited')
@@ -267,7 +267,7 @@ def change_title(request, name, option=None):
267267
charter.time = datetime.datetime.now()
268268
charter.save()
269269
if message:
270-
email_iesg_secretary_re_charter(request, group, "Charter title changed to %s" % new_title, message)
270+
email_admin_re_charter(request, group, "Charter title changed to %s" % new_title, message,'charter_state_edit_admin_needed')
271271
email_state_changed(request, charter, "Title changed to %s." % new_title,'doc_state_edited')
272272
return redirect('doc_view', name=charter.name)
273273
else:
@@ -645,7 +645,7 @@ def approve(request, name):
645645

646646
fix_charter_revision_after_approval(charter, login)
647647

648-
email_iesg_secretary_re_charter(request, group, "Charter state changed to %s" % new_charter_state.name, change_description)
648+
email_admin_re_charter(request, group, "Charter state changed to %s" % new_charter_state.name, change_description,'charter_state_edit_admin_needed')
649649

650650
# move milestones over
651651
milestones_to_delete = list(group.groupmilestone_set.filter(state__in=("active", "review")))

ietf/group/edit.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
from ietf.ietfauth.utils import has_role
2222
from ietf.person.fields import SearchableEmailsField
2323
from ietf.person.models import Person, Email
24-
from ietf.group.mails import ( email_iesg_secretary_re_charter, email_iesg_secretary_personnel_change,
25-
email_interested_parties_re_changed_delegates )
24+
from ietf.group.mails import ( email_admin_re_charter, email_personnel_change)
2625
from ietf.utils.ordereddict import insert_after_in_ordered_dict
2726

2827
MAX_GROUP_DELEGATES = 3
@@ -255,6 +254,7 @@ def diff(attr, name):
255254
diff('list_archive', "Mailing list archive")
256255

257256
personnel_change_text=""
257+
changed_personnel = set()
258258
# update roles
259259
for attr, slug, title in [('ad','ad','Shepherding AD'), ('chairs', 'chair', "Chairs"), ('secretaries', 'secr', "Secretaries"), ('techadv', 'techadv', "Tech Advisors"), ('delegates', 'delegate', "Delegates")]:
260260
new = clean[attr]
@@ -276,10 +276,10 @@ def diff(attr, name):
276276
if deleted:
277277
change_text=title + ' deleted: ' + ", ".join(x.formatted_email() for x in deleted)
278278
personnel_change_text+=change_text+"\n"
279-
email_interested_parties_re_changed_delegates(request, group, title, added, deleted)
279+
changed_personnel.update(set(old)^set(new))
280280

281281
if personnel_change_text!="":
282-
email_iesg_secretary_personnel_change(request, group, personnel_change_text)
282+
email_personnel_change(request, group, personnel_change_text, changed_personnel)
283283

284284
# update urls
285285
new_urls = clean['urls']
@@ -357,7 +357,7 @@ def conclude(request, acronym, group_type=None):
357357
if form.is_valid():
358358
instructions = form.cleaned_data['instructions']
359359

360-
email_iesg_secretary_re_charter(request, group, "Request closing of group", instructions)
360+
email_admin_re_charter(request, group, "Request closing of group", instructions, 'group_closure_requested')
361361

362362
e = GroupEvent(group=group, by=request.user.person)
363363
e.type = "requested_close"

ietf/group/mails.py

Lines changed: 8 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
from ietf.group.utils import milestone_reviewer_for_group_type
1515
from ietf.mailtoken.utils import gather_address_list
1616

17-
def email_iesg_secretary_re_charter(request, group, subject, text):
18-
to = gather_address_list('charter_state_message_provided',group=group)
17+
def email_admin_re_charter(request, group, subject, text, mailtoken):
18+
to = gather_address_list(mailtoken,group=group)
1919
full_subject = u"Regarding %s %s: %s" % (group.type.name, group.acronym, subject)
2020
text = strip_tags(text)
2121

@@ -28,42 +28,11 @@ def email_iesg_secretary_re_charter(request, group, subject, text):
2828
)
2929
)
3030

31-
def email_iesg_secretary_personnel_change(request, group, text):
32-
to = ["iesg-secretary@ietf.org"]
31+
def email_personnel_change(request, group, text, changed_personnel):
32+
to = gather_address_list('group_personnel_change',group=group,changed_personnel=changed_personnel)
3333
full_subject = u"Personnel change for %s working group" % (group.acronym)
3434
send_mail_text(request, to, None, full_subject,text)
3535

36-
def email_interested_parties_re_changed_delegates(request, group, title, added, deleted):
37-
38-
# Send to management and chairs
39-
to = []
40-
if group.ad_role():
41-
to.append(group.ad_role().email.formatted_email())
42-
elif group.type_id == "rg":
43-
to.append("IRTF Chair <irtf-chair@irtf.org>")
44-
45-
for r in group.role_set.filter(name="chair"):
46-
to.append(r.formatted_email())
47-
48-
# Send to the delegates who were added or deleted
49-
for delegate in added:
50-
to.append(delegate.formatted_email())
51-
52-
for delegate in deleted:
53-
to.append(delegate.formatted_email())
54-
55-
personnel_change_text=""
56-
if added:
57-
change_text=title + ' added: ' + ", ".join(x.formatted_email() for x in added)
58-
personnel_change_text+=change_text+"\n"
59-
if deleted:
60-
change_text=title + ' deleted: ' + ", ".join(x.formatted_email() for x in deleted)
61-
personnel_change_text+=change_text+"\n"
62-
63-
if to:
64-
full_subject = u"%s changed for %s working group" % (title, group.acronym)
65-
send_mail_text(request, to, None, full_subject,personnel_change_text)
66-
6736

6837
def email_milestones_changed(request, group, changes):
6938
def wrap_up_email(to, text):
@@ -94,18 +63,12 @@ def wrap_up_email(to, text):
9463

9564
def email_milestone_review_reminder(group, grace_period=7):
9665
"""Email reminders about milestones needing review to management."""
97-
to = []
98-
99-
if group.ad_role():
100-
to.append(group.ad_role().email.formatted_email())
101-
elif group.type_id == "rg":
102-
to.append("IRTF Chair <irtf-chair@irtf.org>")
66+
to = gather_address_list('milestone_review_reminder',group=group)
67+
cc = gather_address_list('milestone_review_reminder_cc',group=group)
10368

10469
if not to:
10570
return False
10671

107-
cc = [r.formatted_email() for r in group.role_set.filter(name="chair")]
108-
10972
now = datetime.datetime.now()
11073
too_early = True
11174

@@ -139,7 +102,7 @@ def groups_with_milestones_needing_review():
139102
return Group.objects.filter(groupmilestone__state="review").distinct()
140103

141104
def email_milestones_due(group, early_warning_days):
142-
to = [r.formatted_email() for r in group.role_set.filter(name="chair")]
105+
to = gather_address_list('milestones_due_soon',group=group)
143106

144107
today = datetime.date.today()
145108
early_warning = today + datetime.timedelta(days=early_warning_days)
@@ -166,7 +129,7 @@ def groups_needing_milestones_due_reminder(early_warning_days):
166129
return Group.objects.filter(state="active", groupmilestone__due__in=[today, today + datetime.timedelta(days=early_warning_days)], groupmilestone__resolved="", groupmilestone__state="active").distinct()
167130

168131
def email_milestones_overdue(group):
169-
to = [r.formatted_email() for r in group.role_set.filter(name="chair")]
132+
to = gather_address_list('milestones_overdue',group=group)
170133

171134
today = datetime.date.today()
172135

ietf/mailtoken/migrations/0002_auto_20150809_1314.py

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,10 @@ def make_recipients(apps):
153153
desc="Any ADs holding an active DISCUSS position on a given document",
154154
template=None)
155155

156+
rc(slug='group_changed_personnel',
157+
desc="Any personnel who were added or deleted when a group's personnel changes",
158+
template='{{ changed_personnel | join:", " }}')
159+
156160
def make_mailtokens(apps):
157161

158162
Recipient=apps.get_model('mailtoken','Recipient')
@@ -429,8 +433,12 @@ def mt_factory(slug,desc,recipient_slugs):
429433
'doc_group_responsible_directors',
430434
])
431435

432-
mt_factory(slug='charter_state_message_provided',
433-
desc="Recipients for extra message when provided on the charter state editing form",
436+
mt_factory(slug='charter_state_edit_admin_needed',
437+
desc="Recipients for message to adminstrators when a charter state edit needs followon administrative action",
438+
recipient_slugs=['iesg_secretary'])
439+
440+
mt_factory(slug='group_closure_requested',
441+
desc="Recipients for message requesting closure of a group",
434442
recipient_slugs=['iesg_secretary'])
435443

436444
mt_factory(slug='doc_expires_soon',
@@ -508,14 +516,41 @@ def mt_factory(slug,desc,recipient_slugs):
508516
])
509517

510518
mt_factory(slug='sub_new_version',
511-
desc="Recipient for notification of a new version of an existing document",
519+
desc="Recipients for notification of a new version of an existing document",
512520
recipient_slugs=['doc_notify',
513521
'doc_ad',
514522
'non_ietf_stream_manager',
515523
'rfc_editor_if_doc_in_queue',
516524
'doc_discussing_ads',
517525
])
518526

527+
mt_factory(slug='milestone_review_reminder',
528+
desc="Recipients for reminder message that unapproved milestone changes need review",
529+
recipient_slugs=['group_responsible_directors',
530+
])
531+
532+
mt_factory(slug='milestone_review_reminder_cc',
533+
desc="Copied on reminder message that unapproved milestone changes need review",
534+
recipient_slugs=['group_chairs',
535+
])
536+
537+
mt_factory(slug='milestones_due_soon',
538+
desc='Recipients for reminder message for milestones about to become overdue',
539+
recipient_slugs=['group_chairs',
540+
])
541+
542+
mt_factory(slug='milestones_overdue',
543+
desc='Recipients for message about milestones that are overdue',
544+
recipient_slugs=['group_chairs',
545+
])
546+
547+
mt_factory(slug='group_personnel_change',
548+
desc="Recipients for a message noting changes in a group's personnel",
549+
recipient_slugs=['iesg_secretary',
550+
'group_responsible_directors',
551+
'group_chairs',
552+
'group_changed_personnel',
553+
])
519554

520555
def forward(apps, schema_editor):
521556

ietf/name/fixtures/names.json

Lines changed: 74 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4463,6 +4463,14 @@
44634463
"model": "mailtoken.recipient",
44644464
"pk": "group_chairs"
44654465
},
4466+
{
4467+
"fields": {
4468+
"template": "{{ changed_personnel | join:\", \" }}",
4469+
"desc": "Any personnel who were added or deleted when a group's personnel changes"
4470+
},
4471+
"model": "mailtoken.recipient",
4472+
"pk": "group_changed_personnel"
4473+
},
44664474
{
44674475
"fields": {
44684476
"template": "{{ group.list_email }}",
@@ -4796,10 +4804,10 @@
47964804
"recipients": [
47974805
"iesg_secretary"
47984806
],
4799-
"desc": "Recipients for extra message when provided on the charter state editing form"
4807+
"desc": "Recipients for message to adminstrators when a charter state edit needs followon administrative action"
48004808
},
48014809
"model": "mailtoken.mailtoken",
4802-
"pk": "charter_state_message_provided"
4810+
"pk": "charter_state_edit_admin_needed"
48034811
},
48044812
{
48054813
"fields": {
@@ -5005,6 +5013,16 @@
50055013
"model": "mailtoken.mailtoken",
50065014
"pk": "group_approved_milestones_edited"
50075015
},
5016+
{
5017+
"fields": {
5018+
"recipients": [
5019+
"iesg_secretary"
5020+
],
5021+
"desc": "Recipients for message requesting closure of a group"
5022+
},
5023+
"model": "mailtoken.mailtoken",
5024+
"pk": "group_closure_requested"
5025+
},
50085026
{
50095027
"fields": {
50105028
"recipients": [
@@ -5016,6 +5034,19 @@
50165034
"model": "mailtoken.mailtoken",
50175035
"pk": "group_milestones_edited"
50185036
},
5037+
{
5038+
"fields": {
5039+
"recipients": [
5040+
"group_chairs",
5041+
"group_changed_personnel",
5042+
"group_responsible_directors",
5043+
"iesg_secretary"
5044+
],
5045+
"desc": "Recipients for a message noting changes in a group's personnel"
5046+
},
5047+
"model": "mailtoken.mailtoken",
5048+
"pk": "group_personnel_change"
5049+
},
50195050
{
50205051
"fields": {
50215052
"recipients": [
@@ -5098,6 +5129,46 @@
50985129
"model": "mailtoken.mailtoken",
50995130
"pk": "last_call_requested_cc"
51005131
},
5132+
{
5133+
"fields": {
5134+
"recipients": [
5135+
"group_chairs"
5136+
],
5137+
"desc": "Recipients for reminder message for milestones about to become overdue"
5138+
},
5139+
"model": "mailtoken.mailtoken",
5140+
"pk": "milestones_due_soon"
5141+
},
5142+
{
5143+
"fields": {
5144+
"recipients": [
5145+
"group_chairs"
5146+
],
5147+
"desc": "Recipients for message about milestones that are overdue"
5148+
},
5149+
"model": "mailtoken.mailtoken",
5150+
"pk": "milestones_overdue"
5151+
},
5152+
{
5153+
"fields": {
5154+
"recipients": [
5155+
"group_responsible_directors"
5156+
],
5157+
"desc": "Recipients for reminder message that unapproved milestone changes need review"
5158+
},
5159+
"model": "mailtoken.mailtoken",
5160+
"pk": "milestone_review_reminder"
5161+
},
5162+
{
5163+
"fields": {
5164+
"recipients": [
5165+
"group_chairs"
5166+
],
5167+
"desc": "Copied on reminder message that unapproved milestone changes need review"
5168+
},
5169+
"model": "mailtoken.mailtoken",
5170+
"pk": "milestone_review_reminder_cc"
5171+
},
51015172
{
51025173
"fields": {
51035174
"recipients": [
@@ -5253,7 +5324,7 @@
52535324
"doc_notify",
52545325
"rfc_editor_if_doc_in_queue"
52555326
],
5256-
"desc": "Recipient for notification of a new version of an existing document"
5327+
"desc": "Recipients for notification of a new version of an existing document"
52575328
},
52585329
"model": "mailtoken.mailtoken",
52595330
"pk": "sub_new_version"

0 commit comments

Comments
 (0)