32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
from django import forms
|
|
|
|
from ietf.mailtrigger.models import MailTrigger
|
|
|
|
class CcSelectForm(forms.Form):
|
|
expansions = dict()
|
|
cc_choices = forms.MultipleChoiceField(
|
|
label='Cc',
|
|
choices=[],
|
|
widget=forms.CheckboxSelectMultiple(attrs={'frob':'knob'}),
|
|
)
|
|
|
|
def __init__(self, mailtrigger_slug, mailtrigger_context, *args, **kwargs):
|
|
super(CcSelectForm,self).__init__(*args,**kwargs)
|
|
mailtrigger = MailTrigger.objects.get(slug=mailtrigger_slug)
|
|
|
|
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_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_choices']:
|
|
addrs.extend(self.expansions[t])
|
|
return addrs
|
|
else:
|
|
raise forms.ValidationError('Cannot get selected addresses from an invalid form.')
|