Example #1
0
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
Example #2
0
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()]