From 3567a1895e871436919c1f8b6ec1fa6395076dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Fri, 27 Nov 2015 12:17:00 +0100 Subject: [PATCH] general: change user search to look in both FTS and actual fields (#9132) --- wcs/api.py | 19 +++++++++---------- wcs/backoffice/management.py | 8 +++++++- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/wcs/api.py b/wcs/api.py index 318ffae..c70dee7 100644 --- a/wcs/api.py +++ b/wcs/api.py @@ -515,16 +515,15 @@ class ApiUsersDirectory(Directory): criterias = [] query = get_request().form.get('q') if query: - if not get_publisher().is_using_postgresql(): - from admin.settings import UserFieldsFormDef - formdef = UserFieldsFormDef() - criteria_fields = [st.ILike('name', query), st.ILike('email', query)] - for field in formdef.fields: - if field.type in ('string', 'text', 'email'): - criteria_fields.append(st.ILike('f%s' % field.id, query)) - criterias.append(st.Or(criteria_fields)) - else: - criterias.append(st.FtsMatch(query)) + from admin.settings import UserFieldsFormDef + formdef = UserFieldsFormDef() + criteria_fields = [st.ILike('name', query), st.ILike('email', query)] + for field in formdef.fields: + if field.type in ('string', 'text', 'email'): + criteria_fields.append(st.ILike('f%s' % field.id, query)) + if get_publisher().is_using_postgresql(): + criteria_fields.append(st.FtsMatch(query)) + criterias.append(st.Or(criteria_fields)) def as_dict(user): user_info = user.get_substitution_variables(prefix='') diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py index de07e01..44e0669 100644 --- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -302,7 +302,13 @@ class UsersViewDirectory(Directory): return r.getvalue() formdef = UserFieldsFormDef() - criterias = [FtsMatch(query)] + criteria_fields = [ILike('name', query), ILike('email', query)] + for field in formdef.fields: + if field.type in ('string', 'text', 'email'): + criteria_fields.append(ILike('f%s' % field.id, query)) + if get_publisher().is_using_postgresql(): + criteria_fields.append(FtsMatch(query)) + criterias = [Or(criteria_fields)] users = get_publisher().user_class.select(order_by=order_by, clause=criterias, limit=limit, offset=offset) total_count = get_publisher().user_class.count(criterias) -- 2.6.2