diff --git a/ietf/doc/mails.py b/ietf/doc/mails.py index 2e3fe3266..9bd844452 100644 --- a/ietf/doc/mails.py +++ b/ietf/doc/mails.py @@ -483,3 +483,4 @@ def email_stream_tags_changed(request, doc, added_tags, removed_tags, by, commen removed=removed_tags, by=by, comment=comment)) + diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index e4ba25e0e..a002f14bf 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -480,8 +480,9 @@ class DeferUndeferTestCase(TestCase): if doc.type_id in defer_states: self.assertEqual(doc.get_state(defer_states[doc.type_id][0]).slug,defer_states[doc.type_id][1]) self.assertTrue(doc.active_defer_event()) - self.assertEqual(len(outbox), mailbox_before + 2) - self.assertTrue("State Update" in outbox[-2]['Subject']) + self.assertEqual(len(outbox), mailbox_before + 3) + self.assertTrue("State Update" in outbox[-3]['Subject']) + self.assertTrue("Telechat update" in outbox[-2]['Subject']) self.assertTrue("Deferred" in outbox[-1]['Subject']) self.assertTrue(doc.file_tag() in outbox[-1]['Subject']) @@ -534,7 +535,8 @@ class DeferUndeferTestCase(TestCase): if doc.type_id in undefer_states: self.assertEqual(doc.get_state(undefer_states[doc.type_id][0]).slug,undefer_states[doc.type_id][1]) self.assertFalse(doc.active_defer_event()) - self.assertEqual(len(outbox), mailbox_before + 2) + self.assertEqual(len(outbox), mailbox_before + 3) + self.assertTrue("Telechat update" in outbox[-3]['Subject']) self.assertTrue("State Update" in outbox[-2]['Subject']) self.assertTrue("Undeferred" in outbox[-1]['Subject']) self.assertTrue(doc.file_tag() in outbox[-1]['Subject']) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index afc314256..d69274488 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -232,7 +232,7 @@ class EditInfoTests(TestCase): data = dict(intended_std_level=str(draft.intended_std_level_id), stream=draft.stream_id, ad=str(draft.ad_id), - notify="test@example.com", + notify=draft.notify, note="", ) @@ -241,6 +241,7 @@ class EditInfoTests(TestCase): self.assertEqual(r.status_code, 200) # add to telechat + mailbox_before=len(outbox) self.assertTrue(not draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat")) data["telechat_date"] = TelechatDate.objects.active()[0].date.isoformat() r = self.client.post(url, data) @@ -249,8 +250,11 @@ class EditInfoTests(TestCase): draft = Document.objects.get(name=draft.name) self.assertTrue(draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat")) self.assertEqual(draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat").telechat_date, TelechatDate.objects.active()[0].date) + self.assertEqual(len(outbox),mailbox_before+1) + self.assertTrue("Telechat update" in outbox[-1]['Subject']) # change telechat + mailbox_before=len(outbox) data["telechat_date"] = TelechatDate.objects.active()[1].date.isoformat() r = self.client.post(url, data) self.assertEqual(r.status_code, 302) @@ -259,6 +263,8 @@ class EditInfoTests(TestCase): telechat_event = draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat") self.assertEqual(telechat_event.telechat_date, TelechatDate.objects.active()[1].date) self.assertFalse(telechat_event.returning_item) + self.assertEqual(len(outbox),mailbox_before+1) + self.assertTrue("Telechat update" in outbox[-1]['Subject']) # change to a telechat that should cause returning item to be auto-detected # First, make it appear that the previous telechat has already passed @@ -277,12 +283,15 @@ class EditInfoTests(TestCase): self.assertTrue(telechat_event.returning_item) # remove from agenda + mailbox_before=len(outbox) data["telechat_date"] = "" r = self.client.post(url, data) self.assertEqual(r.status_code, 302) draft = Document.objects.get(name=draft.name) self.assertTrue(not draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat").telechat_date) + self.assertEqual(len(outbox),mailbox_before+1) + self.assertTrue("Telechat update" in outbox[-1]['Subject']) def test_start_iesg_process_on_draft(self): make_test_data() diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py index 4de38aa80..e42b4d4c2 100644 --- a/ietf/doc/utils.py +++ b/ietf/doc/utils.py @@ -7,6 +7,7 @@ import datetime from django.conf import settings from django.db.models.query import EmptyQuerySet from django.forms import ValidationError +from django.utils.html import strip_tags from ietf.utils import markup_txt from ietf.doc.models import Document, DocHistory @@ -16,6 +17,23 @@ from ietf.name.models import DocReminderTypeName, DocRelationshipName from ietf.group.models import Role from ietf.ietfauth.utils import has_role from ietf.utils import draft +from ietf.utils.mail import send_mail + +#FIXME - it would be better if this lived in ietf/doc/mails.py, but there's +# an import order issue to work out. +def email_update_telechat(request, doc, text): + to = set(['iesg@ietf.org','iesg-secretary@ietf.org']) + to.update(set([x.strip() for x in doc.notify.replace(';', ',').split(',')])) + + if not to: + return + + text = strip_tags(text) + send_mail(request, list(to), None, + "Telechat update notice: %s" % doc.file_tag(), + "doc/mail/update_telechat.txt", + dict(text=text, + url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url())) def get_state_types(doc): res = [] @@ -368,6 +386,7 @@ def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None e.desc = "Removed telechat returning item indication" e.save() + email_update_telechat(request, doc, e.desc) def rebuild_reference_relations(doc,filename=None): if doc.type.slug != 'draft': diff --git a/ietf/templates/doc/mail/update_telechat.txt b/ietf/templates/doc/mail/update_telechat.txt new file mode 100644 index 000000000..048e15949 --- /dev/null +++ b/ietf/templates/doc/mail/update_telechat.txt @@ -0,0 +1,3 @@ +{% autoescape off %}{{ text }} +ID Tracker URL: {{ url }} +{% endautoescape %}