Ticket #2620: 2620.patch
File 2620.patch, 7.4 KB (added by , 14 years ago) |
---|
-
bp-core/bp-core-templatetags.php
17 17 var $pag_links; 18 18 var $total_member_count; 19 19 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, $exclude, $populate_extras ) { 21 21 global $bp; 22 22 23 23 $this->pag_page = isset( $_REQUEST['upage'] ) ? intval( $_REQUEST['upage'] ) : $page_number; … … 25 25 $this->type = $type; 26 26 27 27 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'], $exclude, $this->pag_num, $this->pag_page, $populate_extras ); 29 29 } 30 30 else if ( false !== $include ) { 31 31 $this->members = BP_Core_User::get_specific_users( $include, $this->pag_num, $this->pag_page, $populate_extras ); 32 32 } 33 33 else { 34 $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 ) );34 $this->members = bp_core_get_users( array( 'type' => $this->type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'exclude' => $exclude, 'search_terms' => $search_terms, 'populate_extras' => $populate_extras ) ); 35 35 } 36 36 37 37 if ( !$max || $max >= (int)$this->members['total'] ) … … 142 142 'per_page' => 20, 143 143 'max' => false, 144 144 145 'include' => false, // Pass a user_id or comma separated list of user_ids to only show these users 145 'include' => false, // Pass a user_id or a list (comma-separated or array) of user_ids to only show these users 146 'exclude' => false, // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users 146 147 147 148 'user_id' => $user_id, // Pass a user_id to only show friends of this user 148 149 'search_terms' => $search_terms, // Pass search_terms to filter users by their profile data … … 158 159 $per_page = $max; 159 160 } 160 161 161 /* Make sure we return no members if we looking at friendship requests and there are none. */ 162 if ( is_array( $include ) ) 163 $include = implode( ',', $include ); 164 165 if ( is_array( $exclude ) ) 166 $exclude = implode( ',', $exclude ); 167 168 /* Make sure we return no members if we are looking at friendship requests and there are none. */ 162 169 if ( empty( $include ) && $bp->friends->slug == $bp->current_component && 'requests' == $bp->current_action ) 163 170 return false; 164 171 165 $members_template = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, (bool)$populate_extras );172 $members_template = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, $exclude, (bool)$populate_extras ); 166 173 167 174 return $members_template->has_members(); 168 175 } -
bp-core/bp-core-classes.php
106 106 107 107 /* Static Functions */ 108 108 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, $exclude = false, $search_terms = false, $populate_extras = true ) { 110 110 global $wpdb, $bp; 111 111 112 112 $sql = array(); … … 137 137 138 138 if ( 'alphabetical' == $type ) 139 139 $sql['where_alpha'] = "AND pd.field_id = 1"; 140 141 if ( !empty( $exclude ) ) 142 $sql['where_exclude'] = "AND u.ID NOT IN ({$exclude})"; 140 143 141 144 if ( $user_id && function_exists( 'friends_install' ) ) { 142 145 $friend_ids = friends_get_friend_user_ids( $user_id ); … … 216 219 return array( 'users' => $paged_users, 'total' => $total_users ); 217 220 } 218 221 219 function get_users_by_letter( $letter, $ limit = null, $page = 1, $populate_extras = true ) {222 function get_users_by_letter( $letter, $exclude, $limit = null, $page = 1, $populate_extras = true ) { 220 223 global $wpdb, $bp; 221 224 222 225 if ( $limit && $page ) … … 228 231 $letter = like_escape( $wpdb->escape( $letter ) ); 229 232 $status_sql = bp_core_get_status_sql( 'u.' ); 230 233 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})" : ""; 233 235 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 234 239 $total_users = $wpdb->get_var( $total_users_sql ); 235 240 $paged_users = $wpdb->get_results( $paged_users_sql ); 236 241 -
bp-core.php
497 497 $defaults = array( 498 498 'type' => 'active', // active, newest, alphabetical, random or popular 499 499 'user_id' => false, // Pass a user_id to limit to only friend connections for this user 500 'exclude' => false, // Users to exclude from results 500 501 'search_terms' => false, // Limit to users that match these search terms 501 502 502 503 'per_page' => 20, // The number of results to return per page … … 507 508 $params = wp_parse_args( $args, $defaults ); 508 509 extract( $params, EXTR_SKIP ); 509 510 510 return apply_filters( 'bp_core_get_users', BP_Core_User::get_users( $type, $per_page, $page, $user_id, $ search_terms, $populate_extras ), &$params );511 return apply_filters( 'bp_core_get_users', BP_Core_User::get_users( $type, $per_page, $page, $user_id, $exclude, $search_terms, $populate_extras ), &$params ); 511 512 } 512 513 513 514 /**