def filter_members(location, text_filter, type, active_only, start, end, override_user=None): if type == "member_search": text_filter = "%" + " ".join(text_filter.split()).replace("'","\\'") + "%" if override_user: user_locs = Location.select() else: user_locs = user_locations(identity.current.user, ['member', 'host']) if user_locs: if location: relevant_groups = location.groups relevant_user_ids = tuple((ug.userID for ug in UserGroup.select(IN(UserGroup.q.group, tuple(relevant_groups))))) display_name_clause = iLIKE(User.q.display_name, text_filter) user_id_clause = IN(User.q.id, relevant_user_ids) # so that we select all members even those with homehub as this hub if active_only: user_active_clause = (User.q.active == 1) users = User.select(AND(display_name_clause, user_id_clause, user_active_clause)) else: users = User.select(AND(display_name_clause, user_id_clause)) else: display_name_clause = iLIKE(User.q.display_name, text_filter) if active_only: user_active_clause = (User.q.active == 1) users = User.select(AND(display_name_clause, user_active_clause)) else: users = User.select(display_name_clause) users = users.orderBy('display_name') else: users = [] elif type == 'rfid_member_search': users = User.select(AND(User.q.rfid == text_filter)) elif type == 'fulltext_member_search': users = hubspace.search.do_search(text_filter) if location: user_ids = tuple(user.id for user in users) if not user_ids: users = [] else: users = User.select(AND(IN(User.q.id, user_ids), User.q.homeplaceID==location.id)) if start != None and end != None: users = users[start:end] try: webapi = User.selectBy(first_name="web", last_name="api")[0] if webapi in users and not identity.has_permission("superuser"): users.remove(webapi) except: pass return users
def find_locations_available_to_user_for_euve(user): return [loc for loc in permissionslib.user_locations(user, levels=['member']) if loc in find_locations_with_euve()]