backoffice: don't include deleted users in listing (#42393)

This commit is contained in:
Frédéric Péters 2020-05-03 13:47:39 +02:00
parent 2435cbc032
commit 0791d9af7a
1 changed files with 10 additions and 8 deletions

View File

@ -325,26 +325,28 @@ class UsersDirectory(Directory):
if set(possible_roles) == set(checked_roles):
checked_roles = None
total_count = get_publisher().user_class.count()
criterias = [st.Null('deleted_timestamp')]
total_count = get_publisher().user_class.count(criterias)
# declarative criteria to only get checked roles
criterias = []
if checked_roles:
roles_criterias = []
if 'admin' in checked_roles:
criterias.append(st.Equal('is_admin', True))
roles_criterias.append(st.Equal('is_admin', True))
if 'none' in checked_roles:
criterias.append(st.And([
roles_criterias.append(st.And([
st.Equal('is_admin', False), st.Equal('roles', [])]))
other_roles = [x for x in checked_roles if x not in ('admin', 'none')]
if other_roles:
criterias.append(st.Intersects('roles', other_roles))
criterias = [st.Or(criterias)]
roles_criterias.append(st.Intersects('roles', other_roles))
criterias.append(st.Or(roles_criterias))
query = get_request().form.get('q')
if query:
criterias.append(st.Or([st.ILike('name', query), st.ILike('email', query)]))
if criterias:
if len(criterias) > 1:
filtered_count = get_publisher().user_class.count(criterias)
if filtered_count < offset:
# reset offset if we are past the number of elements
@ -360,7 +362,7 @@ class UsersDirectory(Directory):
r += htmltext('<ul>')
r += htmltext('<li>%s %s</li>') % (_('Total number of users:'), total_count)
if criterias:
if len(criterias) > 1:
r += htmltext('<li>%s %s</li>') % (_('Number of filtered users:'),
filtered_count)