From 68b38228a98527749490e5d24246856abd980cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Wed, 22 Feb 2017 14:46:44 +0100 Subject: [PATCH] Apply the new db structure to autocomplete in cof - The autocompletion feature works again - The template is a bit more readable (indentation) - The `options` variable in the template is no longer a integer but a boolean. --- cof/autocomplete.py | 27 ++++++----- cof/templates/autocomplete_user.html | 29 ------------ cof/templates/cof/autocomplete_user.html | 57 ++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 43 deletions(-) delete mode 100644 cof/templates/autocomplete_user.html create mode 100644 cof/templates/cof/autocomplete_user.html diff --git a/cof/autocomplete.py b/cof/autocomplete.py index 37a08c32..3975c67d 100644 --- a/cof/autocomplete.py +++ b/cof/autocomplete.py @@ -5,8 +5,7 @@ from ldap3 import Connection from django import shortcuts from django.http import Http404 from django.db.models import Q -from django.contrib.auth.models import User -from .models import CofProfile +from django.contrib.auth.models import User, Group from .decorators import buro_required from django.conf import settings @@ -22,21 +21,20 @@ def autocomplete(request): if "q" not in request.GET: raise Http404 q = request.GET['q'] - data = { - 'q': q, - } + data = {'q': q} + cof_members = Group.objects.get(name="cof_members") queries = {} bits = q.split() # Fetching data from User and Profile tables - queries['members'] = CofProfile.objects.filter(is_cof=True) - queries['users'] = User.objects.filter(profile__cof__is_cof=False) + queries['members'] = User.objects.filter(groups=cof_members) + queries['users'] = User.objects.exclude(groups=cof_members) for bit in bits: queries['members'] = queries['members'].filter( - Q(profile__user__first_name__icontains=bit) - | Q(profile__user__last_name__icontains=bit) - | Q(profile__user__username__icontains=bit) + Q(first_name__icontains=bit) + | Q(last_name__icontains=bit) + | Q(username__icontains=bit) | Q(profile__login_clipper__icontains=bit)) queries['users'] = queries['users'].filter( Q(first_name__icontains=bit) @@ -47,7 +45,8 @@ def autocomplete(request): # Clearing redundancies usernames = ( - set(queries['members'].values_list('login_clipper', flat='True')) + set(queries['members'].values_list('profile__login_clipper', + flat='True')) | set(queries['users'].values_list('profile__login_clipper', flat='True')) ) @@ -56,7 +55,7 @@ def autocomplete(request): if hasattr(settings, 'LDAP_SERVER_URL'): # Fetching ldap_query = '(|{:s})'.format(''.join( - ['(cn=*{bit:s}*)(uid=*{bit:s}*)'.format(**{"bit": bit}) + ['(cn=*{bit:s}*)(uid=*{bit:s}*)'.format(bit=bit) for bit in bits] )) with Connection(settings.LDAP_SERVER_URL) as conn: @@ -74,6 +73,6 @@ def autocomplete(request): # Resulting data data.update(queries) - data['options'] = sum(len(query) for query in queries) + data['options'] = any(bool(query) for query in queries.values()) - return shortcuts.render(request, "autocomplete_user.html", data) + return shortcuts.render(request, "cof/autocomplete_user.html", data) diff --git a/cof/templates/autocomplete_user.html b/cof/templates/autocomplete_user.html deleted file mode 100644 index 17d55c66..00000000 --- a/cof/templates/autocomplete_user.html +++ /dev/null @@ -1,29 +0,0 @@ -{% load utils %} - diff --git a/cof/templates/cof/autocomplete_user.html b/cof/templates/cof/autocomplete_user.html new file mode 100644 index 00000000..c8e0a6bc --- /dev/null +++ b/cof/templates/cof/autocomplete_user.html @@ -0,0 +1,57 @@ +{% load utils %} +