diff --git a/ietf/person/forms.py b/ietf/person/forms.py new file mode 100644 index 000000000..039d0cb1b --- /dev/null +++ b/ietf/person/forms.py @@ -0,0 +1,31 @@ +from django.utils import simplejson +from django.utils.html import escape +from django.utils.functional import lazy +from django import forms +from django.core.urlresolvers import reverse as urlreverse + +from ietf.person.models import * + +def json_emails(emails): + return simplejson.dumps([{"id": e.address + "", "name": escape(u"%s <%s>" % (e.person.name, e.address))} for e in emails]) + +class EmailsField(forms.CharField): + def __init__(self, *args, **kwargs): + kwargs["max_length"] = 1000 + if not "help_text" in kwargs: + kwargs["help_text"] = "Type in name to search for person" + super(EmailsField, self).__init__(*args, **kwargs) + self.widget.attrs["class"] = "emails-field" + self.widget.attrs["data-ajax-url"] = lazy(urlreverse, str)("ajax_search_emails") # make this lazy to prevent initialization problem + + def prepare_value(self, value): + if not value: + return "" + if isinstance(value, str): + return value + return json_emails(value) + + def clean(self, value): + value = super(EmailsField, self).clean(value) + return Email.objects.filter(address__in=[x.strip() for x in value.split(",") if x.strip()]).select_related("person") + diff --git a/ietf/person/urls.py b/ietf/person/urls.py new file mode 100644 index 000000000..03a0ecc2a --- /dev/null +++ b/ietf/person/urls.py @@ -0,0 +1,5 @@ +from django.conf.urls.defaults import patterns, url + +urlpatterns = patterns('', + (r'^search/$', "ietf.person.views.ajax_search_emails", None, 'ajax_search_emails'), +) diff --git a/ietf/person/views.py b/ietf/person/views.py new file mode 100644 index 000000000..be305361c --- /dev/null +++ b/ietf/person/views.py @@ -0,0 +1,8 @@ +from django.http import Http404, HttpResponse + +from ietf.person.models import * +from ietf.person.forms import json_emails + +def ajax_search_emails(request): + emails = Email.objects.filter(person__alias__name__istartswith=request.GET.get('q','')).order_by('person__name').distinct() + return HttpResponse(json_emails(emails), mimetype='application/json') diff --git a/ietf/urls.py b/ietf/urls.py index 56285d3a8..d3a686ac7 100644 --- a/ietf/urls.py +++ b/ietf/urls.py @@ -63,6 +63,7 @@ urlpatterns = patterns('', (r'^wg/', include('ietf.wginfo.urls')), (r'^wgcharter/', include('ietf.wgcharter.urls')), (r'^cookies/', include('ietf.cookies.urls')), + (r'^person/', include('ietf.person.urls')), (r'^submit/', include('ietf.submit.urls')), (r'^streams/', include('ietf.ietfworkflows.urls')),