Bp_Search_Media::sql( string $search_term, false $only_totalrow_count = false )
Prepare SQL query for media search.
Description
Parameters
- $search_term
-
(Required) Search terms.
- $only_totalrow_count
-
(Optional) Total row count.
Default value: false
Return
(mixed|void)
Source
File: bp-search/classes/class-bp-search-media.php
public function sql( $search_term, $only_totalrow_count = false ) {
global $wpdb, $bp;
$query_placeholder = array();
$user_groups = array();
if ( bp_is_active( 'groups' ) ) {
// Fetch public groups.
$public_groups = groups_get_groups(
array(
'fields' => 'ids',
'status' => 'public',
'per_page' => - 1,
)
);
if ( ! empty( $public_groups['groups'] ) ) {
$public_groups = $public_groups['groups'];
} else {
$public_groups = array();
}
$user_groups = array();
if ( is_user_logged_in() ) {
$groups = groups_get_user_groups( bp_loggedin_user_id() );
if ( ! empty( $groups['groups'] ) ) {
$user_groups = $groups['groups'];
} else {
$user_groups = array();
}
}
$user_groups = array_unique( array_merge( $user_groups, $public_groups ) );
}
$friends = array();
if ( bp_is_active( 'friends' ) && is_user_logged_in() ) {
// Determine friends of user.
$friends = friends_get_friend_user_ids( bp_loggedin_user_id() );
if ( empty( $friends ) ) {
$friends = array( 0 );
}
array_push( $friends, bp_loggedin_user_id() );
}
$sql = ' SELECT ';
if ( $only_totalrow_count ) {
$sql .= ' COUNT( DISTINCT m.id ) ';
} else {
$sql .= $wpdb->prepare( " DISTINCT m.id, 'photos' as type, m.title LIKE %s AS relevance, m.date_created as entry_date ", '%' . $wpdb->esc_like( $search_term ) . '%' );
}
$sql .= " FROM {$bp->media->table_name} m WHERE";
$privacy = array( 'public' );
if ( is_user_logged_in() ) {
$privacy[] = 'loggedin';
}
$sql .= $wpdb->prepare(
" (
(
m.title LIKE %s
)
AND
(
( m.privacy IN ( '" . implode( "','", $privacy ) . "' ) ) " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
( isset( $user_groups ) && ! empty( $user_groups ) ? " OR ( m.group_id IN ( '" . implode( "','", $user_groups ) . "' ) AND m.privacy = 'grouponly' )" : '' ) . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.QuotedDynamicPlaceholderGeneration
( bp_is_active( 'friends' ) && ! empty( $friends ) ? " OR ( m.user_id IN ( '" . implode( "','", $friends ) . "' ) AND m.privacy = 'friends' )" : '' ) . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.QuotedDynamicPlaceholderGeneration
( is_user_logged_in() ? " OR ( m.user_id = '" . bp_loggedin_user_id() . "' AND m.privacy = 'onlyme' )" : '' ) . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
')
)',
'%' . $wpdb->esc_like( $search_term ) . '%'
);
return apply_filters(
'bp_search_photos_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.