66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
import datetime
|
|
|
|
from django.db.models import Q
|
|
from django.http import HttpResponse, Http404
|
|
from django.shortcuts import render, get_object_or_404
|
|
|
|
import debug # pyflakes:ignore
|
|
|
|
from ietf.person.models import Email, Person, Alias
|
|
from ietf.person.fields import select2_id_name_json
|
|
|
|
def ajax_select2_search(request, model_name):
|
|
if model_name == "email":
|
|
model = Email
|
|
else:
|
|
model = Person
|
|
|
|
q = [w.strip() for w in request.GET.get('q', '').split() if w.strip()]
|
|
|
|
if not q:
|
|
objs = model.objects.none()
|
|
else:
|
|
query = Q()
|
|
for t in q:
|
|
if model == Email:
|
|
query &= Q(person__alias__name__icontains=t) | Q(address__icontains=t)
|
|
elif model == Person:
|
|
if "@" in t: # allow searching email address if there's a @ in the search term
|
|
query &= Q(alias__name__icontains=t) | Q(email__address__icontains=t)
|
|
else:
|
|
query &= Q(alias__name__icontains=t)
|
|
|
|
objs = model.objects.filter(query)
|
|
|
|
# require an account at the Datatracker
|
|
only_users = request.GET.get("user") == "1"
|
|
|
|
if model == Email:
|
|
objs = objs.filter(active=True).order_by('person__name').exclude(person=None)
|
|
if only_users:
|
|
objs = objs.exclude(person__user=None)
|
|
elif model == Person:
|
|
objs = objs.order_by("name")
|
|
if only_users:
|
|
objs = objs.exclude(user=None)
|
|
|
|
try:
|
|
page = int(request.GET.get("p", 1)) - 1
|
|
except ValueError:
|
|
page = 0
|
|
|
|
objs = objs.distinct()[page:page + 10]
|
|
|
|
return HttpResponse(select2_id_name_json(objs), content_type='application/json')
|
|
|
|
def profile(request, email_or_name):
|
|
|
|
if '@' in email_or_name:
|
|
persons = [ get_object_or_404(Email, address=email_or_name).person, ]
|
|
else:
|
|
aliases = Alias.objects.filter(name=email_or_name)
|
|
persons = list(set([ a.person for a in aliases ]))
|
|
if not persons:
|
|
raise Http404
|
|
return render(request, 'person/profile.html', {'persons': persons, 'today':datetime.date.today()})
|