From f5b6465e81b85db6c095d56f700f582fbf05d909 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Thu, 17 Sep 2015 20:03:45 +0000 Subject: [PATCH] mailtoken becomes mailtrigger - Legacy-Id: 10090 --- ietf/doc/expire.py | 2 +- ietf/doc/mails.py | 6 +- ietf/doc/tests_ballot.py | 8 +- ietf/doc/utils.py | 4 +- ietf/doc/utils_charter.py | 2 +- ietf/doc/views_ballot.py | 8 +- ietf/doc/views_conflict_review.py | 2 +- ietf/doc/views_doc.py | 2 +- ietf/doc/views_draft.py | 2 +- ietf/doc/views_status_change.py | 2 +- ietf/group/info.py | 2 +- ietf/group/mails.py | 6 +- ietf/ipr/mail.py | 4 +- ietf/ipr/tests.py | 2 +- ietf/ipr/views.py | 2 +- ietf/liaisons/mails.py | 2 +- ietf/mailtoken/urls.py | 11 - ietf/{mailtoken => mailtrigger}/__init__.py | 0 ietf/{mailtoken => mailtrigger}/admin.py | 6 +- ietf/{mailtoken => mailtrigger}/forms.py | 18 +- .../migrations/0001_initial.py | 10 +- .../migrations/0002_auto_20150809_1314.py | 20 +- .../migrations/__init__.py | 0 ietf/{mailtoken => mailtrigger}/models.py | 2 +- ietf/{mailtoken => mailtrigger}/resources.py | 12 +- ietf/{mailtoken => mailtrigger}/tests.py | 10 +- ietf/mailtrigger/urls.py | 11 + ietf/{mailtoken => mailtrigger}/utils.py | 16 +- ietf/{mailtoken => mailtrigger}/views.py | 18 +- ietf/name/fixtures/names.json | 264 +++++++++--------- ietf/name/generate_fixtures.py | 6 +- ietf/nomcom/forms.py | 2 +- ietf/nomcom/utils.py | 2 +- ietf/secr/meetings/views.py | 2 +- ietf/secr/sreq/views.py | 2 +- ietf/settings.py | 2 +- ietf/submit/mail.py | 2 +- ietf/submit/views.py | 2 +- ietf/templates/doc/document_email.html | 8 +- ietf/templates/group/email.html | 8 +- .../{mailtoken => mailtrigger}/recipient.html | 10 +- .../token.html => mailtrigger/trigger.html} | 20 +- ietf/urls.py | 2 +- 43 files changed, 261 insertions(+), 261 deletions(-) delete mode 100644 ietf/mailtoken/urls.py rename ietf/{mailtoken => mailtrigger}/__init__.py (100%) rename ietf/{mailtoken => mailtrigger}/admin.py (71%) rename ietf/{mailtoken => mailtrigger}/forms.py (52%) rename ietf/{mailtoken => mailtrigger}/migrations/0001_initial.py (85%) rename ietf/{mailtoken => mailtrigger}/migrations/0002_auto_20150809_1314.py (98%) rename ietf/{mailtoken => mailtrigger}/migrations/__init__.py (100%) rename ietf/{mailtoken => mailtrigger}/models.py (99%) rename ietf/{mailtoken => mailtrigger}/resources.py (73%) rename ietf/{mailtoken => mailtrigger}/tests.py (67%) create mode 100644 ietf/mailtrigger/urls.py rename ietf/{mailtoken => mailtrigger}/utils.py (82%) rename ietf/{mailtoken => mailtrigger}/views.py (53%) rename ietf/templates/{mailtoken => mailtrigger}/recipient.html (63%) rename ietf/templates/{mailtoken/token.html => mailtrigger/trigger.html} (57%) diff --git a/ietf/doc/expire.py b/ietf/doc/expire.py index 2288472e6..4e215abc6 100644 --- a/ietf/doc/expire.py +++ b/ietf/doc/expire.py @@ -10,7 +10,7 @@ from ietf.doc.models import Document, DocEvent, State, save_document_in_history, from ietf.person.models import Person from ietf.meeting.models import Meeting from ietf.doc.utils import add_state_change_event -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists def expirable_draft(draft): diff --git a/ietf/doc/mails.py b/ietf/doc/mails.py index c940c80bd..ab7d336c6 100644 --- a/ietf/doc/mails.py +++ b/ietf/doc/mails.py @@ -14,10 +14,10 @@ from ietf.doc.models import WriteupDocEvent, LastCallDocEvent, DocAlias, Consens from ietf.doc.utils import needed_ballot_positions, get_document_content from ietf.group.models import Role from ietf.doc.models import Document -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists -def email_state_changed(request, doc, text, mailtoken_id=None): - (to,cc) = gather_address_lists(mailtoken_id or 'doc_state_edited',doc=doc) +def email_state_changed(request, doc, text, mailtrigger_id=None): + (to,cc) = gather_address_lists(mailtrigger_id or 'doc_state_edited',doc=doc) if not to: return diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index c30a2b61e..1589df22c 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -152,7 +152,7 @@ class EditPositionTests(TestCase): # send mailbox_before = len(outbox) - r = self.client.post(url, dict(extra_cc="test298347@example.com", cc_tokens=['doc_notify','doc_group_chairs'])) + r = self.client.post(url, dict(extra_cc="test298347@example.com", cc_choices=['doc_notify','doc_group_chairs'])) self.assertEqual(r.status_code, 302) self.assertEqual(len(outbox), mailbox_before + 1) @@ -163,11 +163,11 @@ class EditPositionTests(TestCase): self.assertTrue("clearer title" in str(m)) self.assertTrue("Test!" in str(m)) self.assertTrue("iesg@" in m['To']) - # cc_token doc_group_chairs + # cc_choice doc_group_chairs self.assertTrue("mars-chairs@" in m['Cc']) - # cc_token doc_notify + # cc_choice doc_notify self.assertTrue("somebody@example.com" in m['Cc']) - # cc_token doc_group_email_list was not selected + # cc_choice doc_group_email_list was not selected self.assertFalse(draft.group.list_email in m['Cc']) # extra-cc self.assertTrue("test298347@example.com" in m['Cc']) diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py index 91900f0b2..575fa2c44 100644 --- a/ietf/doc/utils.py +++ b/ietf/doc/utils.py @@ -18,7 +18,7 @@ from ietf.group.models import Role from ietf.ietfauth.utils import has_role from ietf.utils import draft, markup_txt from ietf.utils.mail import send_mail -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists #TODO FIXME - it would be better if this lived in ietf/doc/mails.py, but there's # an import order issue to work out. @@ -524,7 +524,7 @@ def check_common_doc_name_rules(name): raise ValidationError(errors) def get_initial_notify(doc,extra=None): - # With the mailtoken based changes, a document's notify should start empty + # With the mailtrigger based changes, a document's notify should start empty receivers = [] if extra: diff --git a/ietf/doc/utils_charter.py b/ietf/doc/utils_charter.py index ef51336f8..c4f33f8fe 100644 --- a/ietf/doc/utils_charter.py +++ b/ietf/doc/utils_charter.py @@ -6,7 +6,7 @@ from django.conf import settings from ietf.doc.models import NewRevisionDocEvent, WriteupDocEvent from ietf.utils.history import find_history_active_at from ietf.utils.mail import parse_preformatted -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists def charter_name_for_group(group): if group.type_id == "rg": diff --git a/ietf/doc/views_ballot.py b/ietf/doc/views_ballot.py index f861592c8..1a0c4a5cc 100644 --- a/ietf/doc/views_ballot.py +++ b/ietf/doc/views_ballot.py @@ -27,8 +27,8 @@ from ietf.message.utils import infer_message from ietf.name.models import BallotPositionName from ietf.person.models import Person from ietf.utils.mail import send_mail_text, send_mail_preformatted -from ietf.mailtoken.utils import gather_address_lists -from ietf.mailtoken.forms import CcSelectForm +from ietf.mailtrigger.utils import gather_address_lists +from ietf.mailtrigger.forms import CcSelectForm BALLOT_CHOICES = (("yes", "Yes"), ("noobj", "No Objection"), @@ -289,7 +289,7 @@ def send_ballot_comment(request, name, ballot_id): if request.method == 'POST': cc = [] - cc_select_form = CcSelectForm(data=request.POST,mailtoken_slug='ballot_saved',mailtoken_context={'doc':doc}) + cc_select_form = CcSelectForm(data=request.POST,mailtrigger_slug='ballot_saved',mailtrigger_context={'doc':doc}) if cc_select_form.is_valid(): cc.extend(cc_select_form.get_selected_addresses()) extra_cc = [x.strip() for x in request.POST.get("extra_cc","").split(',') if x.strip()] @@ -302,7 +302,7 @@ def send_ballot_comment(request, name, ballot_id): else: - cc_select_form = CcSelectForm(mailtoken_slug='ballot_saved',mailtoken_context={'doc':doc}) + cc_select_form = CcSelectForm(mailtrigger_slug='ballot_saved',mailtrigger_context={'doc':doc}) return render_to_response('doc/ballot/send_ballot_comment.html', dict(doc=doc, diff --git a/ietf/doc/views_conflict_review.py b/ietf/doc/views_conflict_review.py index b5e4644ee..e6a47fdc7 100644 --- a/ietf/doc/views_conflict_review.py +++ b/ietf/doc/views_conflict_review.py @@ -20,7 +20,7 @@ from ietf.ietfauth.utils import has_role, role_required, is_authorized_in_doc_st from ietf.person.models import Person from ietf.utils.mail import send_mail_preformatted from ietf.utils.textupload import get_cleaned_text_file_content -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists class ChangeStateForm(forms.Form): review_state = forms.ModelChoiceField(State.objects.filter(used=True, type="conflrev"), label="Conflict review state", empty_label=None, required=True) diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py index f9af8ce7e..aa94cac1b 100644 --- a/ietf/doc/views_doc.py +++ b/ietf/doc/views_doc.py @@ -59,7 +59,7 @@ from ietf.person.models import Email from ietf.utils.history import find_history_active_at from ietf.doc.forms import TelechatForm, NotifyForm from ietf.doc.mails import email_comment -from ietf.mailtoken.utils import gather_relevant_expansions +from ietf.mailtrigger.utils import gather_relevant_expansions def render_document_top(request, doc, tab, name): tabs = [] diff --git a/ietf/doc/views_draft.py b/ietf/doc/views_draft.py index 8cc432f16..d35984df4 100644 --- a/ietf/doc/views_draft.py +++ b/ietf/doc/views_draft.py @@ -38,7 +38,7 @@ from ietf.person.models import Person, Email from ietf.secr.lib.template import jsonapi from ietf.utils.mail import send_mail, send_mail_message from ietf.utils.textupload import get_cleaned_text_file_content -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists class ChangeStateForm(forms.Form): state = forms.ModelChoiceField(State.objects.filter(used=True, type="draft-iesg"), empty_label=None, required=True) diff --git a/ietf/doc/views_status_change.py b/ietf/doc/views_status_change.py index b43b809ae..124729591 100644 --- a/ietf/doc/views_status_change.py +++ b/ietf/doc/views_status_change.py @@ -22,7 +22,7 @@ from ietf.name.models import DocRelationshipName, StdLevelName from ietf.person.models import Person from ietf.utils.mail import send_mail_preformatted from ietf.utils.textupload import get_cleaned_text_file_content -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists class ChangeStateForm(forms.Form): new_state = forms.ModelChoiceField(State.objects.filter(type="statchg", used=True), label="Status Change Evaluation State", empty_label=None, required=True) diff --git a/ietf/group/info.py b/ietf/group/info.py index 33ab37792..1ab644779 100644 --- a/ietf/group/info.py +++ b/ietf/group/info.py @@ -57,7 +57,7 @@ from ietf.group.utils import get_charter_text, can_manage_group_type, milestone_ from ietf.group.utils import can_manage_materials, get_group_or_404 from ietf.utils.pipe import pipe from ietf.settings import MAILING_LIST_INFO_URL -from ietf.mailtoken.utils import gather_relevant_expansions +from ietf.mailtrigger.utils import gather_relevant_expansions def roles(group, role_name): return Role.objects.filter(group=group, name=role_name).select_related("email", "person") diff --git a/ietf/group/mails.py b/ietf/group/mails.py index 66324dad9..b06d5888b 100644 --- a/ietf/group/mails.py +++ b/ietf/group/mails.py @@ -12,10 +12,10 @@ from django.core.urlresolvers import reverse as urlreverse from ietf.utils.mail import send_mail, send_mail_text from ietf.group.models import Group from ietf.group.utils import milestone_reviewer_for_group_type -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists -def email_admin_re_charter(request, group, subject, text, mailtoken): - (to,cc) = gather_address_lists(mailtoken,group=group) +def email_admin_re_charter(request, group, subject, text, mailtrigger): + (to,cc) = gather_address_lists(mailtrigger,group=group) full_subject = u"Regarding %s %s: %s" % (group.type.name, group.acronym, subject) text = strip_tags(text) diff --git a/ietf/ipr/mail.py b/ietf/ipr/mail.py index abb1338a1..f37552f51 100644 --- a/ietf/ipr/mail.py +++ b/ietf/ipr/mail.py @@ -11,7 +11,7 @@ from ietf.ipr.models import IprEvent from ietf.message.models import Message from ietf.person.models import Person from ietf.utils.log import log -from ietf.mailtoken.utils import get_base_ipr_request_address +from ietf.mailtrigger.utils import get_base_ipr_request_address # ---------------------------------------------------------------- # Date Functions @@ -129,7 +129,7 @@ def get_update_submitter_emails(ipr): else: email_to_iprs[email] = [related.target] - # TODO: This has not been converted to use mailtoken. It is complicated. + # TODO: This has not been converted to use mailtrigger. It is complicated. # When converting it, it will need something like ipr_submitter_ietfer_or_holder perhaps for email in email_to_iprs: context = dict( diff --git a/ietf/ipr/tests.py b/ietf/ipr/tests.py index f7b139c73..68ab9ac0a 100644 --- a/ietf/ipr/tests.py +++ b/ietf/ipr/tests.py @@ -15,7 +15,7 @@ from ietf.message.models import Message from ietf.utils.test_utils import TestCase, login_testing_unauthorized from ietf.utils.test_data import make_test_data from ietf.utils.mail import outbox, empty_outbox -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists class IprTests(TestCase): diff --git a/ietf/ipr/views.py b/ietf/ipr/views.py index 29b5a8a18..9de2c1799 100644 --- a/ietf/ipr/views.py +++ b/ietf/ipr/views.py @@ -34,7 +34,7 @@ from ietf.person.models import Person from ietf.secr.utils.document import get_rfc_num, is_draft from ietf.utils.draft_search import normalize_draftname from ietf.utils.mail import send_mail, send_mail_message -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists # ---------------------------------------------------------------- # Globals diff --git a/ietf/liaisons/mails.py b/ietf/liaisons/mails.py index ab330f773..283ab1377 100644 --- a/ietf/liaisons/mails.py +++ b/ietf/liaisons/mails.py @@ -7,7 +7,7 @@ from django.core.urlresolvers import reverse as urlreverse from ietf.utils.mail import send_mail_text from ietf.liaisons.utils import role_persons_with_fixed_email from ietf.group.models import Role -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists def send_liaison_by_email(request, liaison): subject = u'New Liaison Statement, "%s"' % (liaison.title) diff --git a/ietf/mailtoken/urls.py b/ietf/mailtoken/urls.py deleted file mode 100644 index 1faf2b719..000000000 --- a/ietf/mailtoken/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.conf.urls import patterns, url -from django.views.generic import RedirectView -from django.core.urlresolvers import reverse_lazy - -urlpatterns = patterns('ietf.mailtoken.views', - url(r'^$', RedirectView.as_view(url=reverse_lazy('mailtoken_show_tokens'), permanent=True)), - url(r'^token/$', 'show_tokens', name='mailtoken_show_tokens' ), - url(r'^token/(?P[-\w]+)/$', 'show_tokens' ), - url(r'^recipient/$', 'show_recipients' ), - url(r'^recipient/(?P[-\w]+)/$', 'show_recipients' ), -) diff --git a/ietf/mailtoken/__init__.py b/ietf/mailtrigger/__init__.py similarity index 100% rename from ietf/mailtoken/__init__.py rename to ietf/mailtrigger/__init__.py diff --git a/ietf/mailtoken/admin.py b/ietf/mailtrigger/admin.py similarity index 71% rename from ietf/mailtoken/admin.py rename to ietf/mailtrigger/admin.py index c58f4c551..e192a2066 100644 --- a/ietf/mailtoken/admin.py +++ b/ietf/mailtrigger/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin -from ietf.mailtoken.models import MailToken, Recipient +from ietf.mailtrigger.models import MailTrigger, Recipient class RecipientAdmin(admin.ModelAdmin): list_display = [ 'slug', 'desc', 'template', 'has_code', ] @@ -10,8 +10,8 @@ class RecipientAdmin(admin.ModelAdmin): admin.site.register(Recipient, RecipientAdmin) -class MailTokenAdmin(admin.ModelAdmin): +class MailTriggerAdmin(admin.ModelAdmin): list_display = [ 'slug', 'desc', ] filter_horizontal = [ 'to', 'cc', ] -admin.site.register(MailToken, MailTokenAdmin) +admin.site.register(MailTrigger, MailTriggerAdmin) diff --git a/ietf/mailtoken/forms.py b/ietf/mailtrigger/forms.py similarity index 52% rename from ietf/mailtoken/forms.py rename to ietf/mailtrigger/forms.py index 97e55f99f..d7955d2f3 100644 --- a/ietf/mailtoken/forms.py +++ b/ietf/mailtrigger/forms.py @@ -1,30 +1,30 @@ from django import forms -from ietf.mailtoken.models import MailToken +from ietf.mailtrigger.models import MailTrigger class CcSelectForm(forms.Form): expansions = dict() - cc_tokens = forms.MultipleChoiceField( + cc_choices = forms.MultipleChoiceField( label='Cc', choices=[], widget=forms.CheckboxSelectMultiple(attrs={'frob':'knob'}), ) - def __init__(self, mailtoken_slug, mailtoken_context, *args, **kwargs): + def __init__(self, mailtrigger_slug, mailtrigger_context, *args, **kwargs): super(CcSelectForm,self).__init__(*args,**kwargs) - mailtoken = MailToken.objects.get(slug=mailtoken_slug) + mailtrigger = MailTrigger.objects.get(slug=mailtrigger_slug) - for r in mailtoken.cc.all(): - self.expansions[r.slug] = r.gather(**mailtoken_context) + for r in mailtrigger.cc.all(): + self.expansions[r.slug] = r.gather(**mailtrigger_context) non_empty_expansions = [x for x in self.expansions if self.expansions[x]] - self.fields['cc_tokens'].initial = non_empty_expansions - self.fields['cc_tokens'].choices = [(t,'%s: %s'%(t,", ".join(self.expansions[t]))) for t in non_empty_expansions] + self.fields['cc_choices'].initial = non_empty_expansions + self.fields['cc_choices'].choices = [(t,'%s: %s'%(t,", ".join(self.expansions[t]))) for t in non_empty_expansions] def get_selected_addresses(self): if self.is_valid(): addrs = [] - for t in self.cleaned_data['cc_tokens']: + for t in self.cleaned_data['cc_choices']: addrs.extend(self.expansions[t]) return addrs else: diff --git a/ietf/mailtoken/migrations/0001_initial.py b/ietf/mailtrigger/migrations/0001_initial.py similarity index 85% rename from ietf/mailtoken/migrations/0001_initial.py rename to ietf/mailtrigger/migrations/0001_initial.py index bcfa776f2..77a52d94d 100644 --- a/ietf/mailtoken/migrations/0001_initial.py +++ b/ietf/mailtrigger/migrations/0001_initial.py @@ -11,7 +11,7 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='MailToken', + name='MailTrigger', fields=[ ('slug', models.CharField(max_length=32, serialize=False, primary_key=True)), ('desc', models.TextField(blank=True)), @@ -34,15 +34,15 @@ class Migration(migrations.Migration): bases=(models.Model,), ), migrations.AddField( - model_name='mailtoken', + model_name='mailtrigger', name='cc', - field=models.ManyToManyField(related_name='used_in_cc', null=True, to='mailtoken.Recipient', blank=True), + field=models.ManyToManyField(related_name='used_in_cc', null=True, to='mailtrigger.Recipient', blank=True), preserve_default=True, ), migrations.AddField( - model_name='mailtoken', + model_name='mailtrigger', name='to', - field=models.ManyToManyField(related_name='used_in_to', null=True, to='mailtoken.Recipient', blank=True), + field=models.ManyToManyField(related_name='used_in_to', null=True, to='mailtrigger.Recipient', blank=True), preserve_default=True, ), ] diff --git a/ietf/mailtoken/migrations/0002_auto_20150809_1314.py b/ietf/mailtrigger/migrations/0002_auto_20150809_1314.py similarity index 98% rename from ietf/mailtoken/migrations/0002_auto_20150809_1314.py rename to ietf/mailtrigger/migrations/0002_auto_20150809_1314.py index 28212733f..d0a418e63 100644 --- a/ietf/mailtoken/migrations/0002_auto_20150809_1314.py +++ b/ietf/mailtrigger/migrations/0002_auto_20150809_1314.py @@ -5,7 +5,7 @@ from django.db import migrations def make_recipients(apps): - Recipient=apps.get_model('mailtoken','Recipient') + Recipient=apps.get_model('mailtrigger','Recipient') rc = Recipient.objects.create @@ -247,10 +247,10 @@ def make_recipients(apps): desc="The IETF New Work list", template='') -def make_mailtokens(apps): +def make_mailtriggers(apps): - Recipient=apps.get_model('mailtoken','Recipient') - MailToken=apps.get_model('mailtoken','MailToken') + Recipient=apps.get_model('mailtrigger','Recipient') + MailTrigger=apps.get_model('mailtrigger','MailTrigger') def mt_factory(slug,desc,to_slugs,cc_slugs=[]): @@ -264,7 +264,7 @@ def make_mailtokens(apps): print "****Some rule tried to use",recipient_slug raise - m = MailToken.objects.create(slug=slug, desc=desc) + m = MailTrigger.objects.create(slug=slug, desc=desc) m.to = Recipient.objects.filter(slug__in=to_slugs) m.cc = Recipient.objects.filter(slug__in=cc_slugs) @@ -841,21 +841,21 @@ def make_mailtokens(apps): def forward(apps, schema_editor): make_recipients(apps) - make_mailtokens(apps) + make_mailtriggers(apps) def reverse(apps, schema_editor): - Recipient=apps.get_model('mailtoken','Recipient') - MailToken=apps.get_model('mailtoken','MailToken') + Recipient=apps.get_model('mailtrigger','Recipient') + MailTrigger=apps.get_model('mailtrigger','MailTrigger') Recipient.objects.all().delete() - MailToken.objects.all().delete() + MailTrigger.objects.all().delete() class Migration(migrations.Migration): dependencies = [ - ('mailtoken', '0001_initial'), + ('mailtrigger', '0001_initial'), ] operations = [ diff --git a/ietf/mailtoken/migrations/__init__.py b/ietf/mailtrigger/migrations/__init__.py similarity index 100% rename from ietf/mailtoken/migrations/__init__.py rename to ietf/mailtrigger/migrations/__init__.py diff --git a/ietf/mailtoken/models.py b/ietf/mailtrigger/models.py similarity index 99% rename from ietf/mailtoken/models.py rename to ietf/mailtrigger/models.py index 83bb732a7..05edf40aa 100644 --- a/ietf/mailtoken/models.py +++ b/ietf/mailtrigger/models.py @@ -5,7 +5,7 @@ from django.template import Template, Context from ietf.group.models import Role -class MailToken(models.Model): +class MailTrigger(models.Model): slug = models.CharField(max_length=32, primary_key=True) desc = models.TextField(blank=True) to = models.ManyToManyField('Recipient', null=True, blank=True, related_name='used_in_to') diff --git a/ietf/mailtoken/resources.py b/ietf/mailtrigger/resources.py similarity index 73% rename from ietf/mailtoken/resources.py rename to ietf/mailtrigger/resources.py index 8a46af244..01d4ff5d5 100644 --- a/ietf/mailtoken/resources.py +++ b/ietf/mailtrigger/resources.py @@ -5,7 +5,7 @@ from tastypie.constants import ALL, ALL_WITH_RELATIONS # pyflakes:ignore from ietf import api -from ietf.mailtoken.models import * # pyflakes:ignore +from ietf.mailtrigger.models import * # pyflakes:ignore class RecipientResource(ModelResource): @@ -17,19 +17,19 @@ class RecipientResource(ModelResource): "desc": ALL, "template": ALL, } -api.mailtoken.register(RecipientResource()) +api.mailtrigger.register(RecipientResource()) -class MailTokenResource(ModelResource): +class MailTriggerResource(ModelResource): to = ToManyField(RecipientResource, 'to', null=True) cc = ToManyField(RecipientResource, 'cc', null=True) class Meta: - queryset = MailToken.objects.all() - #resource_name = 'mailtoken' + queryset = MailTrigger.objects.all() + #resource_name = 'mailtrigger' filtering = { "slug": ALL, "desc": ALL, "to": ALL_WITH_RELATIONS, "cc": ALL_WITH_RELATIONS, } -api.mailtoken.register(MailTokenResource()) +api.mailtrigger.register(MailTriggerResource()) diff --git a/ietf/mailtoken/tests.py b/ietf/mailtrigger/tests.py similarity index 67% rename from ietf/mailtoken/tests.py rename to ietf/mailtrigger/tests.py index e16a46fa6..3deb7821b 100644 --- a/ietf/mailtoken/tests.py +++ b/ietf/mailtrigger/tests.py @@ -8,26 +8,26 @@ class EventMailTests(TestCase): def setUp(self): make_test_data() - def test_show_tokens(self): + def test_show_triggers(self): - url = urlreverse('ietf.mailtoken.views.show_tokens') + url = urlreverse('ietf.mailtrigger.views.show_triggers') r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue('ballot_saved' in r.content) - url = urlreverse('ietf.mailtoken.views.show_tokens',kwargs=dict(mailtoken_slug='ballot_saved')) + url = urlreverse('ietf.mailtrigger.views.show_triggers',kwargs=dict(mailtrigger_slug='ballot_saved')) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue('ballot_saved' in r.content) def test_show_recipients(self): - url = urlreverse('ietf.mailtoken.views.show_recipients') + url = urlreverse('ietf.mailtrigger.views.show_recipients') r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue('doc_group_mail_list' in r.content) - url = urlreverse('ietf.mailtoken.views.show_recipients',kwargs=dict(recipient_slug='doc_group_mail_list')) + url = urlreverse('ietf.mailtrigger.views.show_recipients',kwargs=dict(recipient_slug='doc_group_mail_list')) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue('doc_group_mail_list' in r.content) diff --git a/ietf/mailtrigger/urls.py b/ietf/mailtrigger/urls.py new file mode 100644 index 000000000..b50f49c74 --- /dev/null +++ b/ietf/mailtrigger/urls.py @@ -0,0 +1,11 @@ +from django.conf.urls import patterns, url +from django.views.generic import RedirectView +from django.core.urlresolvers import reverse_lazy + +urlpatterns = patterns('ietf.mailtrigger.views', + url(r'^$', RedirectView.as_view(url=reverse_lazy('mailtrigger_show_triggers'), permanent=True)), + url(r'^name/$', 'show_triggers', name='mailtrigger_show_triggers' ), + url(r'^name/(?P[-\w]+)/$', 'show_triggers' ), + url(r'^recipient/$', 'show_recipients' ), + url(r'^recipient/(?P[-\w]+)/$', 'show_recipients' ), +) diff --git a/ietf/mailtoken/utils.py b/ietf/mailtrigger/utils.py similarity index 82% rename from ietf/mailtoken/utils.py rename to ietf/mailtrigger/utils.py index 199fa43c9..ee285fe6a 100644 --- a/ietf/mailtoken/utils.py +++ b/ietf/mailtrigger/utils.py @@ -1,5 +1,5 @@ from collections import namedtuple -from ietf.mailtoken.models import MailToken, Recipient +from ietf.mailtrigger.models import MailTrigger, Recipient from ietf.submit.models import Submission class AddrLists(namedtuple('AddrLists',['to','cc'])): @@ -15,15 +15,15 @@ class AddrLists(namedtuple('AddrLists',['to','cc'])): return namedtuple('AddrListsAsStrings',['to','cc'])(to=to_string,cc=cc_string) def gather_address_lists(slug, **kwargs): - mailtoken = MailToken.objects.get(slug=slug) + mailtrigger = MailTrigger.objects.get(slug=slug) to = set() - for recipient in mailtoken.to.all(): + for recipient in mailtrigger.to.all(): to.update(recipient.gather(**kwargs)) to.discard('') cc = set() - for recipient in mailtoken.cc.all(): + for recipient in mailtrigger.cc.all(): cc.update(recipient.gather(**kwargs)) cc.discard('') @@ -32,7 +32,7 @@ def gather_address_lists(slug, **kwargs): def gather_relevant_expansions(**kwargs): def starts_with(prefix): - return MailToken.objects.filter(slug__startswith=prefix).values_list('slug',flat=True) + return MailTrigger.objects.filter(slug__startswith=prefix).values_list('slug',flat=True) relevant = set() @@ -74,10 +74,10 @@ def gather_relevant_expansions(**kwargs): relevant.update(starts_with('sub_')) rule_list = [] - for mailtoken in MailToken.objects.filter(slug__in=relevant): - addrs = gather_address_lists(mailtoken.slug,**kwargs) + for mailtrigger in MailTrigger.objects.filter(slug__in=relevant): + addrs = gather_address_lists(mailtrigger.slug,**kwargs) if addrs.to or addrs.cc: - rule_list.append((mailtoken.slug,mailtoken.desc,addrs.to,addrs.cc)) + rule_list.append((mailtrigger.slug,mailtrigger.desc,addrs.to,addrs.cc)) return sorted(rule_list) def get_base_ipr_request_address(): diff --git a/ietf/mailtoken/views.py b/ietf/mailtrigger/views.py similarity index 53% rename from ietf/mailtoken/views.py rename to ietf/mailtrigger/views.py index 66d45a298..daa97ca95 100644 --- a/ietf/mailtoken/views.py +++ b/ietf/mailtrigger/views.py @@ -4,15 +4,15 @@ from inspect import getsourcelines from django.shortcuts import render, get_object_or_404 -from ietf.mailtoken.models import MailToken, Recipient +from ietf.mailtrigger.models import MailTrigger, Recipient -def show_tokens(request, mailtoken_slug=None): - mailtokens = MailToken.objects.all() - if mailtoken_slug: - get_object_or_404(MailToken,slug=mailtoken_slug) - mailtokens = mailtokens.filter(slug=mailtoken_slug) - return render(request,'mailtoken/token.html',{'mailtoken_slug':mailtoken_slug, - 'mailtokens':mailtokens}) +def show_triggers(request, mailtrigger_slug=None): + mailtriggers = MailTrigger.objects.all() + if mailtrigger_slug: + get_object_or_404(MailTrigger,slug=mailtrigger_slug) + mailtriggers = mailtriggers.filter(slug=mailtrigger_slug) + return render(request,'mailtrigger/trigger.html',{'mailtrigger_slug':mailtrigger_slug, + 'mailtriggers':mailtriggers}) def show_recipients(request, recipient_slug=None): recipients = Recipient.objects.all() if recipient_slug: @@ -22,5 +22,5 @@ def show_recipients(request, recipient_slug=None): fname = 'gather_%s'%recipient.slug if hasattr(recipient,fname): recipient.code = ''.join(getsourcelines(getattr(recipient,fname))[0]) - return render(request,'mailtoken/recipient.html',{'recipient_slug':recipient_slug, + return render(request,'mailtrigger/recipient.html',{'recipient_slug':recipient_slug, 'recipients':recipients}) diff --git a/ietf/name/fixtures/names.json b/ietf/name/fixtures/names.json index ecafcd5b5..2a2454285 100644 --- a/ietf/name/fixtures/names.json +++ b/ietf/name/fixtures/names.json @@ -4332,7 +4332,7 @@ "template": "{{commenter}}", "desc": "The person providing a comment to nomcom" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "commenter" }, { @@ -4340,7 +4340,7 @@ "template": null, "desc": "The steering group (e.g. IRSG) of a document being reviewed for IETF stream conflicts" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "conflict_review_steering_group" }, { @@ -4348,7 +4348,7 @@ "template": null, "desc": "The stream manager of a document being reviewed for IETF stream conflicts" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "conflict_review_stream_manager" }, { @@ -4356,7 +4356,7 @@ "template": "{% if doc.ad %}<{{doc.ad.email_address}}>{% endif %}", "desc": "The document's responsible Area Director" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_ad" }, { @@ -4364,7 +4364,7 @@ "template": null, "desc": "The authors of the subject documents of a conflict-review or status-change" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_affecteddoc_authors" }, { @@ -4372,7 +4372,7 @@ "template": null, "desc": "The chairs of groups of the subject documents of a conflict-review or status-change" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_affecteddoc_group_chairs" }, { @@ -4380,7 +4380,7 @@ "template": null, "desc": "The notify field of the subject documents of a conflict-review or status-change" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_affecteddoc_notify" }, { @@ -4388,7 +4388,7 @@ "template": "{% if doc.type_id == \"draft\" %}<{{doc.name}}@ietf.org>{% endif %}", "desc": "The document's authors" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_authors" }, { @@ -4396,7 +4396,7 @@ "template": null, "desc": "Any ADs holding an active DISCUSS position on a given document" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_discussing_ads" }, { @@ -4404,7 +4404,7 @@ "template": null, "desc": "The document's group chairs (if the document is assigned to a working or research group)" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_group_chairs" }, { @@ -4412,7 +4412,7 @@ "template": null, "desc": "The document's group delegates (if the document is assigned to a working or research group)" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_group_delegates" }, { @@ -4420,7 +4420,7 @@ "template": null, "desc": "The list address of the document's group" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_group_mail_list" }, { @@ -4428,7 +4428,7 @@ "template": null, "desc": "The document's group's responsible AD(s) or IRTF chair" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_group_responsible_directors" }, { @@ -4436,7 +4436,7 @@ "template": null, "desc": "Leadership for a document that has a new IPR disclosure" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_ipr_group_or_ad" }, { @@ -4444,7 +4444,7 @@ "template": null, "desc": "The document's stream manager if the document is not in the IETF stream" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_non_ietf_stream_manager" }, { @@ -4452,7 +4452,7 @@ "template": "{{doc.notify}}", "desc": "The addresses in the document's notify field" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_notify" }, { @@ -4460,7 +4460,7 @@ "template": "{% if doc.shepherd %}<{{doc.shepherd.address}}>{% endif %}", "desc": "The document's shepherd" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_shepherd" }, { @@ -4468,7 +4468,7 @@ "template": null, "desc": "The manager of the document's stream" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "doc_stream_manager" }, { @@ -4476,7 +4476,7 @@ "template": "{% if group and group.acronym %}<{{group.acronym}}-chairs@ietf.org>{% endif %}", "desc": "The group's chairs" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "group_chairs" }, { @@ -4484,7 +4484,7 @@ "template": "{{ changed_personnel | join:\", \" }}", "desc": "Any personnel who were added or deleted when a group's personnel changes" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "group_changed_personnel" }, { @@ -4492,7 +4492,7 @@ "template": "{% if group.list_email %}<{{ group.list_email }}>{% endif %}", "desc": "The group's mailing list" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "group_mail_list" }, { @@ -4500,7 +4500,7 @@ "template": null, "desc": "The group's responsible AD(s) or IRTF chair" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "group_responsible_directors" }, { @@ -4508,7 +4508,7 @@ "template": null, "desc": "The group's steering group (IESG or IRSG)" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "group_steering_group" }, { @@ -4516,7 +4516,7 @@ "template": "The IAB ", "desc": "The IAB" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "iab" }, { @@ -4524,7 +4524,7 @@ "template": "", "desc": "IANA" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "iana" }, { @@ -4532,7 +4532,7 @@ "template": "IANA ", "desc": "IANA's draft approval address" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "iana_approve" }, { @@ -4540,7 +4540,7 @@ "template": "IANA ", "desc": "IANA's draft evaluation address" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "iana_eval" }, { @@ -4548,7 +4548,7 @@ "template": "IANA ", "desc": "IANA's draft last call address" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "iana_last_call" }, { @@ -4556,7 +4556,7 @@ "template": "The IESG ", "desc": "The IESG" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "iesg" }, { @@ -4564,7 +4564,7 @@ "template": "", "desc": "The Secretariat" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "iesg_secretary" }, { @@ -4572,7 +4572,7 @@ "template": "IETF-Announce ", "desc": "The IETF Announce list" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "ietf_announce" }, { @@ -4580,7 +4580,7 @@ "template": "", "desc": "The Secretariat" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "ietf_secretariat" }, { @@ -4588,7 +4588,7 @@ "template": "", "desc": "The internet drafts ticketing system" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "internet_draft_requests" }, { @@ -4596,7 +4596,7 @@ "template": "ipr-announce@ietf.org", "desc": "The IETF IPR announce list" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "ipr_announce" }, { @@ -4604,7 +4604,7 @@ "template": "", "desc": "The ipr disclosure handling system" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "ipr_requests" }, { @@ -4612,7 +4612,7 @@ "template": "{% if ipr.submitter_email %}{{ ipr.submitter_email }}{% endif %}", "desc": "The submitter of an IPR disclosure" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "ipr_submitter" }, { @@ -4620,7 +4620,7 @@ "template": null, "desc": "The submitter (or ietf participant if the submitter is not available) of all IPR disclosures updated directly by this disclosure, without recursing to what the updated disclosures might have updated." }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "ipr_updatedipr_contacts" }, { @@ -4628,7 +4628,7 @@ "template": null, "desc": "The holders of all IPR disclosures updated by disclosure and disclosures updated by those and so on." }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "ipr_updatedipr_holders" }, { @@ -4636,7 +4636,7 @@ "template": "{{liaison.cc}}", "desc": "The addresses captured in the Cc field of the liaison statement form" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "liaison_cc" }, { @@ -4644,7 +4644,7 @@ "template": null, "desc": "The assigned liaison manager for an external group " }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "liaison_manager" }, { @@ -4652,7 +4652,7 @@ "template": "{{liaison.response_contact}}", "desc": "The addresses captured in the response contact field of the liaison statement form" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "liaison_response_contact" }, { @@ -4660,7 +4660,7 @@ "template": "", "desc": "The IETF liaison statement ticketing system" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "liaison_statements_list" }, { @@ -4668,7 +4668,7 @@ "template": "{{liaison.technical_contact}}", "desc": "The addresses captured in the technical contact field of the liaison statement form" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "liaison_technical_contact" }, { @@ -4676,7 +4676,7 @@ "template": "{{liaison.to_contact}}", "desc": "The addresses captured in the To field of the liaison statement form" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "liaison_to_contact" }, { @@ -4684,7 +4684,7 @@ "template": "{% if person and person.email_address %}<{{ person.email_address }}>{% endif %}", "desc": "The person currently logged into the datatracker who initiated a given action" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "logged_in_person" }, { @@ -4692,7 +4692,7 @@ "template": "", "desc": "The IETF New Work list" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "new_work" }, { @@ -4700,7 +4700,7 @@ "template": "{{nomcom.group.get_chair.email.address}}", "desc": "The chair of a given nomcom" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "nomcom_chair" }, { @@ -4708,7 +4708,7 @@ "template": "{{nominator}}", "desc": "The person that submitted a nomination to nomcom" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "nominator" }, { @@ -4716,7 +4716,7 @@ "template": "{{nominee}}", "desc": "The person nominated for a position" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "nominee" }, { @@ -4724,7 +4724,7 @@ "template": "", "desc": "The RFC Editor" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "rfc_editor" }, { @@ -4732,7 +4732,7 @@ "template": null, "desc": "The RFC Editor if a document is in the RFC Editor queue" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "rfc_editor_if_doc_in_queue" }, { @@ -4740,7 +4740,7 @@ "template": null, "desc": "The person that requested a meeting slot for a given group" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "session_requester" }, { @@ -4748,7 +4748,7 @@ "template": "", "desc": "The session request ticketing system" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "session_requests" }, { @@ -4756,7 +4756,7 @@ "template": null, "desc": "The managers of any related streams" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "stream_managers" }, { @@ -4764,7 +4764,7 @@ "template": null, "desc": "The authors of a submitted draft" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "submission_authors" }, { @@ -4772,7 +4772,7 @@ "template": null, "desc": "The people who can confirm a draft submission" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "submission_confirmers" }, { @@ -4780,7 +4780,7 @@ "template": null, "desc": "The chairs of a submitted draft belonging to a group" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "submission_group_chairs" }, { @@ -4788,7 +4788,7 @@ "template": null, "desc": "The people who can confirm a draft submission" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "submission_group_mail_list" }, { @@ -4796,7 +4796,7 @@ "template": "{{submission.submitter}}", "desc": "The person that submitted a draft" }, - "model": "mailtoken.recipient", + "model": "mailtrigger.recipient", "pk": "submission_submitter" }, { @@ -4812,7 +4812,7 @@ ], "desc": "Recipients when a charter is approved" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_approved_charter" }, { @@ -4832,7 +4832,7 @@ ], "desc": "Recipients when a conflict review ballot is approved" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_approved_conflrev" }, { @@ -4852,7 +4852,7 @@ ], "desc": "Recipients when an IETF stream document ballot is approved" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_approved_ietf_stream" }, { @@ -4863,7 +4863,7 @@ ], "desc": "Recipients for IANA message when an IETF stream document ballot is approved" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_approved_ietf_stream_iana" }, { @@ -4881,7 +4881,7 @@ ], "desc": "Recipients when a status change is approved" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_approved_status_change" }, { @@ -4901,7 +4901,7 @@ ], "desc": "Recipients when a ballot is deferred to or undeferred from a future telechat" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_deferred" }, { @@ -4912,7 +4912,7 @@ ], "desc": "Recipients when a ballot is issued" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_issued" }, { @@ -4923,7 +4923,7 @@ ], "desc": "Recipients for IANA message when a ballot is issued" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_issued_iana" }, { @@ -4944,7 +4944,7 @@ ], "desc": "Recipients when a new ballot position (with discusses, other blocking positions, or comments) is saved" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ballot_saved" }, { @@ -4957,7 +4957,7 @@ ], "desc": "Recipients for a charter external review" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "charter_external_review" }, { @@ -4968,7 +4968,7 @@ ], "desc": "Recipients for a message to new-work about a charter review" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "charter_external_review_new_work" }, { @@ -4980,7 +4980,7 @@ ], "desc": "Recipients for message noting that internal review has started on a charter" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "charter_internal_review" }, { @@ -4991,7 +4991,7 @@ ], "desc": "Recipients for message to adminstrators when a charter state edit needs followon administrative action" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "charter_state_edit_admin_needed" }, { @@ -5008,7 +5008,7 @@ ], "desc": "Recipients for a stream manager's request for an IETF conflict review" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "conflrev_requested" }, { @@ -5019,7 +5019,7 @@ ], "desc": "Recipients for IANA message when a stream manager requests an IETF conflict review" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "conflrev_requested_iana" }, { @@ -5034,7 +5034,7 @@ ], "desc": "Recipients for a message when a new comment is manually entered into the document's history" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_added_comment" }, { @@ -5051,7 +5051,7 @@ ], "desc": "Recipients for notification that a document has been adopted by a group" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_adopted_by_group" }, { @@ -5067,7 +5067,7 @@ ], "desc": "Recipients for notification of a document's expiration" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_expired" }, { @@ -5083,7 +5083,7 @@ ], "desc": "Recipients for notification of impending expiration of a document" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_expires_soon" }, { @@ -5101,7 +5101,7 @@ ], "desc": "Recipients when IANA state information for a document changes " }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_iana_state_changed" }, { @@ -5115,7 +5115,7 @@ ], "desc": "Recipients for a message when the IESG begins processing a document " }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_iesg_processing_started" }, { @@ -5130,7 +5130,7 @@ ], "desc": "Recipients for a message when a document's intended publication status changes" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_intended_status_changed" }, { @@ -5149,7 +5149,7 @@ ], "desc": "Recipients when a document is taken out of the RFC's editor queue before publication" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_pulled_from_rfc_queue" }, { @@ -5164,7 +5164,7 @@ ], "desc": "Recipients when what a document replaces or is replaced by changes" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_replacement_changed" }, { @@ -5178,7 +5178,7 @@ ], "desc": "Recipients for suggestions that this doc replaces or is replace by some other document" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_replacement_suggested" }, { @@ -5197,7 +5197,7 @@ ], "desc": "Recipients when a document's state is manually edited" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_state_edited" }, { @@ -5210,7 +5210,7 @@ ], "desc": "Recipients for notification when a document's stream changes" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_stream_changed" }, { @@ -5224,7 +5224,7 @@ ], "desc": "Recipients when the stream state of a document is manually edited" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_stream_state_edited" }, { @@ -5243,7 +5243,7 @@ ], "desc": "Recipients when a document's telechat date or other telechat specific details are changed" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "doc_telechat_details_changed" }, { @@ -5254,7 +5254,7 @@ ], "desc": "Recipients when the set of approved milestones for a group are edited" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "group_approved_milestones_edited" }, { @@ -5265,7 +5265,7 @@ ], "desc": "Recipients for message requesting closure of a group" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "group_closure_requested" }, { @@ -5277,7 +5277,7 @@ ], "desc": "Recipients when any of a group's milestones are edited" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "group_milestones_edited" }, { @@ -5291,7 +5291,7 @@ ], "desc": "Recipients for a message noting changes in a group's personnel" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "group_personnel_change" }, { @@ -5302,7 +5302,7 @@ ], "desc": "Recipients when the secretary follows up on an IPR disclosure submission" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ipr_disclosure_followup" }, { @@ -5313,7 +5313,7 @@ ], "desc": "Recipients when an IPR disclosure is submitted" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ipr_disclosure_submitted" }, { @@ -5327,7 +5327,7 @@ ], "desc": "Recipients when an IPR disclosure calls out a given document" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ipr_posted_on_doc" }, { @@ -5341,7 +5341,7 @@ ], "desc": "Recipients for a message confirming that a disclosure has been posted" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "ipr_posting_confirmation" }, { @@ -5357,7 +5357,7 @@ ], "desc": "Recipients when a last call has expired" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "last_call_expired" }, { @@ -5378,7 +5378,7 @@ ], "desc": "Recipients when a last call is issued" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "last_call_issued" }, { @@ -5389,7 +5389,7 @@ ], "desc": "Recipients for IANA message when a last call is issued" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "last_call_issued_iana" }, { @@ -5404,7 +5404,7 @@ ], "desc": "Recipients when AD requests a last call" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "last_call_requested" }, { @@ -5415,7 +5415,7 @@ ], "desc": "Recipients for a message that a pending liaison statement needs approval" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "liaison_approval_requested" }, { @@ -5430,7 +5430,7 @@ ], "desc": "Recipients for a message about a liaison statement deadline that is approaching." }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "liaison_deadline_soon" }, { @@ -5441,7 +5441,7 @@ ], "desc": "Recipients for a message requesting an updated list of authorized individuals" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "liaison_manager_update_request" }, { @@ -5456,7 +5456,7 @@ ], "desc": "Recipient for a message when a new liaison statement is posted" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "liaison_statement_posted" }, { @@ -5467,7 +5467,7 @@ ], "desc": "Recipients for reminder message for milestones about to become overdue" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "milestones_due_soon" }, { @@ -5478,7 +5478,7 @@ ], "desc": "Recipients for message about milestones that are overdue" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "milestones_overdue" }, { @@ -5491,7 +5491,7 @@ ], "desc": "Recipients for reminder message that unapproved milestone changes need review" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "milestone_review_reminder" }, { @@ -5502,7 +5502,7 @@ ], "desc": "Recipients for a message confirming a comment was made" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "nomcom_comment_receipt_requested" }, { @@ -5513,7 +5513,7 @@ ], "desc": "Recipients for the questionairre that nominees should complete" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "nomcom_questionnaire" }, { @@ -5524,7 +5524,7 @@ ], "desc": "Recipients for a message reminding a nominee to return a completed questionairre response" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "nomcom_questionnaire_reminder" }, { @@ -5535,7 +5535,7 @@ ], "desc": "Recipeints of message reminding a nominee to accept or decline a nomination" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "nomination_accept_reminder" }, { @@ -5547,7 +5547,7 @@ ], "desc": "Recipients for a message noting that a nomination caused a new Person record to be created in the datatracker" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "nomination_created_person" }, { @@ -5558,7 +5558,7 @@ ], "desc": "Recipients the first time a person is nominated for a position, asking them to accept or decline the nomination" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "nomination_new_nominee" }, { @@ -5569,7 +5569,7 @@ ], "desc": "Recipients for a message confirming a nomination was made" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "nomination_receipt_requested" }, { @@ -5580,7 +5580,7 @@ ], "desc": "Recipients for a message noting a new nomination has been received" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "nomination_received" }, { @@ -5596,7 +5596,7 @@ ], "desc": "Recipients when a draft is submitted to the IESG" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "pubreq_iesg" }, { @@ -5607,7 +5607,7 @@ ], "desc": "Recipients when a non-IETF stream manager requests publication" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "pubreq_rfced" }, { @@ -5618,7 +5618,7 @@ ], "desc": "Recipients for IANA message when a non-IETF stream manager requests publication" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "pubreq_rfced_iana" }, { @@ -5630,7 +5630,7 @@ ], "desc": "Recipients when a draft resurrection request has been completed" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "resurrection_completed" }, { @@ -5641,7 +5641,7 @@ ], "desc": "Recipients of a request to change the state of a draft away from 'Dead'" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "resurrection_requested" }, { @@ -5657,7 +5657,7 @@ ], "desc": "Recipients for a normal meeting session request" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "session_requested" }, { @@ -5672,7 +5672,7 @@ ], "desc": "Recipients for a meeting session request for more than 2 sessions" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "session_requested_long" }, { @@ -5688,7 +5688,7 @@ ], "desc": "Recipients for a message cancelling a session request" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "session_request_cancelled" }, { @@ -5704,7 +5704,7 @@ ], "desc": "Recipients for a message noting a group plans to not meet" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "session_request_not_meeting" }, { @@ -5719,7 +5719,7 @@ ], "desc": "Recipients for details when a session has been scheduled" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "session_scheduled" }, { @@ -5732,7 +5732,7 @@ ], "desc": "Recipients for the announcement of a successfully submitted draft" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "sub_announced" }, { @@ -5744,7 +5744,7 @@ ], "desc": "Recipients for the announcement to the authors of a successfully submitted draft" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "sub_announced_to_authors" }, { @@ -5755,7 +5755,7 @@ ], "desc": "Recipients for a message requesting group chair approval of a draft submission" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "sub_chair_approval_requested" }, { @@ -5766,7 +5766,7 @@ ], "desc": "Recipients for a message requesting confirmation of a draft submission" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "sub_confirmation_requested" }, { @@ -5777,7 +5777,7 @@ ], "desc": "Recipients for a message with the full URL for managing a draft submission" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "sub_management_url_requested" }, { @@ -5792,7 +5792,7 @@ ], "desc": "Recipients for a manual post request for a draft submission" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "sub_manual_post_requested" }, { @@ -5807,7 +5807,7 @@ ], "desc": "Recipients for notification of a new version of an existing document" }, - "model": "mailtoken.mailtoken", + "model": "mailtrigger.mailtrigger", "pk": "sub_new_version" } ] diff --git a/ietf/name/generate_fixtures.py b/ietf/name/generate_fixtures.py index 6169e7b89..a413cbd13 100644 --- a/ietf/name/generate_fixtures.py +++ b/ietf/name/generate_fixtures.py @@ -41,9 +41,9 @@ objects += ietf.doc.models.StateType.objects.all() objects += ietf.doc.models.State.objects.all() objects += ietf.doc.models.BallotType.objects.all() -import ietf.mailtoken.models -objects += ietf.mailtoken.models.Recipient.objects.all() -objects += ietf.mailtoken.models.MailToken.objects.all() +import ietf.mailtrigger.models +objects += ietf.mailtrigger.models.Recipient.objects.all() +objects += ietf.mailtrigger.models.MailTrigger.objects.all() output("names", objects) diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index 0c571733f..cca145d93 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -20,7 +20,7 @@ from ietf.person.models import Email from ietf.person.fields import SearchableEmailField from ietf.utils.fields import MultiEmailField from ietf.utils.mail import send_mail -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists ROLODEX_URL = getattr(settings, 'ROLODEX_URL', None) diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index 83ed384e7..084cf7db7 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -18,7 +18,7 @@ from django.utils.encoding import smart_str from ietf.dbtemplate.models import DBTemplate from ietf.person.models import Email, Person -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists from ietf.utils.pipe import pipe from ietf.utils import unaccent from ietf.utils.mail import send_mail_text, send_mail diff --git a/ietf/secr/meetings/views.py b/ietf/secr/meetings/views.py index 4a7ef84d3..cf0dbee0b 100644 --- a/ietf/secr/meetings/views.py +++ b/ietf/secr/meetings/views.py @@ -26,7 +26,7 @@ from ietf.secr.proceedings.views import build_choices, handle_upload_file, make_ from ietf.secr.sreq.forms import GroupSelectForm from ietf.secr.sreq.views import get_initial_session from ietf.secr.utils.meeting import get_session, get_timeslot -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists # prep for agenda changes diff --git a/ietf/secr/sreq/views.py b/ietf/secr/sreq/views.py index f960c30f0..734f515b0 100644 --- a/ietf/secr/sreq/views.py +++ b/ietf/secr/sreq/views.py @@ -16,7 +16,7 @@ from ietf.secr.utils.decorators import check_permissions from ietf.secr.utils.group import groups_by_session from ietf.utils.mail import send_mail from ietf.person.models import Person -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists # ------------------------------------------------- # Globals diff --git a/ietf/settings.py b/ietf/settings.py index a4205a226..0053977ee 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -219,7 +219,7 @@ INSTALLED_APPS = ( 'ietf.ipr', 'ietf.liaisons', 'ietf.mailinglists', - 'ietf.mailtoken', + 'ietf.mailtrigger', 'ietf.meeting', 'ietf.message', 'ietf.name', diff --git a/ietf/submit/mail.py b/ietf/submit/mail.py index 2939b33f8..5b1dbbf6d 100644 --- a/ietf/submit/mail.py +++ b/ietf/submit/mail.py @@ -8,7 +8,7 @@ from ietf.doc.models import Document from ietf.person.models import Person from ietf.message.models import Message from ietf.utils.accesstoken import generate_access_token -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists def send_submission_confirmation(request, submission): subject = 'Confirm submission of I-D %s' % submission.name diff --git a/ietf/submit/views.py b/ietf/submit/views.py index 6c5325bdb..2540849b1 100644 --- a/ietf/submit/views.py +++ b/ietf/submit/views.py @@ -23,7 +23,7 @@ from ietf.submit.utils import check_idnits, found_idnits, validate_submission, c from ietf.submit.utils import post_submission, cancel_submission, rename_submission_files from ietf.utils.accesstoken import generate_random_key, generate_access_token from ietf.utils.draft import Draft -from ietf.mailtoken.utils import gather_address_lists +from ietf.mailtrigger.utils import gather_address_lists def upload_submission(request): diff --git a/ietf/templates/doc/document_email.html b/ietf/templates/doc/document_email.html index 8832966ac..59f60d28d 100644 --- a/ietf/templates/doc/document_email.html +++ b/ietf/templates/doc/document_email.html @@ -30,16 +30,16 @@ - + - {% for token,desc,to,cc in expansions %} + {% for trigger,desc,to,cc in expansions %} - + diff --git a/ietf/templates/group/email.html b/ietf/templates/group/email.html index 0476a4266..e1f47f566 100644 --- a/ietf/templates/group/email.html +++ b/ietf/templates/group/email.html @@ -27,16 +27,16 @@
MailTokenMail Trigger To Cc
{{token}}{{trigger}} {{to|join:', '}} {{cc|join:', '}}
- + - {% for token,desc,to,cc in expansions %} + {% for trigger,desc,to,cc in expansions %} - + diff --git a/ietf/templates/mailtoken/recipient.html b/ietf/templates/mailtrigger/recipient.html similarity index 63% rename from ietf/templates/mailtoken/recipient.html rename to ietf/templates/mailtrigger/recipient.html index 9f2c24a01..d711a325c 100644 --- a/ietf/templates/mailtoken/recipient.html +++ b/ietf/templates/mailtrigger/recipient.html @@ -13,7 +13,7 @@ - + @@ -23,11 +23,11 @@ diff --git a/ietf/templates/mailtoken/token.html b/ietf/templates/mailtrigger/trigger.html similarity index 57% rename from ietf/templates/mailtoken/token.html rename to ietf/templates/mailtrigger/trigger.html index 7cd5a351c..d60a9e73d 100644 --- a/ietf/templates/mailtoken/token.html +++ b/ietf/templates/mailtrigger/trigger.html @@ -2,34 +2,34 @@ {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} -{% block title %}Mail Tokens{% endblock %} +{% block title %}Mail Triggers{% endblock %} {% block content %} {% origin %} -

Mail Tokens

+

Mail Triggers

MailTokenMail Trigger To Cc
{{token}}{{trigger}} {{to|join:', '}} {{cc|join:', '}}
RecipientTokensTriggers Template Code
{{recipient.slug}} - {% for mailtoken in recipient.used_in_to.all %} - {{mailtoken.slug}}{% if not forloop.last %}, {%endif%} + {% for mailtrigger in recipient.used_in_to.all %} + {{mailtrigger.slug}}{% if not forloop.last %}, {%endif%} {% endfor %}{% if recipient.used_in_to.exists and recipient.used_in_cc.exists %},{% endif %} - {% for mailtoken in recipient.used_in_cc.all %} - {{mailtoken.slug}}{% if not forloop.last %}, {%endif%} + {% for mailtrigger in recipient.used_in_cc.all %} + {{mailtrigger.slug}}{% if not forloop.last %}, {%endif%} {% endfor %} {{recipient.template}}
- + - {% for mailtoken in mailtokens %} + {% for mailtrigger in mailtriggers %} - + diff --git a/ietf/urls.py b/ietf/urls.py index f6956863a..85e4ed759 100644 --- a/ietf/urls.py +++ b/ietf/urls.py @@ -35,7 +35,7 @@ urlpatterns = patterns('', (r'^accounts/settings/', include('ietf.cookies.urls')), (r'^doc/', include('ietf.doc.urls')), (r'^drafts/', include('ietf.doc.redirect_drafts_urls')), - (r'^mailtoken/',include('ietf.mailtoken.urls')), + (r'^mailtrigger/',include('ietf.mailtrigger.urls')), (r'^feed/', include('ietf.feed_urls')), (r'^group/', include('ietf.group.urls')), (r'^help/', include('ietf.help.urls')),
TokenTrigger Recipients
{{mailtoken.slug}}{{mailtrigger.slug}} To: - {% for recipient in mailtoken.to.all %} + {% for recipient in mailtrigger.to.all %} {% comment %}{{recipient.slug}}{% endcomment %} - {{recipient.slug}}{% if not forloop.last %}, {% endif %} + {{recipient.slug}}{% if not forloop.last %}, {% endif %} {% endfor %} - {% if mailtoken.cc.exists %} + {% if mailtrigger.cc.exists %}
Cc: - {% for recipient in mailtoken.cc.all %} + {% for recipient in mailtrigger.cc.all %} {% comment %}{{recipient.slug}}{% endcomment %} - {{recipient.slug}}{% if not forloop.last %}, {% endif %} + {{recipient.slug}}{% if not forloop.last %}, {% endif %} {% endfor %} {% endif %}