From 5632cdaa220fa3d5f913254673aa182ec4fc7aec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Wed, 22 Feb 2017 15:03:34 +0100 Subject: [PATCH] Uses the cof_members groups in kfet's autocomplete The is_cof attribute cannot be used in database queries anymore --- kfet/autocomplete.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/kfet/autocomplete.py b/kfet/autocomplete.py index 4e4cf024..dd406fde 100644 --- a/kfet/autocomplete.py +++ b/kfet/autocomplete.py @@ -6,7 +6,7 @@ from django.shortcuts import render from django.http import Http404 from django.db.models import Q from django.conf import settings -from django.contrib.auth.models import User +from django.contrib.auth.models import User, Group from kfet.decorators import teamkfet_required from kfet.models import Account @@ -23,6 +23,7 @@ def account_create(request): if "q" not in request.GET: raise Http404 q = request.GET.get("q") + cof_members = Group.objects.get(name="cof_members") if (len(q) == 0): return render(request, "kfet/account_create_autocomplete.html") @@ -32,17 +33,17 @@ def account_create(request): queries = {} search_words = q.split() - # Fetching data from User, CofProfile and Account tables + # Fetching data from User and Account tables queries['kfet'] = Account.objects - queries['users_cof'] = User.objects.filter(profile__cof__is_cof=True) - queries['users_notcof'] = User.objects.filter(profile__cof__is_cof=False) + queries['users_cof'] = User.objects.filter(groups=cof_members) + queries['users_notcof'] = User.objects.exclude(groups=cof_members) for word in search_words: queries['kfet'] = queries['kfet'].filter( - Q(profile__user__username__icontains=word) - | Q(profile__user__first_name__icontains=word) - | Q(profile__user__last_name__icontains=word) - ) + Q(profile__user__username__icontains=word) + | Q(profile__user__first_name__icontains=word) + | Q(profile__user__last_name__icontains=word) + ) queries['users_cof'] = queries['users_cof'].filter( Q(username__icontains=word) | Q(first_name__icontains=word) @@ -57,26 +58,31 @@ def account_create(request): # Clearing redundancies queries['kfet'] = queries['kfet'].distinct() usernames = set( - queries['kfet'].values_list('profile__user__username', flat=True)) + queries['kfet'].values_list('profile__user__username', flat=True) + ) queries['kfet'] = [ (account, account.profile.user) for account in queries['kfet'] ] - queries['users_cof'] = \ + queries['users_cof'] = ( queries['users_cof'].exclude(username__in=usernames).distinct() - queries['users_notcof'] = \ + ) + queries['users_notcof'] = ( queries['users_notcof'].exclude(username__in=usernames).distinct() + ) usernames |= set( - queries['users_cof'].values_list('username', flat=True)) + queries['users_cof'].values_list('username', flat=True) + ) usernames |= set( - queries['users_notcof'].values_list('username', flat=True)) + queries['users_notcof'].values_list('username', flat=True) + ) # Fetching data from the SPI 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 search_words] )) with Connection(settings.LDAP_SERVER_URL) as conn: @@ -94,6 +100,6 @@ def account_create(request): # Resulting data data.update(queries) - data['options'] = sum([len(query) for query in queries]) + data['options'] = any(queries.values()) return render(request, "kfet/account_create_autocomplete.html", data)