Skip to:
Content

BuddyPress.org

Ticket #2620: 2620-3.patch

File 2620-3.patch, 7.5 KB (added by boonebgorges, 14 years ago)
  • bp-core/bp-core-templatetags.php

     
    1717        var $pag_links;
    1818        var $total_member_count;
    1919
    20         function bp_core_members_template( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras ) {
     20        function bp_core_members_template( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude ) {
    2121                global $bp;
    2222
    2323                $this->pag_page = isset( $_REQUEST['upage'] ) ? intval( $_REQUEST['upage'] ) : $page_number;
     
    2525                $this->type     = $type;
    2626
    2727                if ( isset( $_REQUEST['letter'] ) && '' != $_REQUEST['letter'] )
    28                         $this->members = BP_Core_User::get_users_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page, $populate_extras );
     28                        $this->members = BP_Core_User::get_users_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page, $populate_extras, $exclude );
    2929                else if ( false !== $include )
    3030                        $this->members = BP_Core_User::get_specific_users( $include, $this->pag_num, $this->pag_page, $populate_extras );
    3131                else
    32                         $this->members = bp_core_get_users( array( 'type' => $this->type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms, 'populate_extras' => $populate_extras ) );
     32                        $this->members = bp_core_get_users( array( 'type' => $this->type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms, 'populate_extras' => $populate_extras, 'exclude' => $exclude ) );
    3333
    3434                if ( !$max || $max >= (int)$this->members['total'] )
    3535                        $this->total_member_count = (int)$this->members['total'];
     
    140140                'per_page' => 20,
    141141                'max' => false,
    142142
    143                 'include' => false, // Pass a user_id or comma separated list of user_ids to only show these users
     143                'include' => false, // Pass a user_id or a list (comma-separated or array) of user_ids to only show these users
     144                'exclude' => false, // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users
    144145
    145146                'user_id' => $user_id, // Pass a user_id to only show friends of this user
    146147                'search_terms' => $search_terms, // Pass search_terms to filter users by their profile data
     
    156157                        $per_page = $max;
    157158        }
    158159
    159         /* Make sure we return no members if we looking at friendship requests and there are none. */
     160        if ( is_array( $include ) )
     161                $include = implode( ',', $include );
     162               
     163        if ( is_array( $exclude ) )
     164                $exclude = implode( ',', $exclude );
     165
     166        /* Make sure we return no members if we are looking at friendship requests and there are none. */
    160167        if ( empty( $include ) && $bp->friends->slug == $bp->current_component && 'requests' == $bp->current_action )
    161168                return false;
    162169
    163         $members_template = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, (bool)$populate_extras );
     170        $members_template = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, (bool)$populate_extras, $exclude );
    164171
    165172        return $members_template->has_members();
    166173}
  • bp-core/bp-core-classes.php

     
    106106
    107107        /* Static Functions */
    108108
    109         function get_users( $type, $limit = null, $page = 1, $user_id = false, $search_terms = false, $populate_extras = true ) {
     109        function get_users( $type, $limit = null, $page = 1, $user_id = false, $search_terms = false, $populate_extras = true, $exclude = false ) {
    110110                global $wpdb, $bp;
    111111
    112112                $sql = array();
     
    137137
    138138                if ( 'alphabetical' == $type )
    139139                        $sql['where_alpha'] = "AND pd.field_id = 1";
     140               
     141                if ( !empty( $exclude ) )
     142                        $sql['where_exclude'] = "AND u.ID NOT IN ({$exclude})";
    140143
    141144                if ( $user_id && function_exists( 'friends_install' ) ) {
    142145                        $friend_ids = friends_get_friend_user_ids( $user_id );
     
    216219                return array( 'users' => $paged_users, 'total' => $total_users );
    217220        }
    218221
    219         function get_users_by_letter( $letter, $limit = null, $page = 1, $populate_extras = true ) {
     222        function get_users_by_letter( $letter, $limit = null, $page = 1, $populate_extras = true, $exclude = false ) {
    220223                global $wpdb, $bp;
    221224
    222225                if ( $limit && $page )
     
    228231                $letter = like_escape( $wpdb->escape( $letter ) );
    229232                $status_sql = bp_core_get_status_sql( 'u.' );
    230233
    231                 $total_users_sql = apply_filters( 'bp_core_users_by_letter_count_sql', $wpdb->prepare( "SELECT COUNT(DISTINCT u.ID) FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s AND pd.value LIKE '$letter%%' ORDER BY pd.value ASC", BP_XPROFILE_FULLNAME_FIELD_NAME ), $letter );
    232                 $paged_users_sql = apply_filters( 'bp_core_users_by_letter_sql', $wpdb->prepare( "SELECT DISTINCT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.user_email FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s AND pd.value LIKE '$letter%%' ORDER BY pd.value ASC{$pag_sql}", BP_XPROFILE_FULLNAME_FIELD_NAME ), $letter, $pag_sql );
     234                $exclude_sql = ( !empty( $exclude ) ) ? " AND u.ID NOT IN ({$exclude})" : "";
    233235
     236                $total_users_sql = apply_filters( 'bp_core_users_by_letter_count_sql', $wpdb->prepare( "SELECT COUNT(DISTINCT u.ID) FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s {$exclude_sql} AND pd.value LIKE '$letter%%'  ORDER BY pd.value ASC", BP_XPROFILE_FULLNAME_FIELD_NAME ), $letter );
     237                $paged_users_sql = apply_filters( 'bp_core_users_by_letter_sql', $wpdb->prepare( "SELECT DISTINCT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.user_email FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s {$exclude_sql} AND pd.value LIKE '$letter%%' ORDER BY pd.value ASC{$pag_sql}", BP_XPROFILE_FULLNAME_FIELD_NAME ), $letter, $pag_sql );
     238               
    234239                $total_users = $wpdb->get_var( $total_users_sql );
    235240                $paged_users = $wpdb->get_results( $paged_users_sql );
    236241
  • bp-core.php

     
    493493        $defaults = array(
    494494                'type' => 'active', // active, newest, alphabetical, random or popular
    495495                'user_id' => false, // Pass a user_id to limit to only friend connections for this user
     496                'exclude' => false, // Users to exclude from results
    496497                'search_terms' => false, // Limit to users that match these search terms
    497498
    498499                'per_page' => 20, // The number of results to return per page
     
    503504        $params = wp_parse_args( $args, $defaults );
    504505        extract( $params, EXTR_SKIP );
    505506
    506         return apply_filters( 'bp_core_get_users', BP_Core_User::get_users( $type, $per_page, $page, $user_id, $search_terms, $populate_extras ), &$params );
     507        return apply_filters( 'bp_core_get_users', BP_Core_User::get_users( $type, $per_page, $page, $user_id, $search_terms, $populate_extras, $exclude ), &$params );
    507508}
    508509
    509510/**