diff --git a/ietf/ipr/models.py b/ietf/ipr/models.py index 454642e87..a710ba087 100644 --- a/ietf/ipr/models.py +++ b/ietf/ipr/models.py @@ -1,7 +1,38 @@ +import re from django.db import models +from django.template.defaultfilters import capfirst +from django import oldforms +from django import newforms as forms from ietf.idtracker.views import InternetDraft from ietf.idtracker.models import Rfc +# ------------------------------------------------------------------------ +# New field classes + +phone_re = re.compile(r'^\+?[0-9 ]*(\([0-9]+\))?[0-9 -]+$') +class InternationalPhoneNumberField(models.PhoneNumberField): + error_message = 'Phone numbers may have a leading "+", and otherwise only contain numbers [0-9], dash, space, and parentheses. ' + def validate(self, field_data, all_data): + if not phone_re.search(field_data): + raise ValidationError, self.error_message + ' "%s" is invalid.' % field_data + + def clean(self, value): + if value in EMPTY_VALUES: + return u'' + self.validate(value, {}) + return smart_unicode(value) + + def formfield(self, **kwargs): + defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), + 'help_text': self.help_text, + 'error_message': self.error_message + "Enter a valid phone number."} + defaults.update(kwargs) + return forms.RegexField(phone_re, **defaults) + + +# ------------------------------------------------------------------------ +# Models + LICENSE_CHOICES = ( (1, 'No License Required for Implementers.'), (2, 'Royalty-Free, Reasonable and Non-Discriminatory License to All Implementers.'), @@ -126,8 +157,8 @@ class IprContact(models.Model): department = models.CharField(blank=True, maxlength=255) address1 = models.CharField(blank=True, maxlength=255) address2 = models.CharField(blank=True, maxlength=255) - telephone = models.CharField(maxlength=25) - fax = models.CharField(blank=True, maxlength=25) + telephone = InternationalPhoneNumberField(maxlength=25) + fax = InternationalPhoneNumberField(blank=True, maxlength=25) email = models.EmailField(maxlength=255) def __str__(self): return self.name diff --git a/ietf/ipr/views.py b/ietf/ipr/views.py index cb2384180..048e1f22f 100644 --- a/ietf/ipr/views.py +++ b/ietf/ipr/views.py @@ -83,7 +83,11 @@ def show(request, ipr_id=None): ipr.discloser_identify = linebreaks(escape(ipr.discloser_identify)) ipr.comments = linebreaks(escape(ipr.comments)) ipr.other_notes = linebreaks(escape(ipr.other_notes)) - + opt = ipr.licensing_option + ipr.licensing_option = dict(models.LICENSE_CHOICES)[ipr.licensing_option] + ipr.selecttype = dict(models.SELECT_CHOICES)[ipr.selecttype] + if ipr.selectowned: + ipr.selectowned = dict(models.SELECT_CHOICES)[ipr.selectowned] return render("ipr/details.html", {"ipr": ipr, "section_list": section_list}) def update(request, ipr_id=None): diff --git a/ietf/templates/ipr/details.html b/ietf/templates/ipr/details.html index 27dc49a27..a14449e07 100644 --- a/ietf/templates/ipr/details.html +++ b/ietf/templates/ipr/details.html @@ -253,7 +253,7 @@ B. Does this disclosure relate to an unpublished pending patent application?: - {{ ipr.get_selecttype_display }} + {{ ipr.selecttype }} @@ -299,7 +299,7 @@ - {{ ipr.get_licensing_option_display }}
+ {{ ipr.licensing_option }}
{{ ipr.get_lic_opt_a_sub_display }} {{ ipr.get_lic_opt_b_sub_display }} {{ ipr.get_lic_opt_c_sub_display }}