Skip to content

Commit 32659ed

Browse files
committed
Move AJAX person search to person/ with some support form code.
- Legacy-Id: 4168
1 parent c6f59d2 commit 32659ed

4 files changed

Lines changed: 45 additions & 0 deletions

File tree

ietf/person/forms.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from django.utils import simplejson
2+
from django.utils.html import escape
3+
from django.utils.functional import lazy
4+
from django import forms
5+
from django.core.urlresolvers import reverse as urlreverse
6+
7+
from ietf.person.models import *
8+
9+
def json_emails(emails):
10+
return simplejson.dumps([{"id": e.address + "", "name": escape(u"%s <%s>" % (e.person.name, e.address))} for e in emails])
11+
12+
class EmailsField(forms.CharField):
13+
def __init__(self, *args, **kwargs):
14+
kwargs["max_length"] = 1000
15+
if not "help_text" in kwargs:
16+
kwargs["help_text"] = "Type in name to search for person"
17+
super(EmailsField, self).__init__(*args, **kwargs)
18+
self.widget.attrs["class"] = "emails-field"
19+
self.widget.attrs["data-ajax-url"] = lazy(urlreverse, str)("ajax_search_emails") # make this lazy to prevent initialization problem
20+
21+
def prepare_value(self, value):
22+
if not value:
23+
return ""
24+
if isinstance(value, str):
25+
return value
26+
return json_emails(value)
27+
28+
def clean(self, value):
29+
value = super(EmailsField, self).clean(value)
30+
return Email.objects.filter(address__in=[x.strip() for x in value.split(",") if x.strip()]).select_related("person")
31+

ietf/person/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.conf.urls.defaults import patterns, url
2+
3+
urlpatterns = patterns('',
4+
(r'^search/$', "ietf.person.views.ajax_search_emails", None, 'ajax_search_emails'),
5+
)

ietf/person/views.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from django.http import Http404, HttpResponse
2+
3+
from ietf.person.models import *
4+
from ietf.person.forms import json_emails
5+
6+
def ajax_search_emails(request):
7+
emails = Email.objects.filter(person__alias__name__istartswith=request.GET.get('q','')).order_by('person__name').distinct()
8+
return HttpResponse(json_emails(emails), mimetype='application/json')

ietf/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
(r'^wg/', include('ietf.wginfo.urls')),
6464
(r'^wgcharter/', include('ietf.wgcharter.urls')),
6565
(r'^cookies/', include('ietf.cookies.urls')),
66+
(r'^person/', include('ietf.person.urls')),
6667
(r'^submit/', include('ietf.submit.urls')),
6768
(r'^streams/', include('ietf.ietfworkflows.urls')),
6869

0 commit comments

Comments
 (0)