Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
04/13/2012 04:31:51 PM (14 years ago)
Author:
boonebgorges
Message:

'Total member count' cleanup:

  • Introduces bp_core_get_active_member_count() to get an accurate count of members with recorded last_activity
  • Points bp_get_total_member_count() to bp_core_get_active_member_count(), so that 'All Members' tab count on member directories matches the total count prepared by BP_Core_User::get_users(). Fixes #4061
  • Changes 'All Members' count in activity/index.php to use bp_get_total_member_count(), for greater accuracy and consistency between activity and members components
  • Introduces a cache-busting function to be fired when member counts change (new members, spam status changed, member deleted)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-members/bp-members-functions.php

    r5986 r5987  
    487487
    488488/**
     489 * Returns the total number of members, limited to those members with last_activity
     490 *
     491 * @return int The number of active members
     492 */
     493function bp_core_get_active_member_count() {
     494    global $wpdb;
     495
     496    if ( !$count = get_transient( 'bp_active_member_count' ) ) {
     497        // Avoid a costly join by splitting the lookup
     498        if ( is_multisite() ) {
     499            $sql = $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE (user_status != 0 OR deleted != 0 OR user_status != 0)" );
     500        } else {
     501            $sql = $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE user_status != 0" );
     502        }
     503
     504        $exclude_users = $wpdb->get_col( $sql );
     505        $exclude_users_sql = !empty( $exclude_users ) ? $wpdb->prepare( "AND user_id NOT IN (" . implode( ',', wp_parse_id_list( $exclude_users ) ) . ")" ) : '';
     506
     507        $count = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(user_id) FROM $wpdb->usermeta WHERE meta_key = 'last_activity' {$exclude_users_sql}" ) );
     508        set_transient( 'bp_active_member_count', $count );
     509    }
     510
     511    return apply_filters( 'bp_core_get_active_member_count', $count );
     512}
     513
     514/**
    489515 * Processes a spammed or unspammed user
    490516 *
     
    768794        return false;
    769795
     796    do_action( 'bp_core_pre_delete_account', $user_id );
     797
    770798    // Specifically handle multi-site environment
    771799    if ( is_multisite() ) {
     
    773801        require( ABSPATH . '/wp-admin/includes/user.php' );
    774802
    775         return wpmu_delete_user( $user_id );
     803        $retval = wpmu_delete_user( $user_id );
    776804
    777805    // Single site user deletion
    778806    } else {
    779807        require( ABSPATH . '/wp-admin/includes/user.php' );
    780         return wp_delete_user( $user_id );
    781     }
     808        $retval = wp_delete_user( $user_id );
     809    }
     810
     811    do_action( 'bp_core_deleted_account', $user_id );
     812
     813    return $retval;
    782814}
    783815
     
    11491181        $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->users SET user_pass = %s WHERE ID = %d", $user['meta']['password'], $user_id ) );
    11501182
    1151     // Delete the total member cache
    1152     wp_cache_delete( 'bp_total_member_count', 'bp' );
    1153 
    11541183    do_action( 'bp_core_activated_user', $user_id, $key, $user );
    11551184
Note: See TracChangeset for help on using the changeset viewer.