mailtoken becomes mailtrigger
- Legacy-Id: 10090
This commit is contained in:
parent
e03bdbabe4
commit
f5b6465e81
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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'])
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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":
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 = []
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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<mailtoken_slug>[-\w]+)/$', 'show_tokens' ),
|
||||
url(r'^recipient/$', 'show_recipients' ),
|
||||
url(r'^recipient/(?P<recipient_slug>[-\w]+)/$', 'show_recipients' ),
|
||||
)
|
|
@ -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)
|
||||
|
|
@ -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:
|
|
@ -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,
|
||||
),
|
||||
]
|
|
@ -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='<new-work@ietf.org>')
|
||||
|
||||
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 = [
|
|
@ -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')
|
|
@ -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())
|
||||
|
|
@ -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)
|
11
ietf/mailtrigger/urls.py
Normal file
11
ietf/mailtrigger/urls.py
Normal file
|
@ -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<mailtrigger_slug>[-\w]+)/$', 'show_triggers' ),
|
||||
url(r'^recipient/$', 'show_recipients' ),
|
||||
url(r'^recipient/(?P<recipient_slug>[-\w]+)/$', 'show_recipients' ),
|
||||
)
|
|
@ -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():
|
|
@ -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})
|
File diff suppressed because it is too large
Load diff
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -219,7 +219,7 @@ INSTALLED_APPS = (
|
|||
'ietf.ipr',
|
||||
'ietf.liaisons',
|
||||
'ietf.mailinglists',
|
||||
'ietf.mailtoken',
|
||||
'ietf.mailtrigger',
|
||||
'ietf.meeting',
|
||||
'ietf.message',
|
||||
'ietf.name',
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -30,16 +30,16 @@
|
|||
<table class="table table-condensed table-striped ietf">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>MailToken</th>
|
||||
<th>Mail Trigger</th>
|
||||
<th>To</th>
|
||||
<th>Cc</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for token,desc,to,cc in expansions %}
|
||||
{% for trigger,desc,to,cc in expansions %}
|
||||
<tr>
|
||||
<td><a href="{% url 'ietf.mailtoken.views.show_tokens' token %}"
|
||||
title="{{desc}}">{{token}}</a></td>
|
||||
<td><a href="{% url 'ietf.mailtrigger.views.show_triggers' trigger %}"
|
||||
title="{{desc}}">{{trigger}}</a></td>
|
||||
<td> {{to|join:', '}}</td>
|
||||
<td> {{cc|join:', '}}</td>
|
||||
</tr>
|
||||
|
|
|
@ -27,16 +27,16 @@
|
|||
<table class="table table-condensed table-striped ietf">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>MailToken</th>
|
||||
<th>Mail Trigger</th>
|
||||
<th>To</th>
|
||||
<th>Cc</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for token,desc,to,cc in expansions %}
|
||||
{% for trigger,desc,to,cc in expansions %}
|
||||
<tr>
|
||||
<td><a href="{% url 'ietf.mailtoken.views.show_tokens' token %}"
|
||||
title="{{desc}}">{{token}}</a></td>
|
||||
<td><a href="{% url 'ietf.mailtrigger.views.show_triggers' trigger %}"
|
||||
title="{{desc}}">{{trigger}}</a></td>
|
||||
<td> {{to|join:', '}}</td>
|
||||
<td> {{cc|join:', '}}</td>
|
||||
</tr>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th>Recipient</th>
|
||||
<th>Tokens</th>
|
||||
<th>Triggers</th>
|
||||
<th>Template</th>
|
||||
<th>Code</th>
|
||||
</tr>
|
||||
|
@ -23,11 +23,11 @@
|
|||
<tr>
|
||||
<td><span title="{{recipient.desc}}">{{recipient.slug}}</span></td>
|
||||
<td>
|
||||
{% for mailtoken in recipient.used_in_to.all %}
|
||||
<a href="{% url 'ietf.mailtoken.views.show_tokens' mailtoken.slug %}" title="{{mailtoken.desc}}">{{mailtoken.slug}}</a>{% if not forloop.last %}, {%endif%}
|
||||
{% for mailtrigger in recipient.used_in_to.all %}
|
||||
<a href="{% url 'ietf.mailtrigger.views.show_triggers' mailtrigger.slug %}" title="{{mailtrigger.desc}}">{{mailtrigger.slug}}</a>{% 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 %}
|
||||
<a href="{% url 'ietf.mailtoken.views.show_tokens' mailtoken.slug %}" title="{{mailtoken.desc}}">{{mailtoken.slug}}</a>{% if not forloop.last %}, {%endif%}
|
||||
{% for mailtrigger in recipient.used_in_cc.all %}
|
||||
<a href="{% url 'ietf.mailtrigger.views.show_triggers' mailtrigger.slug %}" title="{{mailtrigger.desc}}">{{mailtrigger.slug}}</a>{% if not forloop.last %}, {%endif%}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{recipient.template}}</td>
|
|
@ -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 %}
|
||||
<h1>Mail Tokens</h1>
|
||||
<h1>Mail Triggers</h1>
|
||||
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Token</th>
|
||||
<th>Trigger</th>
|
||||
<th>Recipients</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for mailtoken in mailtokens %}
|
||||
{% for mailtrigger in mailtriggers %}
|
||||
<tr>
|
||||
<td><span title="{{mailtoken.desc}}">{{mailtoken.slug}}</span></td>
|
||||
<td><span title="{{mailtrigger.desc}}">{{mailtrigger.slug}}</span></td>
|
||||
<td>To:
|
||||
{% for recipient in mailtoken.to.all %}
|
||||
{% for recipient in mailtrigger.to.all %}
|
||||
{% comment %}<span title="{{recipient.desc}}">{{recipient.slug}}</span>{% endcomment %}
|
||||
<a href="{% url 'ietf.mailtoken.views.show_recipients' recipient.slug %}" title="{{recipient.desc}}">{{recipient.slug}}</a>{% if not forloop.last %}, {% endif %}
|
||||
<a href="{% url 'ietf.mailtrigger.views.show_recipients' recipient.slug %}" title="{{recipient.desc}}">{{recipient.slug}}</a>{% if not forloop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
{% if mailtoken.cc.exists %}
|
||||
{% if mailtrigger.cc.exists %}
|
||||
<br/>Cc:
|
||||
{% for recipient in mailtoken.cc.all %}
|
||||
{% for recipient in mailtrigger.cc.all %}
|
||||
{% comment %}<span title="{{recipient.desc}}">{{recipient.slug}}</span>{% endcomment %}
|
||||
<a href="{% url 'ietf.mailtoken.views.show_recipients' recipient.slug %}" title="{{recipient.desc}}">{{recipient.slug}}</a>{% if not forloop.last %}, {% endif %}
|
||||
<a href="{% url 'ietf.mailtrigger.views.show_recipients' recipient.slug %}" title="{{recipient.desc}}">{{recipient.slug}}</a>{% if not forloop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</td>
|
|
@ -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')),
|
||||
|
|
Loading…
Reference in a new issue