function delete_all_for_user($user_id) { global $nxtdb, $bp; // Get friends of $user_id $friend_ids = BP_Friends_Friendship::get_friend_user_ids($user_id); // Delete all friendships related to $user_id $nxtdb->query($nxtdb->prepare("DELETE FROM {$bp->friends->table_name} WHERE friend_user_id = %d OR initiator_user_id = %d", $user_id, $user_id)); // Delete friend request notifications for members who have a notification from this user. $nxtdb->query($nxtdb->prepare("DELETE FROM {$bp->core->table_name_notifications} WHERE component_name = 'friends' AND ( component_action = 'friendship_request' OR component_action = 'friendship_accepted' ) AND item_id = %d", $user_id)); // Loop through friend_ids and update their counts foreach ((array) $friend_ids as $friend_id) { BP_Friends_Friendship::total_friend_count($friend_id); } }
/** * Return the total friendship request count for a given user. * * @param int $user_id ID of the user whose requests are being counted. * Default: ID of the logged-in user. * @return int Friend count. */ function bp_friend_get_total_requests_count($user_id = 0) { if (empty($user_id)) { $user_id = bp_loggedin_user_id(); } /** * Filters the total friendship request count for a given user. * * @since 1.2.0 * * @param int $value Friendship request count. */ return apply_filters('bp_friend_get_total_requests_count', count(BP_Friends_Friendship::get_friend_user_ids($user_id, true))); }
/** * AJAX handler for autocomplete. * * Displays friends only, unless BP_MESSAGES_AUTOCOMPLETE_ALL is defined. * * @since BuddyPress (1.2.0) * * @return string HTML. */ function bp_legacy_theme_ajax_messages_autocomplete_results() { // Include everyone in the autocomplete, or just friends? if (bp_is_current_component(bp_get_messages_slug())) { $autocomplete_all = buddypress()->messages->autocomplete_all; } $pag_page = 1; $limit = (int) $_GET['limit'] ? $_GET['limit'] : apply_filters('bp_autocomplete_max_results', 10); $search_terms = isset($_GET['q']) ? $_GET['q'] : ''; $user_query_args = array('search_terms' => $search_terms, 'page' => intval($pag_page), 'per_page' => intval($limit)); // If only matching against friends, get an $include param for // BP_User_Query if (!$autocomplete_all && bp_is_active('friends')) { $include = BP_Friends_Friendship::get_friend_user_ids(bp_loggedin_user_id()); // Ensure zero matches if no friends are found if (empty($include)) { $include = array(0); } $user_query_args['include'] = $include; } $user_query = new BP_User_Query($user_query_args); // Backward compatibility - if a plugin is expecting a legacy // filter, pass the IDs through the filter and requery (groan) if (has_filter('bp_core_autocomplete_ids') || has_filter('bp_friends_autocomplete_ids')) { $found_user_ids = wp_list_pluck($user_query->results, 'ID'); if ($autocomplete_all) { $found_user_ids = apply_filters('bp_core_autocomplete_ids', $found_user_ids); } else { $found_user_ids = apply_filters('bp_friends_autocomplete_ids', $found_user_ids); } if (empty($found_user_ids)) { $found_user_ids = array(0); } // Repopulate the $user_query variable $user_query = new BP_User_Query(array('include' => $found_user_ids)); } if (!empty($user_query->results)) { foreach ($user_query->results as $user) { if (bp_is_username_compatibility_mode()) { // Sanitize for spaces. Use urlencode() rather // than rawurlencode() because %20 breaks JS $username = urlencode($user->user_login); } else { $username = $user->user_nicename; } // Note that the final line break acts as a delimiter for the // autocomplete javascript and thus should not be removed echo '<span id="link-' . esc_attr($username) . '" href="' . bp_core_get_user_domain($user->ID) . '"></span>' . bp_core_fetch_avatar(array('item_id' => $user->ID, 'type' => 'thumb', 'width' => 15, 'height' => 15, 'alt' => $user->display_name)) . ' ' . bp_core_get_user_displayname($user->ID) . ' (' . esc_html($username) . ')' . "\n"; } } exit; }
/** * Get the IDs of a given user's friends. * * @param int $user_id ID of the user whose friends are being retreived. * @param bool $friend_requests_only Optional. Whether to fetch unaccepted * requests only. Default: false. * @param bool $assoc_arr Optional. True to receive an array of arrays keyed as * 'user_id' => $user_id; false to get a one-dimensional array of user * IDs. Default: false. */ function friends_get_friend_user_ids($user_id, $friend_requests_only = false, $assoc_arr = false) { return BP_Friends_Friendship::get_friend_user_ids($user_id, $friend_requests_only, $assoc_arr); }
function friends_get_friends_list($user_id) { global $bp; $friend_ids = BP_Friends_Friendship::get_friend_user_ids($user_id); if (!$friend_ids) { return false; } for ($i = 0; $i < count($friend_ids); $i++) { if (function_exists('bp_user_fullname')) { $display_name = bp_fetch_user_fullname($friend_ids[$i], false); } if ($display_name != ' ') { $friends[] = array('id' => $friend_ids[$i], 'full_name' => $display_name); } } if ($friends && is_array($friends)) { usort($friends, 'friends_sort_by_name'); } if (!$friends) { return false; } return $friends; }
function bp_friend_get_total_requests_count($user_id = 0) { if (empty($user_id)) { $user_id = bp_loggedin_user_id(); } return apply_filters('bp_friend_get_total_requests_count', count(BP_Friends_Friendship::get_friend_user_ids($user_id, true))); }
/** * Delete all friendships and friend notifications related to a user. * * @param int $user_id ID of the user being expunged. */ public static function delete_all_for_user($user_id) { global $wpdb; $bp = buddypress(); // Get friends of $user_id $friend_ids = BP_Friends_Friendship::get_friend_user_ids($user_id); // Delete all friendships related to $user_id $wpdb->query($wpdb->prepare("DELETE FROM {$bp->friends->table_name} WHERE friend_user_id = %d OR initiator_user_id = %d", $user_id, $user_id)); // Delete friend request notifications for members who have a // notification from this user. if (bp_is_active('notifications')) { $wpdb->query($wpdb->prepare("DELETE FROM {$bp->notifications->table_name} WHERE component_name = 'friends' AND ( component_action = 'friendship_request' OR component_action = 'friendship_accepted' ) AND item_id = %d", $user_id)); } // Loop through friend_ids and update their counts foreach ((array) $friend_ids as $friend_id) { BP_Friends_Friendship::total_friend_count($friend_id); } }
/** * Get a count of a user's friends who can be invited to a given group. * * Users can invite any of their friends except: * * - users who are already in the group * - users who have a pending invite to the group * - users who have been banned from the group * * @since 1.0.0 * @todo Need to do a group component check before using group functions. * * @param int $user_id ID of the user whose friends are being counted. * @param int $group_id ID of the group friends are being invited to. * @return int $invitable_count Eligible friend count. */ public static function get_invitable_friend_count($user_id, $group_id) { // Setup some data we'll use below. $is_group_admin = groups_is_user_admin($user_id, $group_id); $friend_ids = BP_Friends_Friendship::get_friend_user_ids($user_id); $invitable_count = 0; for ($i = 0, $count = count($friend_ids); $i < $count; ++$i) { // If already a member, they cannot be invited again. if (groups_is_user_member((int) $friend_ids[$i], $group_id)) { continue; } // If user already has invite, they cannot be added. if (groups_check_user_has_invite((int) $friend_ids[$i], $group_id)) { continue; } // If user is not group admin and friend is banned, they cannot be invited. if (false === $is_group_admin && groups_is_user_banned((int) $friend_ids[$i], $group_id)) { continue; } $invitable_count++; } return $invitable_count; }
function bp_friend_get_total_requests_count( $user_id = 0 ) { global $bp; if ( empty( $user_id ) ) $user_id = $bp->loggedin_user->id; return apply_filters( 'bp_friend_get_total_requests_count', count( BP_Friends_Friendship::get_friend_user_ids( $user_id, true ) ) ); }
/** * Process a group activity comment. * * @since 1.0.0 * * @param object $activity The activity item being saved. */ function crowdmentions_activity_after_save_group_activity_comment($activity) { if ($activity->type !== 'activity_comment') { return; } $root_activity = new BP_Activity_Activity($activity->item_id); if ($root_activity->component !== 'groups') { return; } // Find mentions in the activity item's content. $mentions = crowdmentions_find_mentions($activity->content); foreach ((array) array_values($mentions) as $mention) { if (!bp_is_active('groups') && $mention === 'group') { continue; } if (!bp_is_active('groups') && $mention === 'moderators') { continue; } if (!bp_is_active('groups') && $mention === 'administrators') { continue; } if (!bp_is_active('friends') && $mention === 'friends') { continue; } switch ($mention) { case 'group': $args = array('user_ids' => BP_Groups_Member::get_group_member_ids($root_activity->item_id), 'user_id' => $activity->user_id, 'item_id' => $activity->id, 'secondary_item_id' => $root_activity->item_id, 'component_action' => 'mention_group_' . $activity->id); break; case 'moderators': $user_ids = []; $mods = BP_Groups_Member::get_group_moderator_ids($root_activity->item_id); // Get an array of moderator IDs. foreach ((array) $mods as $mod) { $user_ids[] = $mod->user_id; } $args = array('user_ids' => $user_ids, 'user_id' => $activity->user_id, 'item_id' => $activity->id, 'secondary_item_id' => $root_activity->item_id, 'component_action' => 'mention_moderators_' . $activity->id); break; case 'administrators': $user_ids = []; $admins = BP_Groups_Member::get_group_administrator_ids($root_activity->item_id); // Get an array of administrator IDs. foreach ((array) $admins as $admin) { $user_ids[] = $admin->user_id; } $args = array('user_ids' => $user_ids, 'user_id' => $activity->user_id, 'item_id' => $activity->id, 'secondary_item_id' => $root_activity->item_id, 'component_action' => 'mention_administrators_' . $activity->id); break; case 'friends': $friend_ids = BP_Friends_Friendship::get_friend_user_ids($activity->user_id, false, false); $args = array('user_ids' => array_intersect(BP_Groups_Member::get_group_member_ids($root_activity->item_id), $friend_ids), 'user_id' => $activity->user_id, 'item_id' => $activity->id, 'secondary_item_id' => $root_activity->item_id, 'component_action' => 'mention_friends_' . $activity->id); break; default: // Skip to the next iteration. continue 2; } // Send notifications. crowdmentions_send_notifications($args); } }
function get_invitable_friend_count($user_id, $group_id) { global $wpdb, $bp; $friend_ids = BP_Friends_Friendship::get_friend_user_ids($user_id); $invitable_count = 0; for ($i = 0; $i < count($friend_ids); $i++) { if (BP_Groups_Member::check_is_member((int) $friend_ids[$i], $group_id)) { continue; } if (BP_Groups_Member::check_has_invite((int) $friend_ids[$i], $group_id)) { continue; } $invitable_count++; } return $invitable_count; }