Skip to:
Content

BuddyPress.org

Changeset 5987


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)
Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-core/bp-core-cache.php

    r5986 r5987  
    4444        wp_cache_delete( 'bp_user_' . $user_id, 'bp' );
    4545}
     46
     47/**
     48 * Clears member count caches and transients
     49 */
     50function bp_core_clear_member_count_caches() {
     51        wp_cache_delete( 'bp_total_member_count', 'bp' );
     52        delete_transient( 'bp_active_member_count' );
     53}
     54add_action( 'bp_core_activated_user',         'bp_core_clear_member_count_caches' );
     55add_action( 'bp_core_process_spammer_status', 'bp_core_clear_member_count_caches' );
     56add_action( 'bp_core_deleted_account',        'bp_core_clear_member_count_caches' );
    4657
    4758/**
  • trunk/bp-core/bp-core-template.php

    r5942 r5987  
    503503add_filter( 'bp_create_excerpt', 'force_balance_tags' );
    504504
     505/**
     506 * Echoes the output of bp_get_total_member_count()
     507 */
    505508function bp_total_member_count() {
    506509        echo bp_get_total_member_count();
    507510}
     511        /**
     512         * Returns the total member count in your BP instance
     513         *
     514         * Since BuddyPress 1.6, this function has used bp_core_get_active_member_count(), which
     515         * counts non-spam, non-deleted users who have last_activity. This value will correctly
     516         * match the total member count number used for pagination on member directories.
     517         *
     518         * Before BuddyPress 1.6, this function used bp_core_get_total_member_count(), which did
     519         * not take into account last_activity, and thus often resulted in higher counts than
     520         * shown by member directory pagination.
     521         */
    508522        function bp_get_total_member_count() {
    509                 return apply_filters( 'bp_get_total_member_count', bp_core_get_total_member_count() );
     523                return apply_filters( 'bp_get_total_member_count', bp_core_get_active_member_count() );
    510524        }
    511525        add_filter( 'bp_get_total_member_count', 'bp_core_number_format' );
  • 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
  • trunk/bp-themes/bp-default/activity/index.php

    r5819 r5987  
    3737                                        <?php do_action( 'bp_before_activity_type_tab_all' ); ?>
    3838
    39                                         <li class="selected" id="activity-all"><a href="<?php echo trailingslashit( bp_get_root_domain() . '/' . bp_get_activity_slug() ); ?>" title="<?php _e( 'The public activity for everyone on this site.', 'buddypress' ); ?>"><?php printf( __( 'All Members <span>%s</span>', 'buddypress' ), bp_get_total_site_member_count() ); ?></a></li>
     39                                        <li class="selected" id="activity-all"><a href="<?php echo trailingslashit( bp_get_root_domain() . '/' . bp_get_activity_slug() ); ?>" title="<?php _e( 'The public activity for everyone on this site.', 'buddypress' ); ?>"><?php printf( __( 'All Members <span>%s</span>', 'buddypress' ), bp_get_total_member_count() ); ?></a></li>
    4040
    4141                                        <?php if ( is_user_logged_in() ) : ?>
    … …  
    9090
    9191                                        <li id="activity-filter-select" class="last">
    92                                                 <label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label> 
     92                                                <label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label>
    9393                                                <select id="activity-filter-by">
    9494                                                        <option value="-1"><?php _e( 'Everything', 'buddypress' ); ?></option>
Note: See TracChangeset for help on using the changeset viewer.