general: change user search to look in both FTS and actual fields (#9132)

This commit is contained in:
Frédéric Péters 2015-11-27 12:17:00 +01:00
parent dca7a57115
commit 52db59fc4e
2 changed files with 16 additions and 11 deletions

View File

@ -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='')

View File

@ -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)