diff --git a/ietf/liaisons/forms.py b/ietf/liaisons/forms.py
index b2849dc48..413cc38ad 100644
--- a/ietf/liaisons/forms.py
+++ b/ietf/liaisons/forms.py
@@ -23,7 +23,7 @@ class LiaisonForm(forms.ModelForm):
replyto = forms.CharField(label=u'Reply to')
organization = forms.ChoiceField()
to_poc = forms.CharField(widget=ReadOnlyWidget, label="POC", required=False)
- cc1 = forms.CharField(widget=ReadOnlyWidget, label="CC", required=False)
+ cc1 = forms.CharField(widget=forms.Textarea, label="CC", required=False, help_text='Please insert one email address per line')
purpose_text = forms.CharField(widget=forms.Textarea, label='Other purpose')
deadline_date = forms.DateField(label='Deadline')
title = forms.CharField(label=u'Title')
@@ -171,10 +171,30 @@ class LiaisonForm(forms.ModelForm):
def get_poc(self, organization):
return ', '.join([i.email()[1] for i in organization.get_poc()])
+ def clean_cc1(self):
+ value = self.cleaned_data.get('cc1', '')
+ result = []
+ errors = []
+ for address in value.split('\n'):
+ address = address.strip();
+ if not address:
+ continue
+ try:
+ self.check_email(address)
+ except forms.ValidationError:
+ errors.append(address)
+ result.append(address)
+ if errors:
+ raise forms.ValidationError('Invalid email addresses: %s' % ', '.join(errors))
+ return ','.join(result)
+
def get_cc(self, from_entity, to_entity):
- persons = to_entity.get_cc(self.person)
- persons += from_entity.get_from_cc(self.person)
- return ', '.join(['%s <%s>' % i.email() for i in persons])
+ #Old automatic Cc code, now we retrive it from cleaned_data
+ #persons = to_entity.get_cc(self.person)
+ #persons += from_entity.get_from_cc(self.person)
+ #return ', '.join(['%s <%s>' % i.email() for i in persons])
+ cc = self.cleaned_data.get('cc1', '')
+ return cc
def save(self, *args, **kwargs):
liaison = super(LiaisonForm, self).save(*args, **kwargs)
diff --git a/static/js/liaisons.js b/static/js/liaisons.js
index 720912536..bdf154511 100644
--- a/static/js/liaisons.js
+++ b/static/js/liaisons.js
@@ -150,11 +150,15 @@
config.info_update_url = confcontainer.find('.info_update_url').text();
};
- var render_mails_into = function(container, person_list) {
+ var render_mails_into = function(container, person_list, as_html) {
var html='';
$.each(person_list, function(index, person) {
- html += person[0] + ' <'+person[1]+'>
';
+ if (as_html) {
+ html += person[0] + ' <'+person[1]+'>
';
+ } else {
+ html += person[0] + ' <'+person[1]+'>\n';
+ }
});
container.html(html);
};
@@ -204,7 +208,7 @@
updateReplyTo();
};
- var updateInfo = function() {
+ var updateInfo = function(first_time) {
var entity = organization;
var to_entity = from;
var url = config.info_update_url;
@@ -218,8 +222,10 @@
from_entity_id: to_entity.val()},
success: function(response){
if (!response.error) {
- render_mails_into(cc, response.cc);
- render_mails_into(poc, response.poc);
+ if (!first_time || !cc.text()) {
+ render_mails_into(cc, response.cc, false);
+ }
+ render_mails_into(poc, response.poc, true);
toggleApproval(response.needs_approval);
checkPostOnly(response.post_only);
userSelect(response.full_list);
@@ -317,10 +323,10 @@
return false;
};
- var checkFrom = function() {
+ var checkFrom = function(first_time) {
var reduce_options = form.find('.reducedToOptions');
if (!reduce_options.length) {
- updateInfo();
+ updateInfo(first_time);
return;
}
var to_select = organization;
@@ -341,13 +347,13 @@
to_select.find('optgroup').show();
to_select.find('option').show();
}
- updateInfo();
+ updateInfo(first_time);
};
var initTriggers = function() {
- organization.change(updateInfo);
+ organization.change(function() {updateInfo(false);});
organization.change(checkOtherSDO);
- from.change(checkFrom);
+ from.change(function() {checkFrom(false);});
reply.keyup(updateFrom);
purpose.change(updatePurpose);
cancel.click(cancelForm);
@@ -357,7 +363,7 @@
var updateOnInit = function() {
updateFrom();
- checkFrom();
+ checkFrom(true);
updatePurpose();
checkOtherSDO();
};