Changeset - 3971715302b1
[Not reviewed]
default
0 1 0
Thomas De Schampheleire - 8 years ago 2018-02-02 15:52:53
thomas.de_schampheleire@nokia.com
home: make sure users and group autocomplete is case insensitive

Both SQLite and MySQL have a case-insensitive LIKE operator by default, but
PostgreSQL does not. As a result, a query for 'john' does not match the user
'John Doe'.

As case-insensitivity is most user-friendly in the context of autocompletion
of users and groups, switch to the ilike() method of SQLAlchemy rather than
like().
1 file changed with 4 insertions and 4 deletions:
0 comments (0 inline, 0 general)
kallithea/controllers/home.py
Show inline comments
 
@@ -164,49 +164,49 @@ class HomeController(BaseController):
 
        results = []
 
        if 'users' in types:
 
            user_list = []
 
            if key:
 
                u = User.get_by_username(key)
 
                if u:
 
                    user_list = [u]
 
            elif query:
 
                user_list = User.query() \
 
                    .filter(User.is_default_user == False) \
 
                    .filter(User.active == True) \
 
                    .filter(or_(
 
                        User.username.like("%%"+query+"%%"),
 
                        User.name.like("%%"+query+"%%"),
 
                        User.lastname.like("%%"+query+"%%"),
 
                        User.username.ilike("%%"+query+"%%"),
 
                        User.name.ilike("%%"+query+"%%"),
 
                        User.lastname.ilike("%%"+query+"%%"),
 
                    )) \
 
                    .order_by(User.username) \
 
                    .limit(500) \
 
                    .all()
 
            for u in user_list:
 
                results.append({
 
                    'type': 'user',
 
                    'id': u.user_id,
 
                    'nname': u.username,
 
                    'fname': u.name,
 
                    'lname': u.lastname,
 
                    'gravatar_lnk': h.gravatar_url(u.email, size=28, default='default'),
 
                    'gravatar_size': 14,
 
                })
 
        if 'groups' in types:
 
            grp_list = []
 
            if key:
 
                grp = UserGroup.get_by_group_name(key)
 
                if grp:
 
                    grp_list = [grp]
 
            elif query:
 
                grp_list = UserGroup.query() \
 
                    .filter(UserGroup.users_group_name.like("%%"+query+"%%")) \
 
                    .filter(UserGroup.users_group_name.ilike("%%"+query+"%%")) \
 
                    .filter(UserGroup.users_group_active == True) \
 
                    .order_by(UserGroup.users_group_name) \
 
                    .limit(500) \
 
                    .all()
 
            for g in UserGroupList(grp_list, perm_level='read'):
 
                results.append({
 
                    'type': 'group',
 
                    'id': g.users_group_id,
 
                    'grname': g.users_group_name,
 
                })
 
        return dict(results=results)
0 comments (0 inline, 0 general)