Bp_Search_Groups::sql( $search_term, $only_totalrow_count = false )
Description
Source
File: bp-search/classes/class-bp-search-groups.php
public function sql( $search_term, $only_totalrow_count=false ){ /* an example UNION query :- ----------------------------------------------------- ( SELECT DISTINCT g.id, 'groups' as type, g.name LIKE '%ho%' AS relevance, gm2.meta_value as entry_date FROM wp_bp_groups_groupmeta gm1, wp_bp_groups_groupmeta gm2, wp_bp_groups g WHERE 1=1 AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND ( g.name LIKE '%ho%' OR g.description LIKE '%ho%' ) ) ---------------------------------------------------- */ global $wpdb, $bp; $query_placeholder = array(); $sql = " SELECT "; if ( $only_totalrow_count ) { $sql .= " COUNT( DISTINCT g.id ) "; } else { $sql .= " DISTINCT g.id, 'groups' as type, g.name LIKE %s AS relevance, gm2.meta_value as entry_date "; $query_placeholder[] = '%'.$wpdb->esc_like( $search_term ).'%'; } $sql .= " FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name} g WHERE 1=1 AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND ( g.name LIKE %s OR g.description LIKE %s ) "; $query_placeholder[] = '%'.$wpdb->esc_like( $search_term ).'%'; $query_placeholder[] = '%'.$wpdb->esc_like( $search_term ).'%'; /** LOCATION AUTOCOMPLETE SEARCH ************************************************/ if (function_exists('bp_bpla') && 'yes' == bp_bpla()->option('enable-for-groups') ) { $split_search_term = explode(' ', $search_term ); $sql .= "OR g.id IN ( SELECT group_id FROM {$bp->groups->table_name_groupmeta} WHERE meta_key = 'bbgs_group_search_string' AND "; foreach ( $split_search_term as $k => $sterm ) { if ( $k == 0 ) { $sql .= "meta_value LIKE %s"; $query_placeholder[] = '%'.$wpdb->esc_like( $sterm ) . '%'; } else { $sql .= "AND meta_value LIKE %s"; $query_placeholder[] = '%'.$wpdb->esc_like( $sterm ) .'%'; } } $sql .= " ) "; } /** * Properly handle hidden groups. * For guest users - exclude all hidden groups. * For members - include only those hidden groups where current user is a member. * For admins - include all hidden groups ( do nothing extra ). * @since 1.1.0 */ if( is_user_logged_in() ){ if( !current_user_can( 'level_10' ) ){ //get all hidden groups where i am a member of $hidden_groups_sql = $wpdb->prepare( "SELECT DISTINCT gm.group_id FROM {$bp->groups->table_name_members} gm JOIN {$bp->groups->table_name} g ON gm.group_id = g.id WHERE gm.user_id = %d AND gm.is_confirmed = 1 AND gm.is_banned = 0 AND g.status='hidden' ", bp_loggedin_user_id() ); $hidden_groups_ids = $wpdb->get_col( $hidden_groups_sql ); if( empty( $hidden_groups_ids ) ){ $hidden_groups_ids = array( 99999999 );//arbitrarily large number } $hidden_groups_ids_csv = implode( ',', $hidden_groups_ids ); //either gruops which are not hidden, //or if hidden, only those where i am a member. $sql .= " AND ( g.status != 'hidden' OR g.id IN ( {$hidden_groups_ids_csv} ) ) "; } } else { $sql .= " AND g.status != 'hidden' "; } $sql = $wpdb->prepare( $sql, $query_placeholder ); return apply_filters( 'Bp_Search_Groups_sql', $sql, array( 'search_term' => $search_term, 'only_totalrow_count' => $only_totalrow_count, ) ); }
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.