Integrate Secretariat tools MultiEmailField with the one in
utils/fields.py, also fix a couple of issues in NomCom tool (spelling bugs and avoid overwriting base_fields on forms with dynamic data) - Legacy-Id: 8276
This commit is contained in:
parent
92e4763d9f
commit
f7ac066059
|
@ -17,7 +17,7 @@ from ietf.nomcom.utils import (NOMINATION_RECEIPT_TEMPLATE, FEEDBACK_RECEIPT_TEM
|
|||
get_user_email, validate_private_key, validate_public_key,
|
||||
get_or_create_nominee, create_feedback_email)
|
||||
from ietf.person.models import Email
|
||||
from ietf.utils import fields as custom_fields
|
||||
from ietf.utils.fields import MultiEmailField
|
||||
from ietf.utils.mail import send_mail
|
||||
|
||||
|
||||
|
@ -31,10 +31,6 @@ def get_nomcom_group_or_404(year):
|
|||
nomcom__isnull=False)
|
||||
|
||||
|
||||
def get_list(string):
|
||||
return map(unicode.strip, string.replace('\r\n', '').split(','))
|
||||
|
||||
|
||||
class PositionNomineeField(forms.ChoiceField):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
@ -109,7 +105,7 @@ class BaseNomcomForm(object):
|
|||
|
||||
class EditMembersForm(BaseNomcomForm, forms.Form):
|
||||
|
||||
members = custom_fields.MultiEmailField(label="Members email", required=False)
|
||||
members = MultiEmailField(label="Members email", required=False, widget=forms.Textarea)
|
||||
|
||||
fieldsets = [('Members', ('members',))]
|
||||
|
||||
|
@ -133,7 +129,7 @@ class EditMembersFormPreview(FormPreview):
|
|||
|
||||
def preview_get(self, request):
|
||||
"Displays the form"
|
||||
f = self.form(auto_id=AUTO_ID)
|
||||
f = self.form(auto_id=self.get_auto_id(), initial=self.get_initial(request))
|
||||
return render_to_response(self.form_template,
|
||||
{'form': f,
|
||||
'stage_field': self.unused_name('stage'),
|
||||
|
@ -143,14 +139,14 @@ class EditMembersFormPreview(FormPreview):
|
|||
'selected': 'edit_members'},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
def parse_params(self, *args, **kwargs):
|
||||
def get_initial(self, request):
|
||||
members = self.group.role_set.filter(name__slug='member')
|
||||
|
||||
if members:
|
||||
self.form.base_fields['members'].initial = ',\r\n'.join([role.email.address for role in members])
|
||||
return { "members": ",\r\n".join(role.email.address for role in members) }
|
||||
return {}
|
||||
|
||||
def process_preview(self, request, form, context):
|
||||
members_email = get_list(form.cleaned_data['members'])
|
||||
members_email = form.cleaned_data['members']
|
||||
|
||||
members_info = []
|
||||
emails_not_found = []
|
||||
|
@ -233,10 +229,11 @@ class EditChairFormPreview(FormPreview):
|
|||
|
||||
return super(EditChairFormPreview, self).__call__(request, *args, **kwargs)
|
||||
|
||||
def parse_params(self, *args, **kwargs):
|
||||
def get_initial(self, request):
|
||||
chair = self.group.get_chair()
|
||||
if chair:
|
||||
self.form.base_fields['chair'].initial = chair.email.address
|
||||
return { "chair": chair.email.address }
|
||||
return {}
|
||||
|
||||
def process_preview(self, request, form, context):
|
||||
chair_email = form.cleaned_data['chair']
|
||||
|
@ -297,8 +294,8 @@ class EditNomcomForm(BaseNomcomForm, forms.ModelForm):
|
|||
|
||||
class MergeForm(BaseNomcomForm, forms.Form):
|
||||
|
||||
secondary_emails = custom_fields.MultiEmailField(label="Secondary email addresses",
|
||||
help_text="Provide a comma separated list of email addresses. Nominations already received with any of these email address will be moved to show under the primary address")
|
||||
secondary_emails = MultiEmailField(label="Secondary email addresses",
|
||||
help_text="Provide a comma separated list of email addresses. Nominations already received with any of these email address will be moved to show under the primary address", widget=forms.Textarea)
|
||||
primary_email = forms.EmailField(label="Primary email address",
|
||||
widget=forms.TextInput(attrs={'size': '40'}))
|
||||
|
||||
|
@ -312,22 +309,21 @@ class MergeForm(BaseNomcomForm, forms.Form):
|
|||
email = self.cleaned_data['primary_email']
|
||||
nominees = Nominee.objects.get_by_nomcom(self.nomcom).not_duplicated().filter(email__address=email)
|
||||
if not nominees:
|
||||
msg = "Does not exist a nomiee with this email"
|
||||
msg = "No nominee with this email exists"
|
||||
self._errors["primary_email"] = self.error_class([msg])
|
||||
|
||||
return email
|
||||
|
||||
def clean_secondary_emails(self):
|
||||
data = self.cleaned_data['secondary_emails']
|
||||
emails = get_list(data)
|
||||
emails = self.cleaned_data['secondary_emails']
|
||||
for email in emails:
|
||||
nominees = Nominee.objects.get_by_nomcom(self.nomcom).not_duplicated().filter(email__address=email)
|
||||
if not nominees:
|
||||
msg = "Does not exist a nomiee with email %s" % email
|
||||
msg = "No nominee with email %s exists" % email
|
||||
self._errors["primary_email"] = self.error_class([msg])
|
||||
break
|
||||
|
||||
return data
|
||||
return emails
|
||||
|
||||
def clean(self):
|
||||
primary_email = self.cleaned_data.get("primary_email")
|
||||
|
@ -340,7 +336,7 @@ class MergeForm(BaseNomcomForm, forms.Form):
|
|||
|
||||
def save(self):
|
||||
primary_email = self.cleaned_data.get("primary_email")
|
||||
secondary_emails = get_list(self.cleaned_data.get("secondary_emails"))
|
||||
secondary_emails = self.cleaned_data.get("secondary_emails")
|
||||
|
||||
primary_nominee = Nominee.objects.get_by_nomcom(self.nomcom).get(email__address=primary_email)
|
||||
while primary_nominee.duplicated:
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
from django import forms
|
||||
from django.core.validators import validate_email
|
||||
|
||||
from ietf.group.models import Group, Role
|
||||
from ietf.ietfauth.utils import has_role
|
||||
from ietf.message.models import Message
|
||||
from ietf.secr.utils.group import current_nomcom
|
||||
from ietf.utils.fields import MultiEmailField
|
||||
|
||||
# ---------------------------------------------
|
||||
# Globals
|
||||
|
@ -42,33 +42,6 @@ TO_LIST = ('IETF Announcement List <ietf-announce@ietf.org>',
|
|||
'Working Group Chairs <wgchairs@ietf.org>',
|
||||
'BoF Chairs <bofchairs@ietf.org>',
|
||||
'Other...')
|
||||
# ---------------------------------------------
|
||||
# Custom Fields
|
||||
# ---------------------------------------------
|
||||
|
||||
class MultiEmailField(forms.Field):
|
||||
def to_python(self, value):
|
||||
"Normalize data to a list of strings."
|
||||
|
||||
# Return an empty list if no input was given.
|
||||
if not value:
|
||||
return []
|
||||
|
||||
import types
|
||||
if isinstance(value, types.StringTypes):
|
||||
values = value.split(',')
|
||||
return [ x.strip() for x in values ]
|
||||
else:
|
||||
return value
|
||||
|
||||
def validate(self, value):
|
||||
"Check if value consists only of valid emails."
|
||||
|
||||
# Use the parent's handling of required fields, etc.
|
||||
super(MultiEmailField, self).validate(value)
|
||||
|
||||
for email in value:
|
||||
validate_email(email)
|
||||
|
||||
# ---------------------------------------------
|
||||
# Helper Functions
|
||||
|
|
|
@ -1,23 +1,25 @@
|
|||
from django import forms
|
||||
from django.core.validators import validate_email, ValidationError
|
||||
from django.core.validators import validate_email
|
||||
|
||||
class MultiEmailField(forms.Field):
|
||||
def to_python(self, value):
|
||||
"Normalize data to a list of strings."
|
||||
|
||||
class MultiEmailField(forms.CharField):
|
||||
widget = forms.widgets.Textarea
|
||||
|
||||
def clean(self, value):
|
||||
super(MultiEmailField, self).clean(value)
|
||||
# Return an empty list if no input was given.
|
||||
if not value:
|
||||
return []
|
||||
|
||||
if isinstance(value, basestring):
|
||||
values = value.split(',')
|
||||
return [ x.strip() for x in values if x.strip() ]
|
||||
else:
|
||||
return value
|
||||
|
||||
if value.endswith(','):
|
||||
value = value[:-1]
|
||||
emails = [v.strip() for v in value.split(',') if v.strip()]
|
||||
def validate(self, value):
|
||||
"Check if value consists only of valid emails."
|
||||
|
||||
for email in emails:
|
||||
try:
|
||||
validate_email(email)
|
||||
except ValidationError:
|
||||
raise ValidationError("This is not a valid comma separated email list.")
|
||||
# Use the parent's handling of required fields, etc.
|
||||
super(MultiEmailField, self).validate(value)
|
||||
|
||||
return value
|
||||
for email in value:
|
||||
validate_email(email)
|
||||
|
|
Loading…
Reference in a new issue