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)) . ' &nbsp;' . bp_core_get_user_displayname($user->ID) . ' (' . esc_html($username) . ')' . "\n";
        }
    }
    exit;
}
Пример #4
0
/**
 * 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);
}
Пример #5
0
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;
 }
Пример #9
0
	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 ) ) );
	}
Пример #10
0
/**
 * 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);
    }
}
Пример #11
0
 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;
 }